diff --git a/os_faults/drivers/fuel.py b/os_faults/drivers/fuel.py index b765d2d..816468f 100644 --- a/os_faults/drivers/fuel.py +++ b/os_faults/drivers/fuel.py @@ -356,12 +356,15 @@ class FuelManagement(cloud_management.CloudManagement, address: 192.168.1.10 username: root private_key_file: ~/.ssh/id_rsa_fuel + slave_direct_ssh: True parameters: - **address** - ip address of fuel master node - **username** - username for fuel master and slave nodes - **private_key_file** - path to key file (optional) + - **slave_direct_ssh** - if *False* then fuel master is used as ssh proxy + (optional) """ NAME = 'fuel' @@ -420,6 +423,7 @@ class FuelManagement(cloud_management.CloudManagement, 'address': {'type': 'string'}, 'username': {'type': 'string'}, 'private_key_file': {'type': 'string'}, + 'slave_direct_ssh': {'type': 'boolean'}, }, 'required': ['address', 'username'], @@ -433,13 +437,19 @@ 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.slave_direct_ssh = cloud_management_params.get( + 'slave_direct_ssh', False) self.master_node_executor = executor.AnsibleRunner( remote_user=self.username, private_key_file=self.private_key_file) + jump_host = self.master_node_address + if self.slave_direct_ssh: + jump_host = None + self.cloud_executor = executor.AnsibleRunner( remote_user=self.username, private_key_file=self.private_key_file, - jump_host=self.master_node_address) + jump_host=jump_host) self.cached_cloud_hosts = list() diff --git a/os_faults/tests/unit/drivers/test_fuel_management.py b/os_faults/tests/unit/drivers/test_fuel_management.py index b73246f..3131630 100644 --- a/os_faults/tests/unit/drivers/test_fuel_management.py +++ b/os_faults/tests/unit/drivers/test_fuel_management.py @@ -34,6 +34,28 @@ class FuelManagementTestCase(test.TestCase): ' {"ip": "10.0.0.3", "mac": "03", "fqdn": "node-3"}]' }) + @mock.patch('os_faults.ansible.executor.AnsibleRunner', autospec=True) + @ddt.data(( + dict(address='fuel.local', username='root'), + (mock.call(private_key_file=None, remote_user='root'), + mock.call(private_key_file=None, remote_user='root', + jump_host='fuel.local')) + ), ( + dict(address='fuel.local', username='root', slave_direct_ssh=True), + (mock.call(private_key_file=None, remote_user='root'), + mock.call(private_key_file=None, remote_user='root', + jump_host=None)) + )) + @ddt.unpack + def test_init(self, config, expected_runner_calls, mock_ansible_runner): + ansible_runner_inst = mock_ansible_runner.return_value + + fuel_managment = fuel.FuelManagement(config) + + mock_ansible_runner.assert_has_calls(expected_runner_calls) + self.assertIs(fuel_managment.master_node_executor, ansible_runner_inst) + self.assertIs(fuel_managment.cloud_executor, ansible_runner_inst) + @mock.patch('os_faults.ansible.executor.AnsibleRunner', autospec=True) def test_verify(self, mock_ansible_runner): ansible_runner_inst = mock_ansible_runner.return_value