Allow overriding ansible_ssh_extra_args on the command-line

This patch makes it possible to do:

    ansible somehost -m setup \
        --ssh-extra-args '-o ProxyCommand="ssh -W %h:%p -q user@bouncer.example.com"'

This overrides the inventory setting, if any, of ansible_ssh_extra_args.

Based on a patch originally by @Richard2ndQuadrant.
pull/11908/head
Abhijit Menon-Sen 9 years ago
parent b023ace8a8
commit 37c1a5b679

@ -315,6 +315,8 @@ class CLI(object):
help="connection type to use (default=%s)" % C.DEFAULT_TRANSPORT) help="connection type to use (default=%s)" % C.DEFAULT_TRANSPORT)
parser.add_option('-T', '--timeout', default=C.DEFAULT_TIMEOUT, type='int', dest='timeout', parser.add_option('-T', '--timeout', default=C.DEFAULT_TIMEOUT, type='int', dest='timeout',
help="override the connection timeout in seconds (default=%s)" % C.DEFAULT_TIMEOUT) help="override the connection timeout in seconds (default=%s)" % C.DEFAULT_TIMEOUT)
parser.add_option('--ssh-extra-args', default='', dest='ssh_extra_args',
help="specify extra arguments to pass to ssh (e.g. ProxyCommand)")
if async_opts: if async_opts:
parser.add_option('-P', '--poll', default=C.DEFAULT_POLL_INTERVAL, type='int', dest='poll_interval', parser.add_option('-P', '--poll', default=C.DEFAULT_POLL_INTERVAL, type='int', dest='poll_interval',

@ -163,6 +163,7 @@ class PlayContext(Base):
_private_key_file = FieldAttribute(isa='string', default=C.DEFAULT_PRIVATE_KEY_FILE) _private_key_file = FieldAttribute(isa='string', default=C.DEFAULT_PRIVATE_KEY_FILE)
_timeout = FieldAttribute(isa='int', default=C.DEFAULT_TIMEOUT) _timeout = FieldAttribute(isa='int', default=C.DEFAULT_TIMEOUT)
_shell = FieldAttribute(isa='string') _shell = FieldAttribute(isa='string')
_ssh_extra_args = FieldAttribute(isa='string')
_connection_lockfd= FieldAttribute(isa='int') _connection_lockfd= FieldAttribute(isa='int')
# privilege escalation fields # privilege escalation fields
@ -252,6 +253,7 @@ class PlayContext(Base):
self.remote_user = options.remote_user self.remote_user = options.remote_user
self.private_key_file = options.private_key_file self.private_key_file = options.private_key_file
self.ssh_extra_args = options.ssh_extra_args
# privilege escalation # privilege escalation
self.become = options.become self.become = options.become

@ -121,9 +121,10 @@ class Connection(ConnectionBase):
self._common_args += ("-o", "ConnectTimeout={0}".format(self._play_context.timeout)) self._common_args += ("-o", "ConnectTimeout={0}".format(self._play_context.timeout))
# If any extra SSH arguments are specified in the inventory for # If any extra SSH arguments are specified in the inventory for
# this host, add them in. # this host, or specified as an override on the command line,
if self.ssh_extra_args is not None: # add them in.
extra_args = self.ssh_extra_args extra_args = self._play_context.ssh_extra_args or self.ssh_extra_args
if extra_args is not None:
self._common_args += [x.strip() for x in shlex.split(extra_args) if x.strip()] self._common_args += [x.strip() for x in shlex.split(extra_args) if x.strip()]
self._connected = True self._connected = True

Loading…
Cancel
Save