Makes ports configurable for fireball. Note port defaults really belong in the connection plugins, not runner, which can be refactored later.

This commit is contained in:
Michael DeHaan 2012-10-08 19:03:37 -04:00
parent 612561ad0e
commit 04954dbc1e
3 changed files with 23 additions and 10 deletions

View file

@ -100,7 +100,7 @@ class Runner(object):
pattern=C.DEFAULT_PATTERN, # which hosts? ex: 'all', 'acme.example.org' pattern=C.DEFAULT_PATTERN, # which hosts? ex: 'all', 'acme.example.org'
remote_user=C.DEFAULT_REMOTE_USER, # ex: 'username' remote_user=C.DEFAULT_REMOTE_USER, # ex: 'username'
remote_pass=C.DEFAULT_REMOTE_PASS, # ex: 'password123' or None if using key remote_pass=C.DEFAULT_REMOTE_PASS, # ex: 'password123' or None if using key
remote_port=C.DEFAULT_REMOTE_PORT, # if SSH on different ports remote_port=None, # if SSH on different ports
private_key_file=C.DEFAULT_PRIVATE_KEY_FILE, # if not using keys/passwords private_key_file=C.DEFAULT_PRIVATE_KEY_FILE, # if not using keys/passwords
sudo_pass=C.DEFAULT_SUDO_PASS, # ex: 'password123' or None sudo_pass=C.DEFAULT_SUDO_PASS, # ex: 'password123' or None
background=0, # async poll every X seconds, else 0 for non-async background=0, # async poll every X seconds, else 0 for non-async
@ -208,7 +208,9 @@ class Runner(object):
# hack to support fireball mode # hack to support fireball mode
if module_name == 'fireball': if module_name == 'fireball':
args = "%s password=%s port=%s" % (args, base64.b64encode(str(utils.key_for_hostname(conn.host))), C.ZEROMQ_PORT) args = "%s password=%s" % (args, base64.b64encode(str(utils.key_for_hostname(conn.host))))
if 'port' not in args:
args += " port=%s" % C.ZEROMQ_PORT
(remote_module_path, is_new_style) = self._copy_module(conn, tmp, module_name, args, inject) (remote_module_path, is_new_style) = self._copy_module(conn, tmp, module_name, args, inject)
cmd = "chmod u+x %s" % remote_module_path cmd = "chmod u+x %s" % remote_module_path
@ -262,7 +264,13 @@ class Runner(object):
''' executes any module one or more times ''' ''' executes any module one or more times '''
host_variables = self.inventory.get_variables(host) host_variables = self.inventory.get_variables(host)
port = host_variables.get('ansible_ssh_port', self.remote_port) if self.transport in [ 'paramiko', 'ssh' ]:
port = host_variables.get('ansible_ssh_port', self.remote_port)
if port is None:
port = C.DEFAULT_REMOTE_PORT
else:
# fireball, local, etc
port = self.remote_port
inject = {} inject = {}
inject.update(host_variables) inject.update(host_variables)

View file

@ -35,12 +35,14 @@ class Connection(object):
def __init__(self, runner): def __init__(self, runner):
self.runner = runner self.runner = runner
def connect(self, host, port=None): def connect(self, host, port):
conn = None conn = None
transport = self.runner.transport transport = self.runner.transport
module = modules.get(transport, None) module = modules.get(transport, None)
if module is None: if module is None:
raise AnsibleError("unsupported connection type: %s" % transport) raise AnsibleError("unsupported connection type: %s" % transport)
conn = module.Connection(self.runner, host, port) conn = module.Connection(self.runner, host, port)
return conn.connect() self.active = conn.connect()
return self.active

View file

@ -31,9 +31,9 @@ except ImportError:
pass pass
class Connection(object): class Connection(object):
''' SSH based connections with Paramiko ''' ''' ZeroMQ accelerated connection '''
def __init__(self, runner, host, port=None): def __init__(self, runner, host, port):
self.runner = runner self.runner = runner
@ -45,8 +45,11 @@ class Connection(object):
self.key = utils.key_for_hostname(host) self.key = utils.key_for_hostname(host)
self.context = None self.context = None
self.socket = None self.socket = None
# port passed in is the SSH port, which we ignore
self.port = constants.ZEROMQ_PORT if port is None:
self.port = constants.ZEROMQ_PORT
else:
self.port = port
def connect(self): def connect(self):
''' activates the connection object ''' ''' activates the connection object '''