Accepting request 1139717 from home:mczernek:branches:systemsmanagement:saltstack
- Ensure that pillar refresh loads beacons from pillar without restart - Fix the aptpkg.py unit test failure - Prefer unittest.mock to python-mock in test suite - Added: * update-__pillar__-during-pillar_refresh.patch * fix-the-aptpkg.py-unit-test-failure.patch * prefer-unittest.mock-for-python-versions-that-are-su.patch OBS-URL: https://build.opensuse.org/request/show/1139717 OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=225
This commit is contained in:
parent
a5cf116d2b
commit
323feae962
@ -1 +1 @@
|
||||
ecaf86de2f64a2032b60880651dde534021c8954
|
||||
ee71f172008f6c3aa9d80a26ee15f873ca17f471
|
25
fix-the-aptpkg.py-unit-test-failure.patch
Normal file
25
fix-the-aptpkg.py-unit-test-failure.patch
Normal file
@ -0,0 +1,25 @@
|
||||
From 4bc3be7814daf5365d63b88f164f791ea53b418f Mon Sep 17 00:00:00 2001
|
||||
From: Marek Czernek <marek.czernek@suse.com>
|
||||
Date: Wed, 17 Jan 2024 15:04:53 +0100
|
||||
Subject: [PATCH] Fix the aptpkg.py unit test failure
|
||||
|
||||
---
|
||||
salt/modules/aptpkg.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/salt/modules/aptpkg.py b/salt/modules/aptpkg.py
|
||||
index 9885e9fb60..ad5450c415 100644
|
||||
--- a/salt/modules/aptpkg.py
|
||||
+++ b/salt/modules/aptpkg.py
|
||||
@@ -3128,7 +3128,7 @@ def expand_repo_def(**kwargs):
|
||||
NOT USABLE IN THE CLI
|
||||
"""
|
||||
warn_until_date(
|
||||
- "20240101",
|
||||
+ "20250101",
|
||||
"The pkg.expand_repo_def function is deprecated and set for removal "
|
||||
"after {date}. This is only unsed internally by the apt pkg state "
|
||||
"module. If that's not the case, please file an new issue requesting "
|
||||
--
|
||||
2.43.0
|
||||
|
135
prefer-unittest.mock-for-python-versions-that-are-su.patch
Normal file
135
prefer-unittest.mock-for-python-versions-that-are-su.patch
Normal file
@ -0,0 +1,135 @@
|
||||
From 107de57586f0b0f784771543b942dfb6bb70453a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Yeray=20Guti=C3=A9rrez=20Cedr=C3=A9s?=
|
||||
<yeray.gutierrez@suse.com>
|
||||
Date: Wed, 13 Dec 2023 11:03:45 +0000
|
||||
Subject: [PATCH] Prefer unittest.mock for Python versions that are
|
||||
sufficient
|
||||
|
||||
---
|
||||
requirements/pytest.txt | 2 +-
|
||||
.../unit/cloud/clouds/test_dimensiondata.py | 4 +-
|
||||
tests/pytests/unit/cloud/clouds/test_gce.py | 4 +-
|
||||
tests/support/mock.py | 48 +++++++++----------
|
||||
4 files changed, 25 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/requirements/pytest.txt b/requirements/pytest.txt
|
||||
index 5b67583a3d..0bead83f5b 100644
|
||||
--- a/requirements/pytest.txt
|
||||
+++ b/requirements/pytest.txt
|
||||
@@ -1,4 +1,4 @@
|
||||
-mock >= 3.0.0
|
||||
+mock >= 3.0.0; python_version < '3.8'
|
||||
# PyTest
|
||||
pytest >= 7.0.1; python_version <= "3.6"
|
||||
pytest >= 7.2.0; python_version > "3.6"
|
||||
diff --git a/tests/pytests/unit/cloud/clouds/test_dimensiondata.py b/tests/pytests/unit/cloud/clouds/test_dimensiondata.py
|
||||
index e196805004..aab2e686f2 100644
|
||||
--- a/tests/pytests/unit/cloud/clouds/test_dimensiondata.py
|
||||
+++ b/tests/pytests/unit/cloud/clouds/test_dimensiondata.py
|
||||
@@ -11,7 +11,6 @@ from salt.cloud.clouds import dimensiondata
|
||||
from salt.exceptions import SaltCloudSystemExit
|
||||
from salt.utils.versions import Version
|
||||
from tests.support.mock import MagicMock
|
||||
-from tests.support.mock import __version__ as mock_version
|
||||
from tests.support.mock import patch
|
||||
|
||||
try:
|
||||
@@ -144,8 +143,7 @@ def test_import():
|
||||
with patch("salt.config.check_driver_dependencies", return_value=True) as p:
|
||||
get_deps = dimensiondata.get_dependencies()
|
||||
assert get_deps is True
|
||||
- if Version(mock_version) >= Version("2.0.0"):
|
||||
- assert p.call_count >= 1
|
||||
+ assert p.call_count >= 1
|
||||
|
||||
|
||||
def test_provider_matches():
|
||||
diff --git a/tests/pytests/unit/cloud/clouds/test_gce.py b/tests/pytests/unit/cloud/clouds/test_gce.py
|
||||
index 265818016e..ec1346a978 100644
|
||||
--- a/tests/pytests/unit/cloud/clouds/test_gce.py
|
||||
+++ b/tests/pytests/unit/cloud/clouds/test_gce.py
|
||||
@@ -13,7 +13,6 @@ from salt.cloud.clouds import gce
|
||||
from salt.exceptions import SaltCloudSystemExit
|
||||
from salt.utils.versions import Version
|
||||
from tests.support.mock import MagicMock
|
||||
-from tests.support.mock import __version__ as mock_version
|
||||
from tests.support.mock import call, patch
|
||||
|
||||
|
||||
@@ -281,8 +280,7 @@ def test_import():
|
||||
with patch("salt.config.check_driver_dependencies", return_value=True) as p:
|
||||
get_deps = gce.get_dependencies()
|
||||
assert get_deps is True
|
||||
- if Version(mock_version) >= Version("2.0.0"):
|
||||
- p.assert_called_once()
|
||||
+ p.assert_called_once()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
diff --git a/tests/support/mock.py b/tests/support/mock.py
|
||||
index 2256ad8f5d..59e5fcbc8e 100644
|
||||
--- a/tests/support/mock.py
|
||||
+++ b/tests/support/mock.py
|
||||
@@ -18,37 +18,33 @@ import copy
|
||||
import errno
|
||||
import fnmatch
|
||||
import sys
|
||||
-
|
||||
-# By these days, we should blowup if mock is not available
|
||||
-import mock # pylint: disable=blacklisted-external-import
|
||||
-
|
||||
-# pylint: disable=no-name-in-module,no-member
|
||||
-from mock import (
|
||||
- ANY,
|
||||
- DEFAULT,
|
||||
- FILTER_DIR,
|
||||
- MagicMock,
|
||||
- Mock,
|
||||
- NonCallableMagicMock,
|
||||
- NonCallableMock,
|
||||
- PropertyMock,
|
||||
- __version__,
|
||||
- call,
|
||||
- create_autospec,
|
||||
- patch,
|
||||
- sentinel,
|
||||
-)
|
||||
+import importlib
|
||||
+
|
||||
+current_version = (sys.version_info.major, sys.version_info.minor)
|
||||
+
|
||||
+# Prefer unittest.mock for Python versions that are sufficient
|
||||
+if current_version >= (3,8):
|
||||
+ mock = importlib.import_module('unittest.mock')
|
||||
+else:
|
||||
+ mock = importlib.import_module('mock')
|
||||
+
|
||||
+ANY = mock.ANY
|
||||
+DEFAULT = mock.DEFAULT
|
||||
+FILTER_DIR = mock.FILTER_DIR
|
||||
+MagicMock = mock.MagicMock
|
||||
+Mock = mock.Mock
|
||||
+NonCallableMagicMock = mock.NonCallableMagicMock
|
||||
+NonCallableMock = mock.NonCallableMock
|
||||
+PropertyMock = mock.PropertyMock
|
||||
+call = mock.call
|
||||
+create_autospec = mock.create_autospec
|
||||
+patch = mock.patch
|
||||
+sentinel = mock.sentinel
|
||||
|
||||
import salt.utils.stringutils
|
||||
|
||||
# pylint: disable=no-name-in-module,no-member
|
||||
|
||||
-
|
||||
-__mock_version = tuple(
|
||||
- int(part) for part in mock.__version__.split(".") if part.isdigit()
|
||||
-) # pylint: disable=no-member
|
||||
-
|
||||
-
|
||||
class MockFH:
|
||||
def __init__(self, filename, read_data, *args, **kwargs):
|
||||
self.filename = filename
|
||||
--
|
||||
2.41.0
|
||||
|
12
salt.changes
12
salt.changes
@ -1,3 +1,15 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Jan 18 13:06:21 UTC 2024 - Marek Czernek <marek.czernek@suse.com>
|
||||
|
||||
- Ensure that pillar refresh loads beacons from pillar without restart
|
||||
- Fix the aptpkg.py unit test failure
|
||||
- Prefer unittest.mock to python-mock in test suite
|
||||
|
||||
- Added:
|
||||
* update-__pillar__-during-pillar_refresh.patch
|
||||
* fix-the-aptpkg.py-unit-test-failure.patch
|
||||
* prefer-unittest.mock-for-python-versions-that-are-su.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Dec 1 11:04:02 UTC 2023 - Pablo Suárez Hernández <pablo.suarezhernandez@suse.com>
|
||||
|
||||
|
@ -329,6 +329,13 @@ Patch90: dereference-symlinks-to-set-proper-__cli-opt-bsc-121.patch
|
||||
Patch91: revert-make-sure-configured-user-is-properly-set-by-.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/65488
|
||||
Patch92: enable-keepalive-probes-for-salt-ssh-executions-bsc-.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/65644
|
||||
Patch93: prefer-unittest.mock-for-python-versions-that-are-su.patch
|
||||
# PATCH-FIX_OPENSUSE: https://github.com/openSUSE/salt/pull/620
|
||||
Patch94: fix-the-aptpkg.py-unit-test-failure.patch
|
||||
# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/65092
|
||||
Patch95: update-__pillar__-during-pillar_refresh.patch
|
||||
|
||||
|
||||
### IMPORTANT: The line below is used as a snippet marker. Do not touch it.
|
||||
### SALT PATCHES LIST END
|
||||
|
169
update-__pillar__-during-pillar_refresh.patch
Normal file
169
update-__pillar__-during-pillar_refresh.patch
Normal file
@ -0,0 +1,169 @@
|
||||
From 3e7c5d95423491f83d0016eb7c02285cd0b1bcf4 Mon Sep 17 00:00:00 2001
|
||||
From: Marek Czernek <marek.czernek@suse.com>
|
||||
Date: Wed, 17 Jan 2024 15:39:41 +0100
|
||||
Subject: [PATCH] Update __pillar__ during pillar_refresh
|
||||
|
||||
---
|
||||
changelog/63583.fixed.md | 1 +
|
||||
salt/minion.py | 1 +
|
||||
.../integration/modules/test_pillar.py | 110 +++++++++++++++++-
|
||||
3 files changed, 111 insertions(+), 1 deletion(-)
|
||||
create mode 100644 changelog/63583.fixed.md
|
||||
|
||||
diff --git a/changelog/63583.fixed.md b/changelog/63583.fixed.md
|
||||
new file mode 100644
|
||||
index 0000000000..f1b6e32507
|
||||
--- /dev/null
|
||||
+++ b/changelog/63583.fixed.md
|
||||
@@ -0,0 +1 @@
|
||||
+Need to make sure we update __pillar__ during a pillar refresh to ensure that process_beacons has the updated beacons loaded from pillar.
|
||||
diff --git a/salt/minion.py b/salt/minion.py
|
||||
index 9597d6e63a..4db0d31bd4 100644
|
||||
--- a/salt/minion.py
|
||||
+++ b/salt/minion.py
|
||||
@@ -2498,6 +2498,7 @@ class Minion(MinionBase):
|
||||
current_schedule, new_schedule
|
||||
)
|
||||
self.opts["pillar"] = new_pillar
|
||||
+ self.functions.pack["__pillar__"] = self.opts["pillar"]
|
||||
finally:
|
||||
async_pillar.destroy()
|
||||
self.matchers_refresh()
|
||||
diff --git a/tests/pytests/integration/modules/test_pillar.py b/tests/pytests/integration/modules/test_pillar.py
|
||||
index 66f7b9e47b..5db9a1630a 100644
|
||||
--- a/tests/pytests/integration/modules/test_pillar.py
|
||||
+++ b/tests/pytests/integration/modules/test_pillar.py
|
||||
@@ -1,9 +1,14 @@
|
||||
+import logging
|
||||
import pathlib
|
||||
import time
|
||||
+import types
|
||||
|
||||
import attr
|
||||
import pytest
|
||||
|
||||
+log = logging.getLogger(__name__)
|
||||
+
|
||||
+
|
||||
pytestmark = [
|
||||
pytest.mark.slow_test,
|
||||
pytest.mark.windows_whitelisted,
|
||||
@@ -210,7 +215,7 @@ class PillarRefresh:
|
||||
"top.sls", top_file_contents
|
||||
)
|
||||
self.minion_1_pillar = self.master.pillar_tree.base.temp_file(
|
||||
- "minion-1-pillar.sls", "{}: true".format(self.pillar_key)
|
||||
+ "minion-1-pillar.sls", f"{self.pillar_key}: true"
|
||||
)
|
||||
self.top_file.__enter__()
|
||||
self.minion_1_pillar.__enter__()
|
||||
@@ -588,3 +593,106 @@ def test_pillar_ext_59975(salt_call_cli):
|
||||
"""
|
||||
ret = salt_call_cli.run("pillar.ext", '{"libvert": _}')
|
||||
assert "ext_pillar_opts" in ret.data
|
||||
+
|
||||
+
|
||||
+@pytest.fixture
|
||||
+def event_listerner_timeout(grains):
|
||||
+ if grains["os"] == "Windows":
|
||||
+ if grains["osrelease"].startswith("2019"):
|
||||
+ return types.SimpleNamespace(catch=120, miss=30)
|
||||
+ return types.SimpleNamespace(catch=90, miss=10)
|
||||
+ return types.SimpleNamespace(catch=60, miss=10)
|
||||
+
|
||||
+
|
||||
+@pytest.mark.slow_test
|
||||
+def test_pillar_refresh_pillar_beacons(
|
||||
+ base_env_pillar_tree_root_dir,
|
||||
+ salt_cli,
|
||||
+ salt_minion,
|
||||
+ salt_master,
|
||||
+ event_listener,
|
||||
+ event_listerner_timeout,
|
||||
+):
|
||||
+ """
|
||||
+ Ensure beacons jobs in pillar are started after
|
||||
+ a pillar refresh and then not running when pillar
|
||||
+ is cleared.
|
||||
+ """
|
||||
+
|
||||
+ top_sls = """
|
||||
+ base:
|
||||
+ '{}':
|
||||
+ - test_beacons
|
||||
+ """.format(
|
||||
+ salt_minion.id
|
||||
+ )
|
||||
+
|
||||
+ test_beacons_sls_empty = ""
|
||||
+
|
||||
+ test_beacons_sls = """
|
||||
+ beacons:
|
||||
+ status:
|
||||
+ - loadavg:
|
||||
+ - 1-min
|
||||
+ """
|
||||
+
|
||||
+ assert salt_minion.is_running()
|
||||
+
|
||||
+ top_tempfile = pytest.helpers.temp_file(
|
||||
+ "top.sls", top_sls, base_env_pillar_tree_root_dir
|
||||
+ )
|
||||
+ beacon_tempfile = pytest.helpers.temp_file(
|
||||
+ "test_beacons.sls", test_beacons_sls_empty, base_env_pillar_tree_root_dir
|
||||
+ )
|
||||
+
|
||||
+ with top_tempfile, beacon_tempfile:
|
||||
+ # Calling refresh_pillar to update in-memory pillars
|
||||
+ salt_cli.run("saltutil.refresh_pillar", wait=True, minion_tgt=salt_minion.id)
|
||||
+
|
||||
+ # Ensure beacons start when pillar is refreshed
|
||||
+ with salt_master.pillar_tree.base.temp_file(
|
||||
+ "test_beacons.sls", test_beacons_sls
|
||||
+ ):
|
||||
+ # Calling refresh_pillar to update in-memory pillars
|
||||
+ salt_cli.run(
|
||||
+ "saltutil.refresh_pillar", wait=True, minion_tgt=salt_minion.id
|
||||
+ )
|
||||
+
|
||||
+ # Give the beacons a chance to start
|
||||
+ time.sleep(5)
|
||||
+
|
||||
+ event_tag = f"salt/beacon/*/status/*"
|
||||
+ start_time = time.time()
|
||||
+
|
||||
+ event_pattern = (salt_master.id, event_tag)
|
||||
+ matched_events = event_listener.wait_for_events(
|
||||
+ [event_pattern],
|
||||
+ after_time=start_time,
|
||||
+ timeout=event_listerner_timeout.catch,
|
||||
+ )
|
||||
+
|
||||
+ assert matched_events.found_all_events
|
||||
+
|
||||
+ # Ensure beacons sttop when pillar is refreshed
|
||||
+ with salt_master.pillar_tree.base.temp_file(
|
||||
+ "test_beacons.sls", test_beacons_sls_empty
|
||||
+ ):
|
||||
+ # Calling refresh_pillar to update in-memory pillars
|
||||
+ salt_cli.run(
|
||||
+ "saltutil.refresh_pillar", wait=True, minion_tgt=salt_minion.id
|
||||
+ )
|
||||
+
|
||||
+ # Give the beacons a chance to stop
|
||||
+ time.sleep(5)
|
||||
+
|
||||
+ event_tag = f"salt/beacon/*/status/*"
|
||||
+ start_time = time.time()
|
||||
+
|
||||
+ event_pattern = (salt_master.id, event_tag)
|
||||
+ matched_events = event_listener.wait_for_events(
|
||||
+ [event_pattern],
|
||||
+ after_time=start_time,
|
||||
+ timeout=event_listerner_timeout.miss,
|
||||
+ )
|
||||
+
|
||||
+ assert not matched_events.found_all_events
|
||||
--
|
||||
2.43.0
|
||||
|
Loading…
Reference in New Issue
Block a user