osc copypac from project:systemsmanagement:saltstack:testing package:salt revision:389
OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=186
This commit is contained in:
parent
cbf630a579
commit
81d3bbe82c
48
3002-set-distro-requirement-to-oldest-supported-vers.patch
Normal file
48
3002-set-distro-requirement-to-oldest-supported-vers.patch
Normal file
@ -0,0 +1,48 @@
|
||||
From ffe924ef060a9b9540a4dcd117e045eaefa62513 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graul <mail@agraul.de>
|
||||
Date: Tue, 9 Mar 2021 13:46:03 +0100
|
||||
Subject: [PATCH] 3002: Set distro requirement to oldest supported
|
||||
version (#327)
|
||||
|
||||
In the released Salt packages, python3-distro is taken from the
|
||||
officially repositories on supported operating systems. The oldest
|
||||
supported python3-distro version is 1.0.1 in Ubuntu18.04 universe and
|
||||
Debian 9. FreeBSD is an exception and requires 1.3.0.
|
||||
The mismatch between the version specified in requirements/base.txt and
|
||||
what is actually used by the released packages can be confusing.
|
||||
|
||||
(cherry picked from commit 5c9c0ab9cdf2bf67bfdd259b53aa15297d1656ce)
|
||||
(cherry picked from commit 0ff35358f79e9df8b06fb345fd79c1d22ed91179)
|
||||
|
||||
Co-authored-by: Pedro Algarvio <pedro@algarvio.me>
|
||||
---
|
||||
requirements/base.txt | 2 +-
|
||||
requirements/static/pkg/freebsd.in | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/requirements/base.txt b/requirements/base.txt
|
||||
index ffe4bc98f1..6af972bd1b 100644
|
||||
--- a/requirements/base.txt
|
||||
+++ b/requirements/base.txt
|
||||
@@ -3,7 +3,7 @@ msgpack>=0.5,!=0.5.5
|
||||
PyYAML
|
||||
MarkupSafe
|
||||
requests>=1.0.0
|
||||
-distro>=1.5
|
||||
+distro>=1.0.1
|
||||
# Requirements for Tornado 4.5.3 (vendored as salt.ext.tornado)
|
||||
singledispatch==3.4.0.3; python_version < '3.4'
|
||||
# Required by Tornado to handle threads stuff.
|
||||
diff --git a/requirements/static/pkg/freebsd.in b/requirements/static/pkg/freebsd.in
|
||||
index 879a378822..7cfa3dcce8 100644
|
||||
--- a/requirements/static/pkg/freebsd.in
|
||||
+++ b/requirements/static/pkg/freebsd.in
|
||||
@@ -8,3 +8,4 @@ python-dateutil>=2.8.0
|
||||
python-gnupg>=0.4.4
|
||||
setproctitle>=1.1.10
|
||||
timelib>=0.2.5
|
||||
+distro>=1.3.0
|
||||
--
|
||||
2.30.1
|
||||
|
||||
|
@ -1 +1 @@
|
||||
20438f0fbeca551fd5a04babf1a686a5455c2ce3
|
||||
68bd2c45e40cf64ac426a7e5833daa076ab10cfe
|
153
do-not-monkey-patch-yaml-bsc-1177474.patch
Normal file
153
do-not-monkey-patch-yaml-bsc-1177474.patch
Normal file
@ -0,0 +1,153 @@
|
||||
From 8eaeb751d4077d6514577b53a9dbe23df231018e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
|
||||
<psuarezhernandez@suse.com>
|
||||
Date: Mon, 8 Mar 2021 12:35:14 +0000
|
||||
Subject: [PATCH] Do not monkey patch yaml (bsc#1177474)
|
||||
|
||||
Add changelog file
|
||||
|
||||
Add suggestions by pre-commit
|
||||
|
||||
Add unit test to check for monkey patching
|
||||
---
|
||||
changelog/57995.fixed | 1 +
|
||||
salt/utils/yamlloader.py | 28 ++++++++++------------------
|
||||
tests/unit/utils/test_yamlloader.py | 6 +++++-
|
||||
3 files changed, 16 insertions(+), 19 deletions(-)
|
||||
create mode 100644 changelog/57995.fixed
|
||||
|
||||
diff --git a/changelog/57995.fixed b/changelog/57995.fixed
|
||||
new file mode 100644
|
||||
index 0000000000..78f2cd1fa4
|
||||
--- /dev/null
|
||||
+++ b/changelog/57995.fixed
|
||||
@@ -0,0 +1 @@
|
||||
+Do not monkey patch yaml loaders: Prevent breaking Ansible filter modules
|
||||
diff --git a/salt/utils/yamlloader.py b/salt/utils/yamlloader.py
|
||||
index e9d80fc4ad..f98fdcb0e9 100644
|
||||
--- a/salt/utils/yamlloader.py
|
||||
+++ b/salt/utils/yamlloader.py
|
||||
@@ -1,10 +1,7 @@
|
||||
-# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Custom YAML loading in Salt
|
||||
"""
|
||||
|
||||
-# Import python libs
|
||||
-from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
import warnings
|
||||
|
||||
@@ -13,13 +10,8 @@ import yaml # pylint: disable=blacklisted-import
|
||||
from yaml.constructor import ConstructorError
|
||||
from yaml.nodes import MappingNode, SequenceNode
|
||||
|
||||
-try:
|
||||
- yaml.Loader = yaml.CLoader
|
||||
- yaml.Dumper = yaml.CDumper
|
||||
- yaml.SafeLoader = yaml.CSafeLoader
|
||||
- yaml.SafeDumper = yaml.CSafeDumper
|
||||
-except Exception: # pylint: disable=broad-except
|
||||
- pass
|
||||
+# prefer C bindings over python when available
|
||||
+BaseLoader = getattr(yaml, "CSafeLoader", yaml.SafeLoader)
|
||||
|
||||
|
||||
__all__ = ["SaltYamlSafeLoader", "load", "safe_load"]
|
||||
@@ -35,7 +27,7 @@ warnings.simplefilter("always", category=DuplicateKeyWarning)
|
||||
|
||||
|
||||
# with code integrated from https://gist.github.com/844388
|
||||
-class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
+class SaltYamlSafeLoader(BaseLoader):
|
||||
"""
|
||||
Create a custom YAML loader that uses the custom constructor. This allows
|
||||
for the YAML loading defaults to be manipulated based on needs within salt
|
||||
@@ -43,7 +35,7 @@ class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
"""
|
||||
|
||||
def __init__(self, stream, dictclass=dict):
|
||||
- super(SaltYamlSafeLoader, self).__init__(stream)
|
||||
+ super().__init__(stream)
|
||||
if dictclass is not dict:
|
||||
# then assume ordered dict and use it for both !map and !omap
|
||||
self.add_constructor("tag:yaml.org,2002:map", type(self).construct_yaml_map)
|
||||
@@ -74,7 +66,7 @@ class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
raise ConstructorError(
|
||||
None,
|
||||
None,
|
||||
- "expected a mapping node, but found {0}".format(node.id),
|
||||
+ "expected a mapping node, but found {}".format(node.id),
|
||||
node.start_mark,
|
||||
)
|
||||
|
||||
@@ -90,7 +82,7 @@ class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
raise ConstructorError(
|
||||
context,
|
||||
node.start_mark,
|
||||
- "found unacceptable key {0}".format(key_node.value),
|
||||
+ "found unacceptable key {}".format(key_node.value),
|
||||
key_node.start_mark,
|
||||
)
|
||||
value = self.construct_object(value_node, deep=deep)
|
||||
@@ -98,7 +90,7 @@ class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
raise ConstructorError(
|
||||
context,
|
||||
node.start_mark,
|
||||
- "found conflicting ID '{0}'".format(key),
|
||||
+ "found conflicting ID '{}'".format(key),
|
||||
key_node.start_mark,
|
||||
)
|
||||
mapping[key] = value
|
||||
@@ -118,7 +110,7 @@ class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
# an empty string. Change it to '0'.
|
||||
if node.value == "":
|
||||
node.value = "0"
|
||||
- return super(SaltYamlSafeLoader, self).construct_scalar(node)
|
||||
+ return super().construct_scalar(node)
|
||||
|
||||
def construct_yaml_str(self, node):
|
||||
value = self.construct_scalar(node)
|
||||
@@ -142,7 +134,7 @@ class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
raise ConstructorError(
|
||||
"while constructing a mapping",
|
||||
node.start_mark,
|
||||
- "expected a mapping for merging, but found {0}".format(
|
||||
+ "expected a mapping for merging, but found {}".format(
|
||||
subnode.id
|
||||
),
|
||||
subnode.start_mark,
|
||||
@@ -156,7 +148,7 @@ class SaltYamlSafeLoader(yaml.SafeLoader):
|
||||
raise ConstructorError(
|
||||
"while constructing a mapping",
|
||||
node.start_mark,
|
||||
- "expected a mapping or list of mappings for merging, but found {0}".format(
|
||||
+ "expected a mapping or list of mappings for merging, but found {}".format(
|
||||
value_node.id
|
||||
),
|
||||
value_node.start_mark,
|
||||
diff --git a/tests/unit/utils/test_yamlloader.py b/tests/unit/utils/test_yamlloader.py
|
||||
index a1e17af760..3f2e4403ba 100644
|
||||
--- a/tests/unit/utils/test_yamlloader.py
|
||||
+++ b/tests/unit/utils/test_yamlloader.py
|
||||
@@ -13,7 +13,7 @@ import salt.utils.files
|
||||
|
||||
# Import 3rd-party libs
|
||||
from salt.ext import six
|
||||
-from salt.utils.yamlloader import SaltYamlSafeLoader
|
||||
+from salt.utils.yamlloader import SaltYamlSafeLoader, yaml
|
||||
from tests.support.mock import mock_open, patch
|
||||
|
||||
# Import Salt Testing Libs
|
||||
@@ -177,3 +177,7 @@ class YamlLoaderTestCase(TestCase):
|
||||
),
|
||||
{"foo": {"b": {"foo": "bar", "one": 1, "list": [1, "two", 3]}}},
|
||||
)
|
||||
+
|
||||
+ def test_not_yaml_monkey_patching(self):
|
||||
+ if hasattr(yaml, "CSafeLoader"):
|
||||
+ assert yaml.SafeLoader != yaml.CSafeLoader
|
||||
--
|
||||
2.30.1
|
||||
|
||||
|
99
prevent-race-condition-on-sigterm-for-the-minion-bsc.patch
Normal file
99
prevent-race-condition-on-sigterm-for-the-minion-bsc.patch
Normal file
@ -0,0 +1,99 @@
|
||||
From 30fa660f0f6a9a3e5709e4fd0773e43248018726 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
|
||||
<psuarezhernandez@suse.com>
|
||||
Date: Tue, 19 Jan 2021 09:23:44 +0000
|
||||
Subject: [PATCH] Prevent race condition on SIGTERM for the minion
|
||||
(bsc#1172110)
|
||||
|
||||
Prevent race condition when handling signals by CLI clients
|
||||
|
||||
Add test case to cover destroy race condition for minion module_refresh
|
||||
---
|
||||
salt/loader.py | 17 +++++++++++------
|
||||
salt/minion.py | 2 ++
|
||||
tests/unit/test_minion.py | 27 +++++++++++++++++++++++++++
|
||||
3 files changed, 40 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/salt/loader.py b/salt/loader.py
|
||||
index 7b42b6b0d6..02446b5ee1 100644
|
||||
--- a/salt/loader.py
|
||||
+++ b/salt/loader.py
|
||||
@@ -1737,12 +1737,17 @@ class LazyLoader(salt.utils.lazy.LazyDict):
|
||||
except Exception: # pylint: disable=broad-except
|
||||
pass
|
||||
else:
|
||||
- tgt_fn = os.path.join("salt", "utils", "process.py")
|
||||
- if fn_.endswith(tgt_fn) and "_handle_signals" in caller:
|
||||
- # Race conditon, SIGTERM or SIGINT received while loader
|
||||
- # was in process of loading a module. Call sys.exit to
|
||||
- # ensure that the process is killed.
|
||||
- sys.exit(salt.defaults.exitcodes.EX_OK)
|
||||
+ tgt_fns = [
|
||||
+ os.path.join("salt", "utils", "process.py"),
|
||||
+ os.path.join("salt", "cli", "daemons.py"),
|
||||
+ os.path.join("salt", "cli", "api.py"),
|
||||
+ ]
|
||||
+ for tgt_fn in tgt_fns:
|
||||
+ if fn_.endswith(tgt_fn) and "_handle_signals" in caller:
|
||||
+ # Race conditon, SIGTERM or SIGINT received while loader
|
||||
+ # was in process of loading a module. Call sys.exit to
|
||||
+ # ensure that the process is killed.
|
||||
+ sys.exit(salt.defaults.exitcodes.EX_OK)
|
||||
log.error(
|
||||
"Failed to import %s %s as the module called exit()\n",
|
||||
self.tag,
|
||||
diff --git a/salt/minion.py b/salt/minion.py
|
||||
index dacff1e0a9..6bfac076eb 100644
|
||||
--- a/salt/minion.py
|
||||
+++ b/salt/minion.py
|
||||
@@ -2385,6 +2385,8 @@ class Minion(MinionBase):
|
||||
"""
|
||||
Refresh the functions and returners.
|
||||
"""
|
||||
+ if not hasattr(self, "schedule"):
|
||||
+ return
|
||||
log.debug("Refreshing modules. Notify=%s", notify)
|
||||
self.functions, self.returners, _, self.executors = self._load_modules(
|
||||
force_refresh, notify=notify
|
||||
diff --git a/tests/unit/test_minion.py b/tests/unit/test_minion.py
|
||||
index 36c88819f4..9b31d011ec 100644
|
||||
--- a/tests/unit/test_minion.py
|
||||
+++ b/tests/unit/test_minion.py
|
||||
@@ -392,6 +392,33 @@ class MinionTestCase(TestCase, AdaptedConfigurationTestCaseMixin):
|
||||
finally:
|
||||
minion.destroy()
|
||||
|
||||
+ def test_minion_module_refresh(self):
|
||||
+ """
|
||||
+ Tests that the 'module_refresh' just return in case there is no 'schedule'
|
||||
+ because destroy method was already called.
|
||||
+ """
|
||||
+ with patch("salt.minion.Minion.ctx", MagicMock(return_value={})), patch(
|
||||
+ "salt.utils.process.SignalHandlingProcess.start",
|
||||
+ MagicMock(return_value=True),
|
||||
+ ), patch(
|
||||
+ "salt.utils.process.SignalHandlingProcess.join",
|
||||
+ MagicMock(return_value=True),
|
||||
+ ):
|
||||
+ try:
|
||||
+ mock_opts = salt.config.DEFAULT_MINION_OPTS.copy()
|
||||
+ minion = salt.minion.Minion(
|
||||
+ mock_opts, io_loop=salt.ext.tornado.ioloop.IOLoop(),
|
||||
+ )
|
||||
+ minion.schedule = salt.utils.schedule.Schedule(
|
||||
+ mock_opts, {}, returners={}
|
||||
+ )
|
||||
+ self.assertTrue(hasattr(minion, "schedule"))
|
||||
+ minion.destroy()
|
||||
+ self.assertTrue(not hasattr(minion, "schedule"))
|
||||
+ self.assertTrue(not minion.module_refresh())
|
||||
+ finally:
|
||||
+ minion.destroy()
|
||||
+
|
||||
@slowTest
|
||||
def test_when_ping_interval_is_set_the_callback_should_be_added_to_periodic_callbacks(
|
||||
self,
|
||||
--
|
||||
2.30.1
|
||||
|
||||
|
35
salt.changes
35
salt.changes
@ -1,3 +1,36 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Mar 10 08:42:54 UTC 2021 - Pablo Suárez Hernández <pablo.suarezhernandez@suse.com>
|
||||
|
||||
- virt.network_update: handle missing ipv4 netmask attribute
|
||||
|
||||
- Added:
|
||||
* virt.network_update-handle-missing-ipv4-netmask-attr.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Mar 9 14:34:29 UTC 2021 - Alexander Graul <alexander.graul@suse.com>
|
||||
|
||||
- Set distro requirement to oldest supported version in requirements/base.txt
|
||||
|
||||
- Added:
|
||||
* 3002-set-distro-requirement-to-oldest-supported-vers.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Mar 9 09:00:08 UTC 2021 - Pablo Suárez Hernández <pablo.suarezhernandez@suse.com>
|
||||
|
||||
- Do not monkey patch yaml loaders: Prevent breaking Ansible filter modules (bsc#1177474)
|
||||
- Don't require python3-certifi
|
||||
|
||||
- Added:
|
||||
* do-not-monkey-patch-yaml-bsc-1177474.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Mar 3 09:32:53 UTC 2021 - Pablo Suárez Hernández <pablo.suarezhernandez@suse.com>
|
||||
|
||||
- Fix race conditions for corner cases when handling SIGTERM by minion (bsc#1172110)
|
||||
|
||||
- Added:
|
||||
* prevent-race-condition-on-sigterm-for-the-minion-bsc.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Mar 1 11:21:01 UTC 2021 - Alexander Graul <alexander.graul@suse.com>
|
||||
|
||||
@ -345,7 +378,7 @@ Tue Nov 10 15:43:09 UTC 2020 - Jochen Breuer <jbreuer@suse.de>
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 10 15:09:16 UTC 2020 - Jochen Breuer <jbreuer@suse.de>
|
||||
|
||||
- Master can read grains
|
||||
- Master can read grains (bsc#1179696)
|
||||
|
||||
- Added:
|
||||
* grains-master-can-read-grains.patch
|
||||
|
13
salt.spec
13
salt.spec
@ -373,6 +373,14 @@ Patch155: fix-for-some-cves-bsc1181550.patch
|
||||
Patch156: allow-extra_filerefs-as-sanitized-kwargs-for-ssh-cli.patch
|
||||
# PATCH-FIX_UPSTREAM: no PR to link to yet
|
||||
Patch157: fix-regression-on-cmd.run-when-passing-tuples-as-cmd.patch
|
||||
# PATCH-FIX_UPSTREAM: https://github.com/saltstack/salt/pull/59524
|
||||
Patch158: prevent-race-condition-on-sigterm-for-the-minion-bsc.patch
|
||||
# PATCH-FIX_UPSTREAM: https://github.com/saltstack/salt/pull/59746
|
||||
Patch159: do-not-monkey-patch-yaml-bsc-1177474.patch
|
||||
# PATCH-FIX_UPSTREAM: https://github.com/saltstack/salt/pull/59536
|
||||
Patch160: 3002-set-distro-requirement-to-oldest-supported-vers.patch
|
||||
# PATCH-FIX_UPSTREAM: https://github.com/saltstack/salt/pull/59693
|
||||
Patch161: virt.network_update-handle-missing-ipv4-netmask-attr.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
BuildRequires: logrotate
|
||||
@ -500,7 +508,6 @@ Requires: platform-python
|
||||
%else
|
||||
Requires: python3
|
||||
%endif
|
||||
Requires: python3-certifi
|
||||
# requirements/base.txt
|
||||
%if 0%{?rhel} || 0%{?fedora}
|
||||
Requires: python3-jinja2
|
||||
@ -926,6 +933,10 @@ cp %{S:5} ./.travis.yml
|
||||
%patch155 -p1
|
||||
%patch156 -p1
|
||||
%patch157 -p1
|
||||
%patch158 -p1
|
||||
%patch159 -p1
|
||||
%patch160 -p1
|
||||
%patch161 -p1
|
||||
|
||||
%build
|
||||
# Putting /usr/bin at the front of $PATH is needed for RHEL/RES 7. Without this
|
||||
|
76
virt.network_update-handle-missing-ipv4-netmask-attr.patch
Normal file
76
virt.network_update-handle-missing-ipv4-netmask-attr.patch
Normal file
@ -0,0 +1,76 @@
|
||||
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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user