mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
raw should not use default executable (#16085)
also removed unused cruft in script
This commit is contained in:
parent
828b73dd2d
commit
a529a60478
4 changed files with 15 additions and 14 deletions
|
@ -29,11 +29,9 @@ import string
|
||||||
from ansible.compat.six import iteritems, string_types
|
from ansible.compat.six import iteritems, string_types
|
||||||
from ansible import constants as C
|
from ansible import constants as C
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.playbook.attribute import Attribute, FieldAttribute
|
from ansible.playbook.attribute import FieldAttribute
|
||||||
from ansible.playbook.base import Base
|
from ansible.playbook.base import Base
|
||||||
from ansible.template import Templar
|
|
||||||
from ansible.utils.boolean import boolean
|
from ansible.utils.boolean import boolean
|
||||||
from ansible.utils.unicode import to_unicode
|
|
||||||
|
|
||||||
__all__ = ['PlayContext']
|
__all__ = ['PlayContext']
|
||||||
|
|
||||||
|
@ -447,16 +445,21 @@ class PlayContext(Base):
|
||||||
success_key = None
|
success_key = None
|
||||||
self.prompt = None
|
self.prompt = None
|
||||||
|
|
||||||
if executable is None:
|
|
||||||
executable = self.executable
|
|
||||||
|
|
||||||
if self.become:
|
if self.become:
|
||||||
|
|
||||||
|
if executable is None:
|
||||||
|
executable = self.executable
|
||||||
|
|
||||||
becomecmd = None
|
becomecmd = None
|
||||||
randbits = ''.join(random.choice(string.ascii_lowercase) for x in range(32))
|
randbits = ''.join(random.choice(string.ascii_lowercase) for x in range(32))
|
||||||
success_key = 'BECOME-SUCCESS-%s' % randbits
|
success_key = 'BECOME-SUCCESS-%s' % randbits
|
||||||
success_cmd = pipes.quote('echo %s; %s' % (success_key, cmd))
|
success_cmd = pipes.quote('echo %s; %s' % (success_key, cmd))
|
||||||
|
|
||||||
|
if executable:
|
||||||
|
command = '%s -c %s' % (executable, success_cmd)
|
||||||
|
else:
|
||||||
|
command = success_cmd
|
||||||
|
|
||||||
# set executable to use for the privilege escalation method, with various overrides
|
# set executable to use for the privilege escalation method, with various overrides
|
||||||
exe = self.become_exe or \
|
exe = self.become_exe or \
|
||||||
getattr(self, '%s_exe' % self.become_method, None) or \
|
getattr(self, '%s_exe' % self.become_method, None) or \
|
||||||
|
@ -485,9 +488,9 @@ class PlayContext(Base):
|
||||||
# force quick error if password is required but not supplied, should prevent sudo hangs.
|
# force quick error if password is required but not supplied, should prevent sudo hangs.
|
||||||
if self.become_pass:
|
if self.become_pass:
|
||||||
prompt = '[sudo via ansible, key=%s] password: ' % randbits
|
prompt = '[sudo via ansible, key=%s] password: ' % randbits
|
||||||
becomecmd = '%s %s -p "%s" -u %s %s -c %s' % (exe, flags.replace('-n',''), prompt, self.become_user, executable, success_cmd)
|
becomecmd = '%s %s -p "%s" -u %s %s' % (exe, flags.replace('-n',''), prompt, self.become_user, command)
|
||||||
else:
|
else:
|
||||||
becomecmd = '%s %s -u %s %s -c %s' % (exe, flags, self.become_user, executable, success_cmd)
|
becomecmd = '%s %s -u %s %s' % (exe, flags, self.become_user, command)
|
||||||
|
|
||||||
|
|
||||||
elif self.become_method == 'su':
|
elif self.become_method == 'su':
|
||||||
|
@ -498,7 +501,7 @@ class PlayContext(Base):
|
||||||
return bool(SU_PROMPT_LOCALIZATIONS_RE.match(data))
|
return bool(SU_PROMPT_LOCALIZATIONS_RE.match(data))
|
||||||
prompt = detect_su_prompt
|
prompt = detect_su_prompt
|
||||||
|
|
||||||
becomecmd = '%s %s %s -c %s' % (exe, flags, self.become_user, pipes.quote('%s -c %s' % (executable, success_cmd)))
|
becomecmd = '%s %s %s -c %s' % (exe, flags, self.become_user, pipes.quote(command))
|
||||||
|
|
||||||
elif self.become_method == 'pbrun':
|
elif self.become_method == 'pbrun':
|
||||||
|
|
||||||
|
@ -534,7 +537,7 @@ class PlayContext(Base):
|
||||||
|
|
||||||
exe = self.become_exe or 'dzdo'
|
exe = self.become_exe or 'dzdo'
|
||||||
|
|
||||||
becomecmd = '%s -u %s %s -c %s' % (exe, self.become_user, executable, success_cmd)
|
becomecmd = '%s -u %s %s' % (exe, self.become_user, command)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise AnsibleError("Privilege escalation method not found: %s" % self.become_method)
|
raise AnsibleError("Privilege escalation method not found: %s" % self.become_method)
|
||||||
|
|
|
@ -37,7 +37,7 @@ class ActionModule(ActionBase):
|
||||||
result['skipped'] = True
|
result['skipped'] = True
|
||||||
return result
|
return result
|
||||||
|
|
||||||
executable = self._task.args.get('executable')
|
executable = self._task.args.get('executable', False)
|
||||||
result.update(self._low_level_execute_command(self._task.args.get('_raw_params'), executable=executable))
|
result.update(self._low_level_execute_command(self._task.args.get('_raw_params'), executable=executable))
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -19,7 +19,6 @@ __metaclass__ = type
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from ansible import constants as C
|
|
||||||
from ansible.plugins.action import ActionBase
|
from ansible.plugins.action import ActionBase
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,7 +78,6 @@ class ActionModule(ActionBase):
|
||||||
tmp_src = self._connection._shell.join_path(tmp, os.path.basename(source))
|
tmp_src = self._connection._shell.join_path(tmp, os.path.basename(source))
|
||||||
self._transfer_file(source, tmp_src)
|
self._transfer_file(source, tmp_src)
|
||||||
|
|
||||||
sudoable = True
|
|
||||||
# set file permissions, more permissive when the copy is done as a different user
|
# set file permissions, more permissive when the copy is done as a different user
|
||||||
self._fixup_perms(tmp, remote_user, execute=True, recursive=True)
|
self._fixup_perms(tmp, remote_user, execute=True, recursive=True)
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ class TestCopyResultExclude(unittest.TestCase):
|
||||||
self.mock_am.display = Mock()
|
self.mock_am.display = Mock()
|
||||||
|
|
||||||
self.mock_am.run()
|
self.mock_am.run()
|
||||||
self.mock_am._low_level_execute_command.assert_called_with('Args1', executable=None)
|
self.mock_am._low_level_execute_command.assert_called_with('Args1', executable=False)
|
||||||
|
|
||||||
def test_raw_check_mode_is_True(self):
|
def test_raw_check_mode_is_True(self):
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue