raw should not use default executable (#16085)

also removed unused cruft in script
This commit is contained in:
Brian Coca 2016-06-10 11:37:58 -04:00 committed by GitHub
parent 828b73dd2d
commit a529a60478
4 changed files with 15 additions and 14 deletions

View file

@ -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 self.become:
if executable is None: if executable is None:
executable = self.executable executable = self.executable
if self.become:
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)

View file

@ -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

View file

@ -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)

View file

@ -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):