diff options
author | Brian Coca <brian.coca+git@gmail.com> | 2016-09-30 16:07:48 -0400 |
---|---|---|
committer | Brian Coca <bcoca@users.noreply.github.com> | 2016-09-30 17:58:19 -0400 |
commit | dfff608cebe185ec4f8419f06f91808a06acc714 (patch) | |
tree | 51888a0822b910e5538b143b7b17a3faa8165dbd | |
parent | 6008fbd5cf41915db6890b4e80290edd04a99732 (diff) | |
download | ansible-dfff608cebe185ec4f8419f06f91808a06acc714.tar.gz |
dzdo prompt fix
fixed tests
dzdo has 2 paths now, with and w/o password
fixes #17838
-rw-r--r-- | lib/ansible/playbook/play_context.py | 7 | ||||
-rw-r--r-- | test/units/playbook/test_play_context.py | 6 |
2 files changed, 11 insertions, 2 deletions
diff --git a/lib/ansible/playbook/play_context.py b/lib/ansible/playbook/play_context.py index 069d411f70..b038862b20 100644 --- a/lib/ansible/playbook/play_context.py +++ b/lib/ansible/playbook/play_context.py @@ -562,8 +562,11 @@ class PlayContext(Base): elif self.become_method == 'dzdo': exe = self.become_exe or 'dzdo' - - becomecmd = '%s -u %s %s' % (exe, self.become_user, command) + if self.become_pass: + prompt = '[dzdo via ansible, key=%s] password: ' % randbits + becomecmd = '%s -p %s -u %s %s' % (exe, pipes.quote(prompt), self.become_user, command) + else: + becomecmd = '%s -u %s %s' % (exe, self.become_user, command) else: raise AnsibleError("Privilege escalation method not found: %s" % self.become_method) diff --git a/test/units/playbook/test_play_context.py b/test/units/playbook/test_play_context.py index 9e94f615bb..109d06934f 100644 --- a/test/units/playbook/test_play_context.py +++ b/test/units/playbook/test_play_context.py @@ -20,6 +20,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import os +import pipes from ansible.compat.tests import unittest from ansible.compat.tests.mock import patch, MagicMock @@ -177,6 +178,11 @@ class TestPlayContext(unittest.TestCase): cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash") self.assertEqual(cmd, """%s -u %s %s -c 'echo %s; %s'""" % (dzdo_exe, play_context.become_user, default_exe, play_context.success_key, default_cmd)) + play_context.become_pass = 'testpass' + play_context.become_method = 'dzdo' + cmd = play_context.make_become_cmd(cmd=default_cmd, executable="/bin/bash") + self.assertEqual(cmd, """%s -p %s -u %s %s -c 'echo %s; %s'""" % (dzdo_exe, pipes.quote(play_context.prompt), play_context.become_user, default_exe, play_context.success_key, default_cmd)) + class TestTaskAndVariableOverrride(unittest.TestCase): inventory_vars = ( |