zone connection plugin bugfixes and pipelining and sudo become methods enabled!
Thanks to peinheber for helping test and debug this!
This commit is contained in:
parent
db27541a0e
commit
fc7e2912f2
1 changed files with 6 additions and 21 deletions
|
@ -45,13 +45,8 @@ class Connection(ConnectionBase):
|
|||
''' Local zone based connections '''
|
||||
|
||||
transport = 'zone'
|
||||
# Pipelining may work. Someone needs to test by setting this to True and
|
||||
# having pipelining=True in their ansible.cfg
|
||||
has_pipelining = False
|
||||
# Some become_methods may work in v2 (sudo works for other chroot-based
|
||||
# plugins while su seems to be failing). If some work, check chroot.py to
|
||||
# see how to disable just some methods.
|
||||
become_methods = frozenset()
|
||||
has_pipelining = True
|
||||
become_methods = frozenset(C.BECOME_METHODS).difference(('su',))
|
||||
|
||||
def __init__(self, play_context, new_stdin, *args, **kwargs):
|
||||
super(Connection, self).__init__(play_context, new_stdin, *args, **kwargs)
|
||||
|
@ -114,13 +109,10 @@ class Connection(ConnectionBase):
|
|||
compared to exec_command() it looses some niceties like being able to
|
||||
return the process's exit code immediately.
|
||||
'''
|
||||
# FIXME: previous code took pains not to invoke /bin/sh and left out
|
||||
# -c. Not sure why as cmd could contain shell metachars (like
|
||||
# cmd = "mkdir -p $HOME/pathname && echo $HOME/pathname") which
|
||||
# probably wouldn't work without a shell. Get someone to test that
|
||||
# this connection plugin works and then we can remove this note
|
||||
executable = C.DEFAULT_EXECUTABLE.split()[0] if C.DEFAULT_EXECUTABLE else '/bin/sh'
|
||||
local_cmd = [self.zlogin_cmd, self.zone, executable, '-c', cmd]
|
||||
# Note: zlogin invokes a shell (just like ssh does) so we do not pass
|
||||
# this through /bin/sh -c here. Instead it goes through the shell
|
||||
# that zlogin selects.
|
||||
local_cmd = [self.zlogin_cmd, self.zone, cmd]
|
||||
|
||||
display.vvv("EXEC %s" % (local_cmd), host=self.zone)
|
||||
p = subprocess.Popen(local_cmd, shell=False, stdin=stdin,
|
||||
|
@ -132,13 +124,6 @@ class Connection(ConnectionBase):
|
|||
''' run a command on the zone '''
|
||||
super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
|
||||
|
||||
# TODO: Check whether we can send the command to stdin via
|
||||
# p.communicate(in_data)
|
||||
# If we can, then we can change this plugin to has_pipelining=True and
|
||||
# remove the error if in_data is given.
|
||||
if in_data:
|
||||
raise AnsibleError("Internal Error: this module does not support optimized module pipelining")
|
||||
|
||||
p = self._buffered_exec_command(cmd)
|
||||
|
||||
stdout, stderr = p.communicate(in_data)
|
||||
|
|
Loading…
Reference in a new issue