From 7a754f722de1e44865573335b990658b3ff004cc Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Tue, 12 Sep 2017 22:00:48 +0200 Subject: LVM support added --- cmount.py | 52 +++++++++++++++++++++++++++++++++++++--------------- cumount.py | 46 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 69 insertions(+), 29 deletions(-) diff --git a/cmount.py b/cmount.py index 587c02f..f980dc9 100755 --- a/cmount.py +++ b/cmount.py @@ -20,21 +20,43 @@ def main(): config_dict = json.load(fp) cstm_error = 'Invalid / nonexistent mapping: {0}'.format(sys.argv[1]) data = config_dict[sys.argv[1]] - if data.get('type') == 'efile': - cstm_error = 'Unable to create loop device' - data['device'] = subprocess.check_output(['/usr/sbin/losetup', - '--find', - '--show', - data['device']]).strip() - cstm_error = 'system() error' - subprocess.check_call(['/sbin/cryptsetup', - 'luksOpen', - data['device'], - data['mapper_name']]) - arguments = ['/bin/mount', '/dev/mapper/' + data['mapper_name']] - if data.get('target'): - arguments.append(data['target']) - subprocess.check_call(arguments) + if data.get('type') == 'lvm': + if not isinstance(data.get('pv_sources'), dict): + cstm_error = 'Invalid config for lvm-type' + raise Exception() + cstm_error = 'pv_sources error' + for device, mapper_name in data['pv_sources'].items(): + subprocess.check_call(['/sbin/cryptsetup', + 'luksOpen', + device, + mapper_name]) + cstm_error = 'lvchange error' + subprocess.check_call(['/sbin/lvchange', + '-a', + 'y', + data['device']]) + cstm_error = 'mount error' + arguments = ['/bin/mount', data['device']] + if data.get('target'): + arguments.append(data['target']) + subprocess.check_call(arguments) + else: + if data.get('type') == 'efile': + cstm_error = 'Unable to create loop device' + data['device'] = subprocess.check_output( + ['/usr/sbin/losetup', + '--find', + '--show', + data['device']]).strip() + cstm_error = 'system() error' + subprocess.check_call(['/sbin/cryptsetup', + 'luksOpen', + data['device'], + data['mapper_name']]) + arguments = ['/bin/mount', '/dev/mapper/' + data['mapper_name']] + if data.get('target'): + arguments.append(data['target']) + subprocess.check_call(arguments) except subprocess.CalledProcessError as e: sys.stderr.write('Execution error: {0}\n'.format(e)) sys.stderr.flush() diff --git a/cumount.py b/cumount.py index 16aa2f3..e2fb32f 100755 --- a/cumount.py +++ b/cumount.py @@ -20,20 +20,38 @@ def main(): config_dict = json.load(fp) cstm_error = 'Invalid / nonexistent mapping: {0}'.format(sys.argv[1]) data = config_dict[sys.argv[1]] - subprocess.check_call(['/bin/umount', - '/dev/mapper/' + data['mapper_name']]) - subprocess.check_call(['/sbin/cryptsetup', - 'luksClose', - data['mapper_name']]) - if data.get('type') == 'efile': - cstm_error = 'Unable to destroy loop device' - loop_device = subprocess.check_output(['/usr/sbin/losetup', - '--associated', - data['device']]) - loop_device = loop_device.split(':')[0] - subprocess.check_call(['/usr/sbin/losetup', - '-d', - loop_device]) + if data.get('type') == 'lvm': + if not isinstance(data.get('pv_sources'), dict): + cstm_error = 'Invalid config for lvm-type' + raise Exception() + cstm_error = 'umount error' + subprocess.check_call(['/bin/umount', + data['device']]) + cstm_error = 'lvchange error' + subprocess.check_call(['/sbin/lvchange', + '-a', + 'n', + data['device']]) + cstm_error = 'pv_sources error' + for mapper_name in data['pv_sources'].values(): + subprocess.check_call(['/sbin/cryptsetup', + 'luksClose', + mapper_name]) + else: + subprocess.check_call(['/bin/umount', + '/dev/mapper/' + data['mapper_name']]) + subprocess.check_call(['/sbin/cryptsetup', + 'luksClose', + data['mapper_name']]) + if data.get('type') == 'efile': + cstm_error = 'Unable to destroy loop device' + loop_device = subprocess.check_output(['/usr/sbin/losetup', + '--associated', + data['device']]) + loop_device = loop_device.split(':')[0] + subprocess.check_call(['/usr/sbin/losetup', + '-d', + loop_device]) except subprocess.CalledProcessError as e: sys.stderr.write('Execution error: {0}\n'.format(e)) sys.stderr.flush() -- cgit v1.3