summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoberto Hueso Gómez <rhueso@soleta.eu>2020-04-17 15:40:02 +0200
committerRoberto Hueso Gómez <rhueso@soleta.eu>2020-04-17 15:50:35 +0200
commit7ccc4980147954b68829d5555fcc9e5b7dd2c4ec (patch)
tree1cf06afe9ba92ab85386002f44f6fb1f971ab584
parentdfb69e9dd5f983bc2f97302866fcf37f2ef5d064 (diff)
Use samba for create and restore virtual partitions
This requires to configure user and password for samba repositories.
-rw-r--r--cfg/ogclient.cfg8
-rwxr-xr-xmain.py11
-rw-r--r--src/ogClient.py9
-rw-r--r--src/ogRest.py3
-rw-r--r--src/virtual/ogOperations.py17
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):