104 lines
3.5 KiB
Diff
104 lines
3.5 KiB
Diff
From 0459d3f711eb9898f56a97d0bf0eb66fd1421a56 Mon Sep 17 00:00:00 2001
|
|
From: Victor Zhestkov <vzhestkov@suse.com>
|
|
Date: Mon, 2 Oct 2023 13:25:52 +0200
|
|
Subject: [PATCH] Use salt-call from salt bundle with
|
|
transactional_update
|
|
|
|
* Use salt-call from the bundle with transactional_update
|
|
|
|
* Add test checking which salt-call is selected by executable
|
|
---
|
|
salt/modules/transactional_update.py | 13 +++++-
|
|
.../unit/modules/test_transactional_update.py | 44 +++++++++++++++++++
|
|
2 files changed, 56 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/salt/modules/transactional_update.py b/salt/modules/transactional_update.py
|
|
index 658ebccc6b..d6915475f5 100644
|
|
--- a/salt/modules/transactional_update.py
|
|
+++ b/salt/modules/transactional_update.py
|
|
@@ -276,6 +276,9 @@ transaction.
|
|
"""
|
|
|
|
import logging
|
|
+import os.path
|
|
+import pathlib
|
|
+import sys
|
|
|
|
import salt.client.ssh.state
|
|
import salt.client.ssh.wrapper.state
|
|
@@ -941,10 +944,18 @@ def call(function, *args, **kwargs):
|
|
activate_transaction = kwargs.pop("activate_transaction", False)
|
|
|
|
try:
|
|
+ # Set default salt-call command
|
|
+ salt_call_cmd = "salt-call"
|
|
+ python_exec_dir = os.path.dirname(sys.executable)
|
|
+ if "venv-salt-minion" in pathlib.Path(python_exec_dir).parts:
|
|
+ # If the module is executed with the Salt Bundle,
|
|
+ # use salt-call from the Salt Bundle
|
|
+ salt_call_cmd = os.path.join(python_exec_dir, "salt-call")
|
|
+
|
|
safe_kwargs = salt.utils.args.clean_kwargs(**kwargs)
|
|
salt_argv = (
|
|
[
|
|
- "salt-call",
|
|
+ salt_call_cmd,
|
|
"--out",
|
|
"json",
|
|
"-l",
|
|
diff --git a/tests/pytests/unit/modules/test_transactional_update.py b/tests/pytests/unit/modules/test_transactional_update.py
|
|
index 5d9294c49b..dbd72fd74b 100644
|
|
--- a/tests/pytests/unit/modules/test_transactional_update.py
|
|
+++ b/tests/pytests/unit/modules/test_transactional_update.py
|
|
@@ -670,3 +670,47 @@ def test_single_queue_true():
|
|
"salt.modules.transactional_update.call", MagicMock(return_value="result")
|
|
):
|
|
assert tu.single("pkg.installed", name="emacs", queue=True) == "result"
|
|
+
|
|
+
|
|
+@pytest.mark.parametrize(
|
|
+ "executable,salt_call_cmd",
|
|
+ [
|
|
+ ("/usr/bin/python3", "salt-call"),
|
|
+ (
|
|
+ "/usr/lib/venv-salt-minion/bin/python",
|
|
+ "/usr/lib/venv-salt-minion/bin/salt-call",
|
|
+ ),
|
|
+ ],
|
|
+)
|
|
+def test_call_which_salt_call_selected_with_executable(executable, salt_call_cmd):
|
|
+ """Test transactional_update.chroot which salt-call used"""
|
|
+ utils_mock = {
|
|
+ "json.find_json": MagicMock(return_value={"return": "result"}),
|
|
+ }
|
|
+ salt_mock = {
|
|
+ "cmd.run_all": MagicMock(return_value={"retcode": 0, "stdout": ""}),
|
|
+ }
|
|
+ with patch("sys.executable", executable), patch.dict(
|
|
+ tu.__utils__, utils_mock
|
|
+ ), patch.dict(tu.__salt__, salt_mock):
|
|
+ assert tu.call("test.ping") == "result"
|
|
+
|
|
+ salt_mock["cmd.run_all"].assert_called_with(
|
|
+ [
|
|
+ "transactional-update",
|
|
+ "--non-interactive",
|
|
+ "--drop-if-no-change",
|
|
+ "--no-selfupdate",
|
|
+ "--continue",
|
|
+ "--quiet",
|
|
+ "run",
|
|
+ salt_call_cmd,
|
|
+ "--out",
|
|
+ "json",
|
|
+ "-l",
|
|
+ "quiet",
|
|
+ "--no-return-event",
|
|
+ "--",
|
|
+ "test.ping",
|
|
+ ]
|
|
+ )
|
|
--
|
|
2.42.0
|
|
|