diff options
author | Roberto Hueso Gómez <rhueso@soleta.eu> | 2020-04-17 15:40:02 +0200 |
---|---|---|
committer | Roberto Hueso Gómez <rhueso@soleta.eu> | 2020-04-17 15:50:35 +0200 |
commit | 7ccc4980147954b68829d5555fcc9e5b7dd2c4ec (patch) | |
tree | 1cf06afe9ba92ab85386002f44f6fb1f971ab584 | |
parent | dfb69e9dd5f983bc2f97302866fcf37f2ef5d064 (diff) |
Use samba for create and restore virtual partitions
This requires to configure user and password for samba repositories.
-rw-r--r-- | cfg/ogclient.cfg | 8 | ||||
-rwxr-xr-x | main.py | 11 | ||||
-rw-r--r-- | src/ogClient.py | 9 | ||||
-rw-r--r-- | src/ogRest.py | 3 | ||||
-rw-r--r-- | 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 @@ -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): |