SHA256
1
0
forked from pool/salt
salt/virt-1.volume_infos-fix-for-single-vm.patch

92 lines
3.7 KiB
Diff

From 4e32b8efa3ef393f2d19d5f06a16668a514044c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
Date: Thu, 4 Apr 2019 16:18:58 +0200
Subject: [PATCH] virt.volume_infos fix for single VM
virt.volume_infos: don't raise an error if there is no VM
---
salt/modules/virt.py | 8 +++++--
tests/unit/modules/test_virt.py | 46 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/salt/modules/virt.py b/salt/modules/virt.py
index d160f0905f..953064cc2c 100644
--- a/salt/modules/virt.py
+++ b/salt/modules/virt.py
@@ -5050,8 +5050,12 @@ def volume_infos(pool=None, volume=None, **kwargs):
conn = __get_conn(**kwargs)
try:
backing_stores = _get_all_volumes_paths(conn)
- domains = _get_domain(conn)
- domains_list = domains if isinstance(domains, list) else [domains]
+ try:
+ domains = _get_domain(conn)
+ domains_list = domains if isinstance(domains, list) else [domains]
+ except CommandExecutionError:
+ # Having no VM is not an error here.
+ domains_list = []
disks = {domain.name():
{node.get('file') for node
in ElementTree.fromstring(domain.XMLDesc(0)).findall('.//disk/source/[@file]')}
diff --git a/tests/unit/modules/test_virt.py b/tests/unit/modules/test_virt.py
index cc62b67918..b343b9bc31 100644
--- a/tests/unit/modules/test_virt.py
+++ b/tests/unit/modules/test_virt.py
@@ -2910,6 +2910,52 @@ class VirtTestCase(TestCase, LoaderModuleMockMixin):
}
})
+ # No VM test
+ with patch('salt.modules.virt._get_domain', MagicMock(side_effect=CommandExecutionError('no VM'))):
+ actual = virt.volume_infos('pool0', 'vol0')
+ self.assertEqual(1, len(actual.keys()))
+ self.assertEqual(1, len(actual['pool0'].keys()))
+ self.assertEqual([], sorted(actual['pool0']['vol0']['used_by']))
+ self.assertEqual('/path/to/vol0.qcow2', actual['pool0']['vol0']['path'])
+ self.assertEqual('file', actual['pool0']['vol0']['type'])
+ self.assertEqual('/key/of/vol0', actual['pool0']['vol0']['key'])
+ self.assertEqual(123456789, actual['pool0']['vol0']['capacity'])
+ self.assertEqual(123456, actual['pool0']['vol0']['allocation'])
+
+ self.assertEqual(virt.volume_infos('pool1', None), {
+ 'pool1': {
+ 'vol1': {
+ 'type': 'file',
+ 'key': '/key/of/vol1',
+ 'path': '/path/to/vol1.qcow2',
+ 'capacity': 12345,
+ 'allocation': 1234,
+ 'used_by': [],
+ },
+ 'vol2': {
+ 'type': 'file',
+ 'key': '/key/of/vol2',
+ 'path': '/path/to/vol2.qcow2',
+ 'capacity': 12345,
+ 'allocation': 1234,
+ 'used_by': [],
+ }
+ }
+ })
+
+ self.assertEqual(virt.volume_infos(None, 'vol2'), {
+ 'pool1': {
+ 'vol2': {
+ 'type': 'file',
+ 'key': '/key/of/vol2',
+ 'path': '/path/to/vol2.qcow2',
+ 'capacity': 12345,
+ 'allocation': 1234,
+ 'used_by': [],
+ }
+ }
+ })
+
def test_volume_delete(self):
'''
Test virt.volume_delete
--
2.16.4