Anpassungen an den Variablen
This commit is contained in:
144
GUI/bash.py
Normal file
144
GUI/bash.py
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import subprocess
|
||||
import random
|
||||
|
||||
def check_user_existence(username):
|
||||
try:
|
||||
subprocess.check_output(['id', username])
|
||||
except subprocess.CalledProcessError:
|
||||
print(f"Der Benutzer {username} existiert nicht auf diesem System.")
|
||||
exit(1)
|
||||
|
||||
def get_group_users(groupname):
|
||||
try:
|
||||
members = subprocess.check_output(['getent', 'group', groupname]).decode().split(':')[3].split(',')
|
||||
return members if members else []
|
||||
except subprocess.CalledProcessError:
|
||||
print(f"Die Gruppe {groupname} existiert nicht oder hat keine Mitglieder.")
|
||||
exit(1)
|
||||
|
||||
def get_random_name():
|
||||
names = ["frodo", "samweis", "gandalf", "aragorn", "legolas", "gimli", "boromir", "meriadoc", "peregrin",
|
||||
"arwen", "galadriel", "celeborn", "elrond", "glorfindel", "faramir", "eowyn", "theoden", "treebeard",
|
||||
"gollum", "sauron", "saruman", "bilbo", "denethor", "radagast", "thranduil", "bard", "dori", "frodo"]
|
||||
return random.choice(names)
|
||||
|
||||
def generate_rdp_port():
|
||||
return str(random.randint(3390, 49151))
|
||||
|
||||
def input_options(options, prompt):
|
||||
while True:
|
||||
try:
|
||||
for i, option in enumerate(options, 1):
|
||||
print(f"{i}. {option}")
|
||||
choice = int(input(prompt))
|
||||
if 1 <= choice <= len(options):
|
||||
return options[choice - 1]
|
||||
else:
|
||||
print("Ungültige Auswahl. Bitte erneut versuchen.")
|
||||
except ValueError:
|
||||
print("Ungültige Eingabe. Bitte geben Sie eine Zahl ein.")
|
||||
|
||||
def execute_command(command, user=None):
|
||||
if user:
|
||||
command = ['sudo', '-u', user] + command
|
||||
subprocess.run(command)
|
||||
|
||||
def main():
|
||||
print("User / Passwort: user00/Start1234")
|
||||
print("Welches VDI-OS soll installiert werden")
|
||||
print()
|
||||
|
||||
print("Für wen soll es sein?")
|
||||
print()
|
||||
options = ["Aktueller Benutzer", "Anderer Benutzer", "Mitglieder einer Gruppe", "Beenden"]
|
||||
user_choice = input_options(options, "Ihre Auswahl: ")
|
||||
|
||||
if user_choice == "Aktueller Benutzer":
|
||||
VAR_GROUP_MEMBERS = [subprocess.check_output(['whoami']).decode().strip()]
|
||||
elif user_choice == "Anderer Benutzer":
|
||||
VAR_GROUP_MEMBERS = [input("Bitte geben Sie einen Benutzernamen ein: ")]
|
||||
check_user_existence(VAR_GROUP_MEMBERS[0])
|
||||
elif user_choice == "Mitglieder einer Gruppe":
|
||||
VAR_GROUP = input("Bitte geben Sie den Gruppennamen ein: ")
|
||||
VAR_GROUP_MEMBERS = get_group_users(VAR_GROUP)
|
||||
elif user_choice == "Beenden":
|
||||
exit()
|
||||
|
||||
options = ["Ubuntu 2204 GUI BASE", "Ubuntu 2204 GUI BASE EXT", "Ubuntu 2204 SRV", "Ubuntu 2204 GUI GER",
|
||||
"Ubuntu 2204 GUI GER EXT", "Beenden"]
|
||||
user_choice = input_options(options, 'Bitte wählen Sie die VM-Option: ')
|
||||
|
||||
if user_choice == "Beenden":
|
||||
exit()
|
||||
|
||||
default_name = get_random_name()
|
||||
|
||||
VAR_OS, VAR_VDI = "", ""
|
||||
if user_choice == "Ubuntu 2204 GUI BASE":
|
||||
VAR_OS, VAR_VDI = "Ubuntu_64", "ubu2204_GUI_BASE.vdi"
|
||||
elif user_choice == "Ubuntu 2204 GUI BASE EXT":
|
||||
VAR_OS, VAR_VDI = "Ubuntu_64", "ubu2204_GUI_BASE.vdi"
|
||||
elif user_choice == "Ubuntu 2204 SRV":
|
||||
VAR_OS, VAR_VDI = "Ubuntu_64", "ubu2204_SRV.vdi"
|
||||
elif user_choice == "Ubuntu 2204 GUI GER":
|
||||
VAR_OS, VAR_VDI = "Ubuntu_64", "ubu2204_GUI_GER.vdi"
|
||||
elif user_choice == "Ubuntu 2204 GUI GER EXT":
|
||||
VAR_OS, VAR_VDI = "Ubuntu_64", "ubu2204_gui_ext_ger.vdi"
|
||||
|
||||
# Benutzereingaben
|
||||
VAR_QUANTITY = int(input("Wie viele VMs werden benötigt? [1]: ") or 1)
|
||||
VAR_NAME_PREFIX = input(f"Präfix Host Name (Vorgabe: {default_name}): ") or default_name
|
||||
VAR_CPU = int(input("CPUs [2]: ") or 2)
|
||||
VAR_MEM = int(input("Memory [2048]: ") or 2048)
|
||||
VAR_ADDITIONAL_HDD = int(input("Anzahl der zusätzlichen HDDs (Standard: 0): ") or 0)
|
||||
|
||||
VAR_PATH_TO_VDI = "/srv/data/VDI"
|
||||
VAR_VIDEO_RAM = 64
|
||||
VAR_NIC = "bridged"
|
||||
VAR_NET = subprocess.check_output(['ip', 'addr', 'show']).decode().split('2: ')[1].split()[0].strip()
|
||||
VAR_NAME_PREFIX = VAR_NAME_PREFIX or default_name
|
||||
|
||||
for VAR_USER_IN_GROUP in VAR_GROUP_MEMBERS:
|
||||
VAR_RDP_PORT = generate_rdp_port()
|
||||
|
||||
for i in range(1, VAR_QUANTITY + 1):
|
||||
VM_NAME = f"{VAR_NAME_PREFIX}-{VAR_USER_IN_GROUP}-VM{i}"
|
||||
VM_DIR = f"/storage/vbox_storage/{VAR_USER_IN_GROUP}"
|
||||
|
||||
execute_command(['VBoxManage', 'createvm', '--name', VM_NAME, '--ostype', VAR_OS, '--register', '--basefolder', VM_DIR], user=VAR_USER_IN_GROUP)
|
||||
|
||||
execute_command(['VBoxManage', 'modifyvm', VM_NAME, '--ioapic', 'on', '--memory', str(VAR_MEM),
|
||||
'--cpus', str(VAR_CPU), '--vram', str(VAR_VIDEO_RAM), '--nic1', 'Nat', '--nic2', VAR_NIC,
|
||||
'--bridgeadapter2', VAR_NET, '--graphicscontroller', 'vmsvga', '--vrde', 'on',
|
||||
'--vrdemulticon', 'on', '--vrdeport', VAR_RDP_PORT], user=VAR_USER_IN_GROUP)
|
||||
|
||||
execute_command(['VBoxManage', 'storagectl', VM_NAME, '--name', 'SATA Controller', '--add', 'sata',
|
||||
'--controller', 'IntelAhci'], user=VAR_USER_IN_GROUP)
|
||||
|
||||
execute_command(['VBoxManage', 'storagectl', VM_NAME, '--name', 'IDE Controller', '--add', 'ide',
|
||||
'--controller', 'PIIX4'], user=VAR_USER_IN_GROUP)
|
||||
|
||||
execute_command(['VBoxManage', 'storageattach', VM_NAME, '--storagectl', 'IDE Controller', '--port', '1',
|
||||
'--device', '0', '--type', 'dvddrive', '--medium', '/usr/lib/virtualbox/additions/VBoxGuestAdditions.iso'], user=VAR_USER_IN_GROUP)
|
||||
|
||||
with open("/srv/data/GIT/Virtualbox/rdp_port.txt", "a") as rdp_file:
|
||||
rdp_file.write(f"{VM_NAME}-{VAR_RDP_PORT}\n")
|
||||
|
||||
for j in range(1, VAR_ADDITIONAL_HDD + 1):
|
||||
HDD_NUM = f"{j:02d}"
|
||||
HDD_NAME = f"{VM_NAME}-disk{HDD_NUM}.vdi"
|
||||
|
||||
execute_command(['VBoxManage', 'createhd', '--filename', f"{VM_DIR}/{HDD_NAME}", '--size', '102400', '--format', 'VDI'], user=VAR_USER_IN_GROUP)
|
||||
|
||||
execute_command(['VBoxManage', 'storageattach', VM_NAME, '--storagectl', 'SATA Controller', '--port', HDD_NUM,
|
||||
'--device', '0', '--type', 'hdd', '--medium', f"{VM_DIR}/{VM_NAME}/{HDD_NAME}"], user=VAR_USER_IN_GROUP)
|
||||
|
||||
execute_command(['VBoxManage', 'clonehd', f"{VAR_PATH_TO_VDI}/{VAR_VDI}", f"{VM_DIR}/{VM_NAME}/{VM_NAME}-disk00.vdi"], user=VAR_USER_IN_GROUP)
|
||||
|
||||
execute_command(['VBoxManage', 'storageattach', VM_NAME, '--storagectl', 'SATA Controller', '--port', '0',
|
||||
'--device', '0', '--type', 'hdd', '--medium', f"{VM_DIR}/{VM_NAME}/{VM_NAME}-disk00.vdi"], user=VAR_USER_IN_GROUP)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user