SHA256
1
0
forked from pool/salt
salt/virt.volume_infos-needs-to-ignore-inactive-pools-174.patch

84 lines
3.9 KiB
Diff

From 0cf303fb475fc35c84aba0c4b2d4708aca3c211d Mon Sep 17 00:00:00 2001
From: Cedric Bosdonnat <cbosdonnat@suse.com>
Date: Tue, 3 Sep 2019 15:17:38 +0200
Subject: [PATCH] virt.volume_infos needs to ignore inactive pools (#174)
libvirt raises an error when getting the list of volumes of a pool that
is not active. Rule out those pools from virt.volume_infos since we
still need to give infos on the other pools' volumes.
---
salt/modules/virt.py | 7 +++++--
tests/unit/modules/test_virt.py | 9 +++++++++
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/salt/modules/virt.py b/salt/modules/virt.py
index 953064cc2c..0353e6a1f5 100644
--- a/salt/modules/virt.py
+++ b/salt/modules/virt.py
@@ -5021,7 +5021,9 @@ def _get_all_volumes_paths(conn):
:param conn: libvirt connection to use
'''
- volumes = [vol for l in [obj.listAllVolumes() for obj in conn.listAllStoragePools()] for vol in l]
+ volumes = [vol for l in
+ [obj.listAllVolumes() for obj in conn.listAllStoragePools()
+ if obj.info()[0] == libvirt.VIR_STORAGE_POOL_RUNNING] for vol in l]
return {vol.path(): [path.text for path in ElementTree.fromstring(vol.XMLDesc()).findall('.//backingStore/path')]
for vol in volumes if _is_valid_volume(vol)}
@@ -5086,7 +5088,8 @@ def volume_infos(pool=None, volume=None, **kwargs):
'used_by': used_by,
}
- pools = [obj for obj in conn.listAllStoragePools() if pool is None or obj.name() == pool]
+ pools = [obj for obj in conn.listAllStoragePools()
+ if (pool is None or obj.name() == pool) and obj.info()[0] == libvirt.VIR_STORAGE_POOL_RUNNING]
vols = {pool_obj.name(): {vol.name(): _volume_extract_infos(vol)
for vol in pool_obj.listAllVolumes()
if (volume is None or vol.name() == volume) and _is_valid_volume(vol)}
diff --git a/tests/unit/modules/test_virt.py b/tests/unit/modules/test_virt.py
index b343b9bc31..e644e62452 100644
--- a/tests/unit/modules/test_virt.py
+++ b/tests/unit/modules/test_virt.py
@@ -2743,6 +2743,7 @@ class VirtTestCase(TestCase, LoaderModuleMockMixin):
mock_pool_data = [
{
'name': 'pool0',
+ 'state': self.mock_libvirt.VIR_STORAGE_POOL_RUNNING,
'volumes': [
{
'key': '/key/of/vol0',
@@ -2755,6 +2756,7 @@ class VirtTestCase(TestCase, LoaderModuleMockMixin):
},
{
'name': 'pool1',
+ 'state': self.mock_libvirt.VIR_STORAGE_POOL_RUNNING,
'volumes': [
{
'key': '/key/of/vol0bad',
@@ -2784,6 +2786,7 @@ class VirtTestCase(TestCase, LoaderModuleMockMixin):
for pool_data in mock_pool_data:
mock_pool = MagicMock()
mock_pool.name.return_value = pool_data['name'] # pylint: disable=no-member
+ mock_pool.info.return_value = [pool_data['state']]
mock_volumes = []
for vol_data in pool_data['volumes']:
mock_volume = MagicMock()
@@ -2817,6 +2820,12 @@ class VirtTestCase(TestCase, LoaderModuleMockMixin):
mock_pool.listAllVolumes.return_value = mock_volumes # pylint: disable=no-member
mock_pools.append(mock_pool)
+ inactive_pool = MagicMock()
+ inactive_pool.name.return_value = 'pool2'
+ inactive_pool.info.return_value = [self.mock_libvirt.VIR_STORAGE_POOL_INACTIVE]
+ inactive_pool.listAllVolumes.side_effect = self.mock_libvirt.libvirtError('pool is inactive')
+ mock_pools.append(inactive_pool)
+
self.mock_conn.listAllStoragePools.return_value = mock_pools # pylint: disable=no-member
with patch('salt.modules.virt._get_domain', MagicMock(return_value=mock_vms)):
--
2.16.4