From ef6b3ba8e80367d3a102c2ee6edb0f50ca06809f Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Sat, 11 Jul 2015 17:55:44 -0500 Subject: [PATCH] VirtualMachine: Refresh LVM cache before creating PV When *lvmetad* is in use, it will cache volume group metadata from previous runs of `mkvm` that used the same block device and prevent new physical volumes from being created on it. Running `pvscan` alone does not refresh the cache unless it is told to do so with the `--cache` argument. --- src/mkvm/storage.py | 7 +++++-- src/mkvm/vmdesc.py | 5 ++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/mkvm/storage.py b/src/mkvm/storage.py index 2bb6b3a..f0c0916 100644 --- a/src/mkvm/storage.py +++ b/src/mkvm/storage.py @@ -135,9 +135,12 @@ def partition_gpt(blockdev, partitions): raise DiskError('Failed to partition disk: {}'.format(msg)) -def pvscan(): +def pvscan(dev=None): + cmd = ['pvscan'] + if dev: + cmd += ('--cache', dev) try: - output = subprocess.check_output(['pvscan'], stderr=subprocess.STDOUT) + output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) if output: log.debug('pvscan:\n{}'.format(output.decode().rstrip())) except subprocess.CalledProcessError as e: diff --git a/src/mkvm/vmdesc.py b/src/mkvm/vmdesc.py index 09fbb1c..6bceba3 100644 --- a/src/mkvm/vmdesc.py +++ b/src/mkvm/vmdesc.py @@ -372,8 +372,7 @@ class VirtualMachine(object): storage.partition_gpt(self._disk.blockdev, self.partitions) def _partition_lvm(self): - blockdev = self._disk.blockdev - storage.pvscan() + storage.pvscan(self._disk.blockdev) pvs = [] if self.partitions: partitions = self._disk.partitions @@ -381,7 +380,7 @@ class VirtualMachine(object): if part.get('type') == 0x8e00: pvs.append(partitions[idx]) else: - pvs.append(blockdev) + pvs.append(self._disk.blockdev) storage.create_lvm_pv(*pvs) storage.create_lvm_vg(self.vg_name, *pvs) for vol in self.volumes: