mirror of
https://github.com/bashclub/zamba-lxc-toolbox.git
synced 2024-12-25 19:50:12 +01:00
136 lines
7.7 KiB
Python
136 lines
7.7 KiB
Python
|
#!/usr/bin/python3
|
||
|
import os
|
||
|
from src import config_base, menu
|
||
|
|
||
|
# Check installation of zfs-auto-snapshot, if not installed, just notify user
|
||
|
config_base.check_zfs_autosnapshot()
|
||
|
|
||
|
cfg = {}
|
||
|
# set template storage
|
||
|
t_storages = config_base.get_pve_storages(content=config_base.PveStorageContent.vztmpl)
|
||
|
if len(t_storages.keys()) > 1:
|
||
|
t_stors={}
|
||
|
for st in t_storages.keys():
|
||
|
t_stors[st] = f"driver: {t_storages[st]['driver']}\tfree space: {int(t_storages[st]['available'])/1024/1024:.2f} GB"
|
||
|
cfg['LXC_TEMPLATE_STORAGE'] = menu.radiolist("Select container template storage", "Please choose the storage, where your container templates are stored.", t_stors)
|
||
|
elif len(t_storages.keys()) == 1:
|
||
|
cfg['LXC_TEMPLATE_STORAGE'] = next(iter(t_storages))
|
||
|
else:
|
||
|
print("Could not find any storage enabled for container templates. Please ensure your storages are configured properly.")
|
||
|
os._exit(1)
|
||
|
|
||
|
# get zmb service
|
||
|
cfg['ZMB_SERVICE'] = menu.radiolist("Select service","Please choose the service to install:", config_base.get_zmb_services())
|
||
|
|
||
|
# get static ct features
|
||
|
ct_features = config_base.get_ct_features(cfg["ZMB_SERVICE"])
|
||
|
cfg['LXC_UNPRIVILEGED'] = ct_features['unprivileged']
|
||
|
# get ct id
|
||
|
cfg['LXC_NBR'] = menu.question("Container ID", f"Please select an ID for the {cfg['ZMB_SERVICE']} container.", menu.qType.Integer, config_base.get_ct_id(), config_base.validate_ct_id)
|
||
|
|
||
|
# configure rootfs
|
||
|
r_storages = config_base.get_pve_storages(driver=config_base.PveStorageType.zfspool,content=config_base.PveStorageContent.rootdir)
|
||
|
if len(r_storages.keys()) > 1:
|
||
|
r_stors = {}
|
||
|
for st in r_storages.keys():
|
||
|
r_stors[st] = f"driver: {r_storages[st]['driver']}\tfree space: {int(r_storages[st]['available'])/1024/1024:.2f} GB"
|
||
|
cfg['LXC_ROOTFS_STORAGE'] = menu.radiolist("Select rootfs storage", "Please choose the storage for your container's rootfs",r_stors)
|
||
|
elif len(r_storages.keys()) == 1:
|
||
|
cfg['LXC_ROOTFS_STORAGE'] = next(iter(r_storages))
|
||
|
else:
|
||
|
print("Could not find any storage enabled for container filesystems. Please ensure your storages are configured properly.")
|
||
|
os._exit(1)
|
||
|
|
||
|
cfg['LXC_ROOTFS_SIZE'] = menu.question("Set rootfs size","Please type in the desired rootfs size (GB)", menu.qType.Integer,32)
|
||
|
|
||
|
# create additional mountpoints
|
||
|
if 'size' in ct_features['sharefs'].keys():
|
||
|
f_storages = config_base.get_pve_storages(driver=config_base.PveStorageType.zfspool,content=config_base.PveStorageContent.rootdir)
|
||
|
if len(f_storages.keys()) > 1:
|
||
|
f_stors = {}
|
||
|
for st in f_storages.keys():
|
||
|
f_stors[st] = f"driver: {f_storages[st]['driver']}\tfree space: {int(f_storages[st]['available'])/1024/1024:.2f} GB"
|
||
|
cfg['LXC_SHAREFS_STORAGE'] = menu.radiolist("Select sharefs storage", "Please choose the storage of your shared filesystem", f_stors)
|
||
|
elif len(r_storages.keys()) == 1:
|
||
|
cfg['LXC_SHAREFS_STORAGE'] = next(iter(f_storages))
|
||
|
else:
|
||
|
print("Could not find any storage enabled for container filesystems. Please ensure your storages are configured properly.")
|
||
|
os._exit(1)
|
||
|
cfg['LXC_SHAREFS_SIZE'] = menu.question("Select sharefs size","Please type in the desired size (GB) of your shared filesystem", menu.qType.Integer,ct_features['sharefs']['size'])
|
||
|
cfg['LXC_SHAREFS_MOUNTPOINT'] = menu.question("Select sharefs mountpoint","Please type in the folder where to mount your shared filesystem inside the container.", menu.qType.String,ct_features['sharefs']['mountpoint'])
|
||
|
|
||
|
# configure ram and swap
|
||
|
cfg['LXC_MEM'] = menu.question("Set container RAM", "Please type in the desired amount of RAM for the container (MB)",menu.qType.Integer,ct_features["mem"])
|
||
|
cfg['LXC_SWAP'] = menu.question("Set container Swap", "Please type in the desired amount of Swap for the container (MB)",menu.qType.Integer,ct_features["swap"])
|
||
|
cfg['LXC_HOSTNAME'] = menu.question("Set container Hostname", "Please type in the desired hostname of the container",menu.qType.String,ct_features['hostname'])
|
||
|
cfg['LXC_DOMAIN'] = menu.question("Set container search domain", "Please type in the search domain of your network.", menu.qType.String,ct_features['domain'])
|
||
|
cfg['LXC_TIMEZONE'] = 'host' # TODO
|
||
|
cfg['LXC_LOCALE'] = "de_DE.utf8" # TODO
|
||
|
|
||
|
# get pve bridge
|
||
|
bridges = config_base.get_pve_bridges()
|
||
|
if len(bridges) > 1:
|
||
|
cfg['LXC_BRIDGE'] = menu.radiolist("Select PVE Network Bridge", f"Please select the network bridge to connect the {cfg['ZMB_SERVICE']} container",bridges)
|
||
|
elif len(bridges) == 1:
|
||
|
cfg['LXC_BRIDGE'] = bridges[0]
|
||
|
else:
|
||
|
print("Could not find any bridge device to connect container. Please ensure your networksettings are configured properly.")
|
||
|
os._exit(1)
|
||
|
|
||
|
cfg['LXC_VLAN'] = menu.question("Set vlan tag", "You you want to tag your container's network to a vlan? (0 = untagged, 1 - 4094 = tagged vlan id)",menu.qType.Integer,0, config_base.validate_vlan)
|
||
|
|
||
|
# configure network interface
|
||
|
if cfg['ZMB_SERVICE'] != 'zmb-ad':
|
||
|
enable_dhcp = menu.question("Set network mode", "Do you want to configure the network interface in dhcp mode?",menu.qType.Boolean,default=True)
|
||
|
else:
|
||
|
enable_dhcp = False
|
||
|
if enable_dhcp == True:
|
||
|
cfg["LXC_NET_MODE"] = 'dhcp'
|
||
|
else:
|
||
|
cfg["LXC_NET_MODE"] = 'static'
|
||
|
cfg["LXC_IP"] = menu.question("Set interface IP Addess", "Pleace type in the containers IP address (CIDR Format).",menu.qType.String,default='10.10.10.10/8')
|
||
|
cfg["LXC_GW"] = menu.question("Set interface default gateway", "Pleace type in the containers default gateway.",menu.qType.String,default='10.10.10.1')
|
||
|
cfg['LXC_DNS'] = menu.question("Set containers dns server", "Pleace type in the containers dns server. ZMB AD will use this as dns forwarder",menu.qType.String,default='10.10.10.1')
|
||
|
|
||
|
cfg['LXC_PWD'] = menu.question("Set root password", "Please type in the containers root password", menu.qType.String,default='')
|
||
|
cfg['LXC_AUTHORIZED_KEY'] = menu.question ("Set authorized_keys file to import", "Please select authorized_keys file to import.", menu.qType.String, default='~/.ssh/authorized_keys')
|
||
|
|
||
|
os.system('clear')
|
||
|
print (f"#### Zamba LXC Toolbox ####\n")
|
||
|
print (f"GLOBAL CONFIGURATION:")
|
||
|
print (f"\tct template storage:\t{cfg['LXC_TEMPLATE_STORAGE']}")
|
||
|
print (f"\nCONTAINER CONFIGURATION:")
|
||
|
print (f"\tzmb service:\t\t{cfg['ZMB_SERVICE']}")
|
||
|
print (f"\tcontainer id:\t\t{cfg['LXC_NBR']}")
|
||
|
print (f"\tunprivileged:\t\t{cfg['LXC_UNPRIVILEGED']}")
|
||
|
for feature in ct_features['features'].keys():
|
||
|
if feature == 'nesting':
|
||
|
cfg['LXC_NESTING'] = ct_features['features'][feature]
|
||
|
print (f"\t{feature}:\t\t{cfg['LXC_NESTING']}")
|
||
|
print (f"\tcontainer memory:\t{cfg['LXC_MEM']} MB")
|
||
|
print (f"\tcontainer swap:\t\t{cfg['LXC_SWAP']} MB")
|
||
|
print (f"\tcontainer hostname:\t{cfg['LXC_HOSTNAME']}")
|
||
|
print (f"\tct search domain:\t{cfg['LXC_DOMAIN']}")
|
||
|
print (f"\tcontainer timezone\t{cfg['LXC_TIMEZONE']}")
|
||
|
print (f"\tcontainer language\t{cfg['LXC_LOCALE']}")
|
||
|
print (f"\nSTORAGE CONFIGURATION:")
|
||
|
print (f"\trootfs storage:\t\t{cfg['LXC_ROOTFS_STORAGE']}")
|
||
|
print (f"\trootfs size:\t\t{cfg['LXC_ROOTFS_SIZE']} GB")
|
||
|
if 'size' in ct_features['sharefs'].keys():
|
||
|
print (f"\tsharefs storage:\t{cfg['LXC_SHAREFS_STORAGE']}")
|
||
|
print (f"\tsharefs size:\t\t{cfg['LXC_SHAREFS_SIZE']} GB")
|
||
|
print (f"\tsharefs mountpoint:\t{cfg['LXC_SHAREFS_MOUNTPOINT']}")
|
||
|
print (f"\nNETWORK CONFIGURATION:")
|
||
|
print (f"\tpve bridge:\t\t{cfg['LXC_BRIDGE']}")
|
||
|
if cfg['LXC_VLAN'] > 0:
|
||
|
print (f"\tcontainer vlan:\t\t{cfg['LXC_VLAN']}")
|
||
|
else:
|
||
|
print (f"\tcontainer vlan:\t\tuntagged")
|
||
|
print (f"\tnetwork mode:\t\t{cfg['LXC_NET_MODE']}")
|
||
|
if enable_dhcp == False:
|
||
|
print (f"\tip address (CIDR):\t{cfg['LXC_IP']}")
|
||
|
print (f"\tdefault gateway:\t{cfg['LXC_GW']}")
|
||
|
print (f"\tdns server / forwarder:\t{cfg['LXC_GW']}")
|
||
|
print (f"\nCONTAINER CREDENTIALS:")
|
||
|
print (f"\troot password:\t\t{cfg['LXC_PWD']}")
|
||
|
print (f"\tauthorized ssh keys:\t{cfg['LXC_AUTHORIZED_KEY']}")
|