Add backing file format to the output
Since libvirt 6, it might be important to understand the format of the backing image [1] and verify it before operations. So we adding backing file format to the output of the QemuImgInfo [1] https://libvirt.org/kbase/backing_chains.html Change-Id: If83289882e79a973bc77f332408f8f7317351f6f
This commit is contained in:
parent
d8b3e046ce
commit
3b5eebdc1c
@ -58,6 +58,7 @@ class QemuImgInfo(object):
|
|||||||
details = json.loads(cmd_output or '{}')
|
details = json.loads(cmd_output or '{}')
|
||||||
self.image = details.get('filename')
|
self.image = details.get('filename')
|
||||||
self.backing_file = details.get('backing-filename')
|
self.backing_file = details.get('backing-filename')
|
||||||
|
self.backing_file_format = details.get('backing-filename-format')
|
||||||
self.file_format = details.get('format')
|
self.file_format = details.get('format')
|
||||||
self.virtual_size = details.get('virtual-size')
|
self.virtual_size = details.get('virtual-size')
|
||||||
self.cluster_size = details.get('cluster-size')
|
self.cluster_size = details.get('cluster-size')
|
||||||
@ -75,6 +76,7 @@ class QemuImgInfo(object):
|
|||||||
details = self._parse(cmd_output or '')
|
details = self._parse(cmd_output or '')
|
||||||
self.image = details.get('image')
|
self.image = details.get('image')
|
||||||
self.backing_file = details.get('backing_file')
|
self.backing_file = details.get('backing_file')
|
||||||
|
self.backing_file_format = details.get('backing_file_format')
|
||||||
self.file_format = details.get('file_format')
|
self.file_format = details.get('file_format')
|
||||||
self.virtual_size = details.get('virtual_size')
|
self.virtual_size = details.get('virtual_size')
|
||||||
self.cluster_size = details.get('cluster_size')
|
self.cluster_size = details.get('cluster_size')
|
||||||
@ -91,6 +93,7 @@ class QemuImgInfo(object):
|
|||||||
'disk_size: %s' % self.disk_size,
|
'disk_size: %s' % self.disk_size,
|
||||||
'cluster_size: %s' % self.cluster_size,
|
'cluster_size: %s' % self.cluster_size,
|
||||||
'backing_file: %s' % self.backing_file,
|
'backing_file: %s' % self.backing_file,
|
||||||
|
'backing_file_format: %s' % self.backing_file_format,
|
||||||
]
|
]
|
||||||
if self.snapshots:
|
if self.snapshots:
|
||||||
lines.append("snapshots: %s" % self.snapshots)
|
lines.append("snapshots: %s" % self.snapshots)
|
||||||
|
@ -174,6 +174,12 @@ class ImageUtilsHumanQemuTestCase(ImageUtilsHumanRawTestCase):
|
|||||||
exp_backing_file='/b/3a988059e51a_2')),
|
exp_backing_file='/b/3a988059e51a_2')),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
_qcow2_backing_file_format = [
|
||||||
|
('no_backing_file_format', dict(backing_file_format=None)),
|
||||||
|
('backing_file_format', dict(backing_file_format='qcow2',
|
||||||
|
exp_backing_file_format='qcow2')),
|
||||||
|
]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def generate_scenarios(cls):
|
def generate_scenarios(cls):
|
||||||
cls.scenarios = testscenarios.multiply_scenarios(
|
cls.scenarios = testscenarios.multiply_scenarios(
|
||||||
@ -185,7 +191,8 @@ class ImageUtilsHumanQemuTestCase(ImageUtilsHumanRawTestCase):
|
|||||||
cls._snapshot_count,
|
cls._snapshot_count,
|
||||||
cls._qcow2_cluster_size,
|
cls._qcow2_cluster_size,
|
||||||
cls._qcow2_encrypted,
|
cls._qcow2_encrypted,
|
||||||
cls._qcow2_backing_file)
|
cls._qcow2_backing_file,
|
||||||
|
cls._qcow2_backing_file_format)
|
||||||
|
|
||||||
@mock.patch("debtcollector.deprecate")
|
@mock.patch("debtcollector.deprecate")
|
||||||
def test_qemu_img_info_human_format(self, mock_deprecate):
|
def test_qemu_img_info_human_format(self, mock_deprecate):
|
||||||
@ -194,6 +201,9 @@ class ImageUtilsHumanQemuTestCase(ImageUtilsHumanRawTestCase):
|
|||||||
if self.backing_file is not None:
|
if self.backing_file is not None:
|
||||||
img_info = img_info + ('backing file: %s' %
|
img_info = img_info + ('backing file: %s' %
|
||||||
self.backing_file,)
|
self.backing_file,)
|
||||||
|
if self.backing_file_format is not None:
|
||||||
|
img_info = img_info + ('backing file format: %s' %
|
||||||
|
self.backing_file_format,)
|
||||||
if self.encrypted is not None:
|
if self.encrypted is not None:
|
||||||
img_info = img_info + ('encrypted: %s' % self.encrypted,)
|
img_info = img_info + ('encrypted: %s' % self.encrypted,)
|
||||||
if self.garbage_before_snapshot is True:
|
if self.garbage_before_snapshot is True:
|
||||||
@ -211,6 +221,9 @@ class ImageUtilsHumanQemuTestCase(ImageUtilsHumanRawTestCase):
|
|||||||
if self.backing_file is not None:
|
if self.backing_file is not None:
|
||||||
self.assertEqual(image_info.backing_file,
|
self.assertEqual(image_info.backing_file,
|
||||||
self.exp_backing_file)
|
self.exp_backing_file)
|
||||||
|
if self.backing_file_format is not None:
|
||||||
|
self.assertEqual(image_info.backing_file_format,
|
||||||
|
self.exp_backing_file_format)
|
||||||
if self.encrypted is not None:
|
if self.encrypted is not None:
|
||||||
self.assertEqual(image_info.encrypted, self.encrypted)
|
self.assertEqual(image_info.encrypted, self.encrypted)
|
||||||
|
|
||||||
@ -223,7 +236,8 @@ class ImageUtilsBlankTestCase(test_base.BaseTestCase):
|
|||||||
example_output = '\n'.join(['image: None', 'file_format: None',
|
example_output = '\n'.join(['image: None', 'file_format: None',
|
||||||
'virtual_size: None', 'disk_size: None',
|
'virtual_size: None', 'disk_size: None',
|
||||||
'cluster_size: None',
|
'cluster_size: None',
|
||||||
'backing_file: None'])
|
'backing_file: None',
|
||||||
|
'backing_file_format: None'])
|
||||||
image_info = imageutils.QemuImgInfo()
|
image_info = imageutils.QemuImgInfo()
|
||||||
self.assertEqual(str(image_info), example_output)
|
self.assertEqual(str(image_info), example_output)
|
||||||
self.assertEqual(len(image_info.snapshots), 0)
|
self.assertEqual(len(image_info.snapshots), 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user