mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 09:40:20 +00:00
Fix cmdmod availability during minion startup on MacOS
This commit is contained in:
parent
af52490207
commit
d53cbac432
3 changed files with 36 additions and 9 deletions
1
changelog/61816.fixed
Normal file
1
changelog/61816.fixed
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Made cmdmod._run[_all]_quiet work during minion startup on MacOS with runas specified (which fixed mac_service)
|
|
@ -443,12 +443,13 @@ def _run(
|
||||||
# Ensure environment is correct for a newly logged-in user by running
|
# Ensure environment is correct for a newly logged-in user by running
|
||||||
# the command under bash as a login shell
|
# the command under bash as a login shell
|
||||||
try:
|
try:
|
||||||
user_shell = __salt__["user.info"](runas)["shell"]
|
# Do not rely on populated __salt__ dict (ie avoid __salt__['user.info'])
|
||||||
|
user_shell = [x for x in pwd.getpwall() if x.pw_name == runas][0].pw_shell
|
||||||
if re.search("bash$", user_shell):
|
if re.search("bash$", user_shell):
|
||||||
cmd = "{shell} -l -c {cmd}".format(
|
cmd = "{shell} -l -c {cmd}".format(
|
||||||
shell=user_shell, cmd=_cmd_quote(cmd)
|
shell=user_shell, cmd=_cmd_quote(cmd)
|
||||||
)
|
)
|
||||||
except KeyError:
|
except (AttributeError, IndexError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Ensure the login is simulated correctly (note: su runs sh, not bash,
|
# Ensure the login is simulated correctly (note: su runs sh, not bash,
|
||||||
|
|
|
@ -455,11 +455,12 @@ def test_shell_properly_handled_on_macOS():
|
||||||
|
|
||||||
# User default shell is '/usr/local/bin/bash'
|
# User default shell is '/usr/local/bin/bash'
|
||||||
user_default_shell = "/usr/local/bin/bash"
|
user_default_shell = "/usr/local/bin/bash"
|
||||||
with patch.dict(
|
with patch(
|
||||||
cmdmod.__salt__,
|
"pwd.getpwall",
|
||||||
{"user.info": MagicMock(return_value={"shell": user_default_shell})},
|
Mock(
|
||||||
|
return_value=[Mock(pw_shell=user_default_shell, pw_name="foobar")]
|
||||||
|
),
|
||||||
):
|
):
|
||||||
|
|
||||||
cmd_handler.clear()
|
cmd_handler.clear()
|
||||||
cmdmod._run(
|
cmdmod._run(
|
||||||
"ls", cwd=tempfile.gettempdir(), runas="foobar", use_vt=False
|
"ls", cwd=tempfile.gettempdir(), runas="foobar", use_vt=False
|
||||||
|
@ -471,9 +472,11 @@ def test_shell_properly_handled_on_macOS():
|
||||||
|
|
||||||
# User default shell is '/bin/zsh'
|
# User default shell is '/bin/zsh'
|
||||||
user_default_shell = "/bin/zsh"
|
user_default_shell = "/bin/zsh"
|
||||||
with patch.dict(
|
with patch(
|
||||||
cmdmod.__salt__,
|
"pwd.getpwall",
|
||||||
{"user.info": MagicMock(return_value={"shell": user_default_shell})},
|
Mock(
|
||||||
|
return_value=[Mock(pw_shell=user_default_shell, pw_name="foobar")]
|
||||||
|
),
|
||||||
):
|
):
|
||||||
|
|
||||||
cmd_handler.clear()
|
cmd_handler.clear()
|
||||||
|
@ -486,6 +489,28 @@ def test_shell_properly_handled_on_macOS():
|
||||||
), "cmd does not invoke user shell on macOS"
|
), "cmd does not invoke user shell on macOS"
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_all_quiet_does_not_depend_on_salt_dunder():
|
||||||
|
"""
|
||||||
|
cmdmod._run_all_quiet should not depend on availability
|
||||||
|
of __salt__ dictionary (issue #61816)
|
||||||
|
"""
|
||||||
|
|
||||||
|
proc = MagicMock(return_value=MockTimedProc(stdout=b"success", stderr=None))
|
||||||
|
with patch("salt.utils.timed_subprocess.TimedProc", proc):
|
||||||
|
salt_dunder_mock = MagicMock(spec_set=dict)
|
||||||
|
salt_dunder_mock.__getitem__.side_effect = NameError(
|
||||||
|
"__salt__ might not be defined"
|
||||||
|
)
|
||||||
|
|
||||||
|
with patch.object(cmdmod, "__salt__", salt_dunder_mock):
|
||||||
|
ret = cmdmod._run_all_quiet("foo")
|
||||||
|
assert ret["stdout"] == "success"
|
||||||
|
assert salt_dunder_mock.__getitem__.call_count == 0
|
||||||
|
ret = cmdmod._run_all_quiet("foo", runas="bar")
|
||||||
|
assert ret["stdout"] == "success"
|
||||||
|
assert salt_dunder_mock.__getitem__.call_count == 0
|
||||||
|
|
||||||
|
|
||||||
def test_run_cwd_doesnt_exist_issue_7154():
|
def test_run_cwd_doesnt_exist_issue_7154():
|
||||||
"""
|
"""
|
||||||
cmd.run should fail and raise
|
cmd.run should fail and raise
|
||||||
|
|
Loading…
Add table
Reference in a new issue