* Use _remote_is_local=True for local connection in synchronize (#40833)
* All instances of local connection should use _remote_is_local=True. Fixes #40551
* Switch to instance attribute for synchronize
* Add test that shows that synchronize _remote_is_local addresses tmpdir building
(cherry picked from commit ad7ba91f75
)
* Add changelog entry for #40833
This commit is contained in:
parent
f1cd7a99be
commit
959821f40e
3 changed files with 21 additions and 0 deletions
2
changelogs/fragments/synchronize_remote_is_local.yaml
Normal file
2
changelogs/fragments/synchronize_remote_is_local.yaml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- synchronize - Ensure the local connection created by synchronize uses _remote_is_local=True, which causes ActionBase to build a local tmpdir (https://github.com/ansible/ansible/pull/40833)
|
|
@ -301,6 +301,9 @@ class ActionModule(ActionBase):
|
||||||
|
|
||||||
new_connection = connection_loader.get('local', self._play_context, new_stdin)
|
new_connection = connection_loader.get('local', self._play_context, new_stdin)
|
||||||
self._connection = new_connection
|
self._connection = new_connection
|
||||||
|
# Override _remote_is_local as an instance attribute specifically for the synchronize use case
|
||||||
|
# ensuring we set local tmpdir correctly
|
||||||
|
self._connection._remote_is_local = True
|
||||||
self._override_module_replaced_vars(task_vars)
|
self._override_module_replaced_vars(task_vars)
|
||||||
|
|
||||||
# SWITCH SRC AND DEST HOST PER MODE
|
# SWITCH SRC AND DEST HOST PER MODE
|
||||||
|
|
|
@ -42,6 +42,10 @@ with open('task_vars.json', 'wb') as f:
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
class BreakPoint(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class TaskMock(object):
|
class TaskMock(object):
|
||||||
args = {'src': u'/tmp/deleteme',
|
args = {'src': u'/tmp/deleteme',
|
||||||
'dest': '/tmp/deleteme',
|
'dest': '/tmp/deleteme',
|
||||||
|
@ -246,3 +250,15 @@ class TestSynchronizeAction(unittest.TestCase):
|
||||||
# delegate to other remote host with su enabled
|
# delegate to other remote host with su enabled
|
||||||
x = SynchronizeTester()
|
x = SynchronizeTester()
|
||||||
x.runtest(fixturepath=os.path.join(self.fixturedir, 'delegate_remote_su'))
|
x.runtest(fixturepath=os.path.join(self.fixturedir, 'delegate_remote_su'))
|
||||||
|
|
||||||
|
@patch.object(ActionModule, '_low_level_execute_command', side_effect=BreakPoint)
|
||||||
|
@patch.object(ActionModule, '_remote_expand_user', side_effect=ActionModule._remote_expand_user, autospec=True)
|
||||||
|
def test_remote_user_not_in_local_tmpdir(self, spy_remote_expand_user, ll_ec):
|
||||||
|
x = SynchronizeTester()
|
||||||
|
SAM = ActionModule(x.task, x.connection, x._play_context,
|
||||||
|
x.loader, x.templar, x.shared_loader_obj)
|
||||||
|
try:
|
||||||
|
SAM.run(task_vars={'hostvars': {'foo': {}, 'localhost': {}}, 'inventory_hostname': 'foo'})
|
||||||
|
except BreakPoint:
|
||||||
|
pass
|
||||||
|
self.assertEqual(spy_remote_expand_user.call_count, 0)
|
||||||
|
|
Loading…
Reference in a new issue