Use samba for create and restore virtual partitions

This requires to configure user and password for samba repositories.
more_events
Roberto Hueso Gómez 2020-04-17 15:40:02 +02:00
parent dfb69e9dd5
commit 7ccc498014
5 changed files with 41 additions and 7 deletions

View File

@ -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
mode=linux
# User and password for all samba repositories. This user requires read and
# write permission.
[samba]
user=opengnsys
pass=og

11
main.py
View File

@ -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()

View File

@ -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

View File

@ -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()

View File

@ -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):