We have some news to share for the request index beta feature. We’ve added more options to sort your requests, counters to the individual filters and documentation for the search functionality. Checkout the blog post for more details.

File use-salt-call-from-salt-bundle-with-transactional_up.patch of Package salt

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

openSUSE Build Service is sponsored by