File virt.network_update-handle-missing-ipv4-netmask-attr.patch of Package salt

From c0a9915e44d4b1cbc09b5d52e7ed41ec7c29abcf Mon Sep 17 00:00:00 2001
From: Cedric Bosdonnat <cbosdonnat@suse.com>
Date: Wed, 10 Mar 2021 09:29:12 +0100
Subject: [PATCH] virt.network_update: handle missing ipv4 netmask
 attribute (#328)

In the libvirt definition, the IPv4 netmask XML attribute may be
replaced by the prefix one. Handle this situation gracefully rather than
miserably failing.
---
 changelog/59692.fixed                           |  1 +
 salt/modules/virt.py                            |  2 +-
 tests/pytests/unit/modules/virt/test_network.py | 13 +++++++++----
 3 files changed, 11 insertions(+), 5 deletions(-)
 create mode 100644 changelog/59692.fixed

diff --git a/changelog/59692.fixed b/changelog/59692.fixed
new file mode 100644
index 0000000000..b4f4533ccc
--- /dev/null
+++ b/changelog/59692.fixed
@@ -0,0 +1 @@
+Don't fail updating network without netmask ip attribute
diff --git a/salt/modules/virt.py b/salt/modules/virt.py
index 35711fcef4..6409089109 100644
--- a/salt/modules/virt.py
+++ b/salt/modules/virt.py
@@ -7415,7 +7415,7 @@ def network_update(
             if node.get("family", "ipv4") == "ipv4"
         ]
         for ip_node in ipv4_nodes:
-            netmask = ip_node.attrib.pop("netmask")
+            netmask = ip_node.attrib.pop("netmask", None)
             if netmask:
                 address = ipaddress.ip_network(
                     "{}/{}".format(ip_node.get("address"), netmask), strict=False
diff --git a/tests/pytests/unit/modules/virt/test_network.py b/tests/pytests/unit/modules/virt/test_network.py
index 52aadc9519..0def5e5c32 100644
--- a/tests/pytests/unit/modules/virt/test_network.py
+++ b/tests/pytests/unit/modules/virt/test_network.py
@@ -365,8 +365,11 @@ def test_update_nat_nochange(make_mock_network):
     define_mock.assert_not_called()
 
 
-@pytest.mark.parametrize("test", [True, False])
-def test_update_nat_change(make_mock_network, test):
+@pytest.mark.parametrize(
+    "test, netmask",
+    [(True, "netmask='255.255.255.0'"), (True, "prefix='24'"), (False, "prefix='24'")],
+)
+def test_update_nat_change(make_mock_network, test, netmask):
     """
     Test updating a NAT network with changes
     """
@@ -379,13 +382,15 @@ def test_update_nat_change(make_mock_network, test):
           <bridge name='virbr0' stp='on' delay='0'/>
           <mac address='52:54:00:cd:49:6b'/>
           <domain name='my.lab' localOnly='yes'/>
-          <ip address='192.168.122.1' netmask='255.255.255.0'>
+          <ip address='192.168.122.1' {}>
             <dhcp>
               <range start='192.168.122.2' end='192.168.122.254'/>
             </dhcp>
           </ip>
         </network>
-        """
+        """.format(
+            netmask
+        )
     )
     assert virt.network_update(
         "default",
-- 
2.30.1


openSUSE Build Service is sponsored by