from getmac import get_mac_address as gma import socket import yaml import os import stat import psutil from string import Template class MachineData(): def get_ip_address(self): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) return s.getsockname()[0] def __init__(self): self.mac_address = gma() self.ip_address = str(self.get_ip_address()) self.hostname = socket.gethostname() self.client_version = "v0.0.1alpha" self.cpu_count = os.cpu_count() self.ram_size = (psutil.virtual_memory().total / 1024) / 1024 try: with open("config.yml", "r") as stream: try: config_file = yaml.safe_load(stream) except Exception as e: print(e) except FileNotFoundError as e: print(str(e)) exit(-1) config = config_file try: server_url_override = os.environ.get("VALHALLA_SERVER_URL") server_port_override = os.environ.get("VALHALLA_SERVER_PORT") server_password_override = os.environ.get("VALHALLA_SERVER_PASSWORD") server_access_username_override = os.environ.get( "VALHALLA_SERVER_ACCESS_USERNAME") client_logging_override = os.environ.get("VALHALLA_CLIENT_LOGLEVEL") if server_port_override: config["server_port"] = server_port_override if server_url_override: config["server_url"] = server_url_override if server_password_override: config["server_password"] = server_password_override if server_access_username_override: config["server_access_username"] = server_access_username_override if client_logging_override: config["client_loglevel"] = client_logging_override self.server_url = config["server_url"] self.server_port = config["server_port"] self.server_password = config["server_password"] self.server_access_username = config["server_access_username"] self.client_loglevel = config["client_loglevel"] except KeyError as ke: print(str(ke)) pass except TypeError as te: print(str(te)) pass except Exception as e: print(str(e)) exit(-1) def generate_runner_script(self, file_path: str): substitution_mapper = { "CPU_CORES_COUNT": int(self.cpu_count/2), "MEMORY_ALLOCATION_SIZE": f"{int(self.ram_size/2)}M", "IMAGE_PATH": f"{os.getcwd()}/{file_path}/image.qcow2" } try: with open("vm_run_script.template", "r") as file: src = file.read() temp_src = Template(src) result = temp_src.substitute(substitution_mapper) result_file = open(f"{file_path}/run.sh", "w") result_file.write(result) result_file.flush() result_file.close() st = os.stat(file_path) os.chmod(file_path, 0o0777) except Exception as ex: print(str(ex))