Skip to content

Commit

Permalink
Use salt-call from salt bundle with transactional_update
Browse files Browse the repository at this point in the history
* Use salt-call from the bundle with transactional_update

* Add test checking which salt-call is selected by executable
  • Loading branch information
vzhestkov authored Oct 2, 2023
1 parent b76b74b commit 0459d3f
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
13 changes: 12 additions & 1 deletion salt/modules/transactional_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,9 @@
"""

import logging
import os.path
import pathlib
import sys

import salt.client.ssh.state
import salt.client.ssh.wrapper.state
Expand Down Expand Up @@ -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",
Expand Down
44 changes: 44 additions & 0 deletions tests/pytests/unit/modules/test_transactional_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
]
)

0 comments on commit 0459d3f

Please sign in to comment.