diff --git a/examples/uno.py b/examples/uno.py index bf16d87..34e9ae9 100644 --- a/examples/uno.py +++ b/examples/uno.py @@ -22,6 +22,7 @@ def main(): 'driver': 'fuel', 'address': 'fuel.local', 'username': 'root', + 'private_key_file': '~/.ssh/os_faults', }, 'power_management': { 'driver': 'libvirt', diff --git a/os_faults/ansible/executor.py b/os_faults/ansible/executor.py index 1a00a31..f2cdc00 100644 --- a/os_faults/ansible/executor.py +++ b/os_faults/ansible/executor.py @@ -96,15 +96,22 @@ Options = namedtuple('Options', class AnsibleRunner(object): def __init__(self, remote_user='root', password=None, forks=100, - ssh_common_args='', become=None): + jump_host=None, private_key_file=None, become=None): super(AnsibleRunner, self).__init__() module_path = resolve_relative_path('os_faults/ansible/modules') - ssh_common_args = ' '.join([ssh_common_args, SSH_COMMON_ARGS]) + + ssh_common_args = SSH_COMMON_ARGS + if jump_host: + ssh_common_args += ( + ' -o ProxyCommand="ssh -i %(key)s -W %%h:%%p ' + '%(user)s@%(host)s"' + % dict(key=private_key_file, user=remote_user, host=jump_host)) self.options = Options( connection='smart', password=password, module_path=module_path, - forks=forks, remote_user=remote_user, private_key_file=None, + forks=forks, remote_user=remote_user, + private_key_file=private_key_file, ssh_common_args=ssh_common_args, ssh_extra_args=None, sftp_extra_args=None, scp_extra_args=None, become=become, become_method='sudo', become_user='root', diff --git a/os_faults/drivers/devstack.py b/os_faults/drivers/devstack.py index 300e325..a533802 100644 --- a/os_faults/drivers/devstack.py +++ b/os_faults/drivers/devstack.py @@ -103,9 +103,11 @@ class DevStackManagement(cloud_management.CloudManagement): self.address = cloud_management_params['address'] self.username = cloud_management_params['username'] + self.private_key_file = cloud_management_params.get('private_key') - self.executor = executor.AnsibleRunner(remote_user=self.username, - become=True) + self.executor = executor.AnsibleRunner( + remote_user=self.username, private_key_file=self.private_key_file, + become=True) self.host = None def verify(self): diff --git a/os_faults/drivers/fuel.py b/os_faults/drivers/fuel.py index f6aec20..de2c8d8 100644 --- a/os_faults/drivers/fuel.py +++ b/os_faults/drivers/fuel.py @@ -269,14 +269,14 @@ class FuelManagement(cloud_management.CloudManagement): self.master_node_address = cloud_management_params['address'] self.username = cloud_management_params['username'] + self.private_key_file = cloud_management_params.get('private_key_file') self.master_node_executor = executor.AnsibleRunner( - remote_user=self.username) + remote_user=self.username, private_key_file=self.private_key_file) self.cloud_executor = executor.AnsibleRunner( - remote_user=self.username, - ssh_common_args='-o ProxyCommand="ssh -W %%h:%%p %s@%s"' % - (self.username, self.master_node_address)) + remote_user=self.username, private_key_file=self.private_key_file, + jump_host=self.master_node_address) self.cached_cloud_hosts = None self.fqdn_to_hosts = dict()