From 4d62920ff87a883c5095291336a565308dd16111 Mon Sep 17 00:00:00 2001 From: James Slagle Date: Thu, 19 Jul 2018 17:37:48 -0400 Subject: [PATCH] Add --override-ansible-cfg The option is used to pass a path to an ansible configuration file. The options in the file will be merged with the default ansible configuration options set by config-download. Any duplicates will override the default options. Change-Id: Ica9fc6a6ea2362938053515336aa368fed5ac2ab Depends-On: I0221311f3b17e9a60440681c42542c46af5e8903 --- .../overcloud_deploy/test_overcloud_deploy.py | 40 +++++++++++++++++++ tripleoclient/v1/overcloud_deploy.py | 9 +++++ tripleoclient/workflows/deployment.py | 7 +++- 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py b/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py index e9b769e21..5e57c70ed 100644 --- a/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py +++ b/tripleoclient/tests/v1/overcloud_deploy/test_overcloud_deploy.py @@ -1750,6 +1750,46 @@ class TestDeployOvercloud(fakes.TestDeployOvercloud): self.assertTrue(mock_get_overcloud_hosts.called) self.assertTrue(mock_config_download.called) + @mock.patch('tripleoclient.workflows.deployment.get_overcloud_hosts') + @mock.patch('tripleoclient.workflows.deployment.enable_ssh_admin') + @mock.patch('tripleoclient.workflows.deployment.get_horizon_url', + autospec=True) + @mock.patch('tripleoclient.workflows.deployment.config_download') + @mock.patch('tripleoclient.utils.create_tempest_deployer_input', + autospec=True) + @mock.patch('tripleoclient.utils.get_overcloud_endpoint', autospec=True) + @mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True) + @mock.patch('tripleoclient.workflows.deployment.create_overcloudrc', + autospec=True) + @mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.' + '_deploy_tripleo_heat_templates_tmpdir', autospec=True) + def test_override_ansible_cfg( + self, mock_deploy_tmpdir, + mock_overcloudrc, mock_write_overcloudrc, + mock_overcloud_endpoint, + mock_create_tempest_deployer_input, + mock_config_download, mock_get_horizon_url, + mock_enable_ssh_admin, + mock_get_overcloud_hosts): + clients = self.app.client_manager + orchestration_client = clients.orchestration + orchestration_client.stacks.get.return_value = mock.Mock() + + arglist = ['--templates', + '--override-ansible-cfg', 'ansible.cfg'] + verifylist = [ + ('templates', '/usr/share/openstack-tripleo-heat-templates/'), + ('override_ansible_cfg', 'ansible.cfg') + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + self.assertTrue(mock_enable_ssh_admin.called) + self.assertTrue(mock_get_overcloud_hosts.called) + self.assertTrue(mock_config_download.called) + self.assertEqual('ansible.cfg', + mock_config_download.call_args[0][8]) + def test_download_missing_files_from_plan(self): # Restore the real function so we don't accidentally call the mock self.cmd._download_missing_files_from_plan = self.real_download_missing diff --git a/tripleoclient/v1/overcloud_deploy.py b/tripleoclient/v1/overcloud_deploy.py index cba965945..2ca221130 100644 --- a/tripleoclient/v1/overcloud_deploy.py +++ b/tripleoclient/v1/overcloud_deploy.py @@ -812,6 +812,14 @@ class DeployOvercloud(command.Command): 'specified, the default server side value ' 'will be used (/var/lib/mistral/.') ) + parser.add_argument( + '--override-ansible-cfg', + action='store', + default=None, + help=_('Path to ansible configuration file. The configuration ' + 'in the file will override any configuration used by ' + 'config-download by default.') + ) return parser def take_action(self, parsed_args): @@ -893,6 +901,7 @@ class DeployOvercloud(command.Command): parsed_args.overcloud_ssh_key, parsed_args.overcloud_ssh_network, parsed_args.output_dir, + parsed_args.override_ansible_cfg, verbosity=self.app_args.verbose_level) # Force fetching of attributes diff --git a/tripleoclient/workflows/deployment.py b/tripleoclient/workflows/deployment.py index 072fcfa07..26b76986d 100644 --- a/tripleoclient/workflows/deployment.py +++ b/tripleoclient/workflows/deployment.py @@ -243,7 +243,8 @@ def enable_ssh_admin(log, clients, hosts, ssh_user, ssh_key): def config_download(log, clients, stack, templates, - ssh_user, ssh_key, ssh_network, output_dir, verbosity=1): + ssh_user, ssh_key, ssh_network, output_dir, + override_ansible_cfg, verbosity=1): workflow_client = clients.workflow_engine tripleoclients = clients.tripleoclient @@ -254,6 +255,10 @@ def config_download(log, clients, stack, templates, } if output_dir: workflow_input.update(dict(work_dir=output_dir)) + if override_ansible_cfg: + override_ansible_cfg_contents = open(override_ansible_cfg).read() + workflow_input.update( + dict(override_ansible_cfg=override_ansible_cfg_contents)) with tripleoclients.messaging_websocket() as ws: execution = base.start_workflow(