diff options
author | Lars Wirzenius <liw@liw.fi> | 2018-08-18 16:00:11 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-08-18 16:00:11 +0300 |
commit | 88496fda25492ff6f5ced7a546af14cef54cacc5 (patch) | |
tree | 23bcefe75edcdcb0b7b6181cde825e3148394a49 | |
parent | c77c87e3feb1f3ad7d903a2bf5950aa3c4a2eb03 (diff) | |
download | vmdb2-88496fda25492ff6f5ced7a546af14cef54cacc5.tar.gz |
Change: don't create loop devs (with kpartx) if device is a blockdev
-rw-r--r-- | vmdb/plugins/partition_plugin.py | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/vmdb/plugins/partition_plugin.py b/vmdb/plugins/partition_plugin.py index c26d255..d98c1ab 100644 --- a/vmdb/plugins/partition_plugin.py +++ b/vmdb/plugins/partition_plugin.py @@ -17,6 +17,9 @@ +import os +import stat + import cliapp import vmdb @@ -61,6 +64,23 @@ class MkpartStepRunner(vmdb.StepRunnerInterface): part_type, device, start, end)) vmdb.runcmd(['parted', '-s', device, 'mkpart', part_type, fs_type, start, end]) + if self.is_block_dev(device): + self.remember_partition(state, device, part_tag) + else: + part_dev = self.create_loop_dev(device) + assert part_dev is not None + self.remember_partition(state, part_dev, part_tag) + + def is_block_dev(self, filename): + st = os.lstat(filename) + return stat.S_ISBLK(st.st_mode) + + def remember_partition(self, state, part_dev, part_tag): + parts = getattr(state, 'parts', {}) + parts[part_tag] = part_dev + state.parts = parts + + def create_loop_dev(self, device): vmdb.runcmd(['kpartx', '-dsv', device]) output = vmdb.runcmd(['kpartx', '-asv', device]).decode('UTF-8') device_file = None @@ -68,12 +88,8 @@ class MkpartStepRunner(vmdb.StepRunnerInterface): words = line.split() if words[0] == 'add': name = words[2] - device_file = '/dev/mapper/{}'.format(name) - - assert device_file is not None - parts = getattr(state, 'parts', {}) - parts[part_tag] = device_file - state.parts = parts + return '/dev/mapper/{}'.format(name) + return None def teardown(self, step, settings, state): device = step['device'] |