From 7ccc4980147954b68829d5555fcc9e5b7dd2c4ec Mon Sep 17 00:00:00 2001 From: Roberto Hueso Gómez Date: Fri, 17 Apr 2020 15:40:02 +0200 Subject: Use samba for create and restore virtual partitions This requires to configure user and password for samba repositories. --- cfg/ogclient.cfg | 8 +++++++- main.py | 11 ++++++++++- src/ogClient.py | 9 +++++++-- src/ogRest.py | 3 ++- src/virtual/ogOperations.py | 17 +++++++++++++++-- 5 files changed, 41 insertions(+), 7 deletions(-) diff --git a/cfg/ogclient.cfg b/cfg/ogclient.cfg index a13de5e..a006eca 100644 --- a/cfg/ogclient.cfg +++ b/cfg/ogclient.cfg @@ -5,4 +5,10 @@ port=8889 # Log Level, if ommited, will be set to INFO log=DEBUG # Supported modes are 'virtual' and 'linux' -mode=linux \ No newline at end of file +mode=linux + +# User and password for all samba repositories. This user requires read and +# write permission. +[samba] +user=opengnsys +pass=og diff --git a/main.py b/main.py index a67362d..e6cacf5 100755 --- a/main.py +++ b/main.py @@ -25,8 +25,17 @@ def main(): port = ogconfig.get_value_section('opengnsys', 'port') url = ogconfig.get_value_section('opengnsys', 'url') mode = ogconfig.get_value_section('opengnsys', 'mode') + samba_user = ogconfig.get_value_section('samba', 'user') + samba_pass = ogconfig.get_value_section('samba', 'pass') - client = ogClient(ip, int(port), mode) + samba_config = None + + if mode == 'linux': + proc = subprocess.Popen(["browser", "-qws", url]) + elif mode == 'virtual': + samba_config = {'user': samba_user, 'pass': samba_pass} + + client = ogClient(ip, int(port), mode, samba_config) client.connect() client.run() diff --git a/src/ogClient.py b/src/ogClient.py index b9f6a95..ff2c704 100644 --- a/src/ogClient.py +++ b/src/ogClient.py @@ -23,14 +23,19 @@ class State(Enum): FORCE_DISCONNECTED = 2 class ogClient: - def __init__(self, ip, port, mode): + def __init__(self, ip, port, mode, samba_config=None): if mode not in {'virtual', 'linux'}: raise ValueError('Mode not supported.') + if samba_config: + assert('user' in samba_config) + assert('pass' in samba_config) + self.ip = ip self.port = port self.mode = mode - self.ogrest = ogRest(self.mode) + self.samba_config = samba_config + self.ogrest = ogRest(self.mode, self.samba_config) def get_socket(self): return self.sock diff --git a/src/ogRest.py b/src/ogRest.py index cf15c6e..24c8a70 100644 --- a/src/ogRest.py +++ b/src/ogRest.py @@ -232,11 +232,12 @@ class ogResponses(Enum): SERVICE_UNAVAILABLE=5 class ogRest(): - def __init__(self, mode): + def __init__(self, mode, samba_config): self.proc = None self.terminated = False self.state = ThreadState.IDLE self.mode = mode + self.samba_config = samba_config if self.mode == 'linux' and platform.system() == 'Linux': self.operations = OgLinuxOperations() diff --git a/src/virtual/ogOperations.py b/src/virtual/ogOperations.py index 064fbc9..a9cf06b 100644 --- a/src/virtual/ogOperations.py +++ b/src/virtual/ogOperations.py @@ -227,6 +227,7 @@ class OgVirtualOperations: partition = request.getPartition() name = request.getName() repo = request.getRepo() + samba_config = ogRest.samba_config # Check if VM is running. qmp = OgQMP(self.IP, self.VIRTUAL_PORT) @@ -238,8 +239,11 @@ class OgVirtualOperations: drive_path = f'{self.OG_PARTITIONS_PATH}/disk{disk}_part{partition}.qcow2' - drive_path = f'disk{disk}_part{partition}.qcow2' - repo_path = f'images' + cmd = f'mount -t cifs //{repo}/ogimages {self.OG_IMAGES_PATH} -o ' \ + f'rw,nolock,serverino,acl,' \ + f'username={samba_config["user"]},' \ + f'password={samba_config["pass"]}' + subprocess.run([cmd], shell=True) try: shutil.copy(drive_path, f'{self.OG_IMAGES_PATH}/{name}') @@ -259,6 +263,7 @@ class OgVirtualOperations: ctype = request.getType() profile = request.getProfile() cid = request.getId() + samba_config = ogRest.samba_config # Check if VM is running. qmp = OgQMP(self.IP, self.VIRTUAL_PORT) @@ -273,11 +278,19 @@ class OgVirtualOperations: if os.path.exists(drive_path): os.remove(drive_path) + cmd = f'mount -t cifs //{repo}/ogimages {self.OG_IMAGES_PATH} -o ' \ + f'ro,nolock,serverino,acl,' \ + f'username={samba_config["user"]},' \ + f'password={samba_config["pass"]}' + subprocess.run([cmd], shell=True) + try: shutil.copy(f'{self.OG_IMAGES_PATH}/{name}', drive_path) except: return None + subprocess.run([f'umount {self.OG_IMAGES_PATH}'], shell=True) + return True def software(self, request, path, ogRest): -- cgit v1.2.3-18-g5258