mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-30 14:21: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
|
@ -18,11 +18,19 @@
|
|||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
|
||||
from ansible.errors import AnsibleActionFail
|
||||
from ansible.compat.tests import unittest
|
||||
from ansible.compat.tests.mock import patch, MagicMock, Mock
|
||||
from ansible.plugins.action.raw import ActionModule
|
||||
from ansible.playbook.task import Task
|
||||
from ansible.plugins.loader import connection_loader
|
||||
|
||||
|
||||
play_context = Mock()
|
||||
play_context.shell = 'sh'
|
||||
connection = connection_loader.get('local', play_context, os.devnull)
|
||||
|
||||
|
||||
class TestCopyResultExclude(unittest.TestCase):
|
||||
|
@ -41,10 +49,8 @@ class TestCopyResultExclude(unittest.TestCase):
|
|||
|
||||
def test_raw_executable_is_not_empty_string(self):
|
||||
|
||||
play_context = Mock()
|
||||
task = MagicMock(Task)
|
||||
task.async_val = False
|
||||
connection = Mock()
|
||||
|
||||
task.args = {'_raw_params': 'Args1'}
|
||||
play_context.check_mode = False
|
||||
|
@ -52,16 +58,15 @@ class TestCopyResultExclude(unittest.TestCase):
|
|||
self.mock_am = ActionModule(task, connection, play_context, loader=None, templar=None, shared_loader_obj=None)
|
||||
self.mock_am._low_level_execute_command = Mock(return_value={})
|
||||
self.mock_am.display = Mock()
|
||||
self.mock_am._admin_users = ['root', 'toor']
|
||||
|
||||
self.mock_am.run()
|
||||
self.mock_am._low_level_execute_command.assert_called_with('Args1', executable=False)
|
||||
|
||||
def test_raw_check_mode_is_True(self):
|
||||
|
||||
play_context = Mock()
|
||||
task = MagicMock(Task)
|
||||
task.async_val = False
|
||||
connection = Mock()
|
||||
|
||||
task.args = {'_raw_params': 'Args1'}
|
||||
play_context.check_mode = True
|
||||
|
@ -73,10 +78,8 @@ class TestCopyResultExclude(unittest.TestCase):
|
|||
|
||||
def test_raw_test_environment_is_None(self):
|
||||
|
||||
play_context = Mock()
|
||||
task = MagicMock(Task)
|
||||
task.async_val = False
|
||||
connection = Mock()
|
||||
|
||||
task.args = {'_raw_params': 'Args1'}
|
||||
task.environment = None
|
||||
|
@ -90,10 +93,8 @@ class TestCopyResultExclude(unittest.TestCase):
|
|||
|
||||
def test_raw_task_vars_is_not_None(self):
|
||||
|
||||
play_context = Mock()
|
||||
task = MagicMock(Task)
|
||||
task.async_val = False
|
||||
connection = Mock()
|
||||
|
||||
task.args = {'_raw_params': 'Args1'}
|
||||
task.environment = None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue