mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-30 06:11:26 -07:00
Fix remote_tmp when become with non admin user (#42396)
* Fix tmpdir on non root become - also avoid exception if tmpdir and remote_tmp are None - give 'None' on deescalation so tempfile will fallback to it's default behaviour and use system dirs - fix issue with bad tempdir (not existing/not createable/not writeable) i.e nobody and ~/.ansible/tmp - added tests for blockfile case * Revert "Temporarily revertc119d54
" This reverts commit5c614a59a6
. * changes based on PR feedback and changelog fragment * changes based on the review * Fix tmpdir when makedirs failed so we just use the system tmp * Let missing remote_tmp fail If remote_tmp is missing then there's something more basic wrong in the communication from the controller to the module-side. It's better to be alerted in this case than to silently ignore it. jborean and I have independently checked what happens if the user sets ansible_remote_tmp to empty string and !!null and both cases work fine. (null is turned into a default value controller-side. empty string triggers the warning because it is probably not a directory that the become user is able to use).
This commit is contained in:
parent
6339e37abd
commit
8bdd04c147
16 changed files with 148 additions and 51 deletions
|
@ -12,7 +12,7 @@ import tempfile
|
|||
|
||||
import pytest
|
||||
|
||||
from ansible.compat.tests.mock import patch
|
||||
from ansible.compat.tests.mock import patch, MagicMock
|
||||
|
||||
|
||||
class TestAnsibleModuleTmpDir:
|
||||
|
@ -87,3 +87,25 @@ class TestAnsibleModuleTmpDir:
|
|||
|
||||
if not stat_exists:
|
||||
assert makedirs['called']
|
||||
|
||||
@pytest.mark.parametrize('stdin', ({"_ansible_tmpdir": None,
|
||||
"_ansible_remote_tmp": "$HOME/.test",
|
||||
"_ansible_keep_remote_files": True},),
|
||||
indirect=['stdin'])
|
||||
def test_tmpdir_makedirs_failure(self, am, monkeypatch):
|
||||
|
||||
mock_mkdtemp = MagicMock(return_value="/tmp/path")
|
||||
mock_makedirs = MagicMock(side_effect=OSError("Some OS Error here"))
|
||||
|
||||
monkeypatch.setattr(tempfile, 'mkdtemp', mock_mkdtemp)
|
||||
monkeypatch.setattr(os.path, 'exists', lambda x: False)
|
||||
monkeypatch.setattr(os, 'makedirs', mock_makedirs)
|
||||
|
||||
actual = am.tmpdir
|
||||
assert actual == "/tmp/path"
|
||||
assert mock_makedirs.call_args[0] == (os.path.expanduser(os.path.expandvars("$HOME/.test")),)
|
||||
assert mock_makedirs.call_args[1] == {"mode": 0o700}
|
||||
|
||||
# because makedirs failed the dir should be None so it uses the System tmp
|
||||
assert mock_mkdtemp.call_args[1]['dir'] is None
|
||||
assert mock_mkdtemp.call_args[1]['prefix'].startswith("ansible-moduletmp-")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue