From 64af3ae1fb9adda02efcfd93d99cf5deca1104cb Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Wed, 18 Sep 2019 12:15:39 -0400 Subject: [PATCH] Introduce --inflight-validations for standalone / undercloud Like we do for the overcloud, add the --inflight-validations option, disabled by default. Disable by default, we'll skip the "opendev-validations" Ansible tags when running the playbooks. Related-Bug: #1844446 Change-Id: Ia37b3d4cc657d994b6a63412d5792930d54a14dd --- .../tests/v1/tripleo/test_tripleo_deploy.py | 3 +- tripleoclient/v1/tripleo_deploy.py | 39 ++++++++++++++----- tripleoclient/v1/undercloud_config.py | 3 +- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/tripleoclient/tests/v1/tripleo/test_tripleo_deploy.py b/tripleoclient/tests/v1/tripleo/test_tripleo_deploy.py index 90a5d6b33..470e3b263 100644 --- a/tripleoclient/tests/v1/tripleo/test_tripleo_deploy.py +++ b/tripleoclient/tests/v1/tripleo/test_tripleo_deploy.py @@ -851,8 +851,7 @@ class TestDeployUndercloud(TestPluginV1): @mock.patch('os.execvp') def test_launch_ansible_with_args(self, mock_execvp, mock_chdir, mock_run): - args = ['deploy_steps_playbook.yaml', '--skip-tags', - 'validation'] + args = ['--skip-tags', 'validation'] self.cmd._launch_ansible('/tmp', args, operation='deploy') mock_chdir.assert_called_once() mock_run.assert_called_once_with(self.cmd.log, [ diff --git a/tripleoclient/v1/tripleo_deploy.py b/tripleoclient/v1/tripleo_deploy.py index 2464cf19a..c9b118929 100644 --- a/tripleoclient/v1/tripleo_deploy.py +++ b/tripleoclient/v1/tripleo_deploy.py @@ -899,14 +899,17 @@ class Deploy(command.Command): return output # Never returns, calls exec() - def _launch_ansible(self, ansible_dir, list_args=None, operation="deploy"): + def _launch_ansible(self, ansible_dir, extra_args=None, + operation="deploy"): - if list_args is None: - if operation not in constants.DEPLOY_ANSIBLE_ACTIONS.keys(): - self.log.error(_('Operation %s is not allowed') % operation) - raise exceptions.DeploymentError('Invalid operation to run in ' - 'ansible.') - list_args = constants.DEPLOY_ANSIBLE_ACTIONS[operation].split() + if operation not in constants.DEPLOY_ANSIBLE_ACTIONS.keys(): + self.log.error(_('Operation %s is not allowed') % operation) + raise exceptions.DeploymentError('Invalid operation to run in ' + 'ansible.') + list_args = constants.DEPLOY_ANSIBLE_ACTIONS[operation].split() + + if extra_args: + list_args.extend(extra_args) self.log.warning(_('** Running ansible %s tasks **') % operation) os.chdir(ansible_dir) @@ -1089,6 +1092,16 @@ class Deploy(command.Command): 'openstack stack list\n ' 'where 8006 is the port specified by --heat-api-port.') ) + parser.add_argument( + '--inflight-validations', + action='store_true', + default=False, + dest='inflight', + help=_('Activate in-flight validations during the deploy. ' + 'In-flight validations provide a robust way to ensure ' + 'deployed services are running right after their ' + 'activation. Defaults to False.') + ) stack_action_group = parser.add_mutually_exclusive_group() @@ -1287,6 +1300,9 @@ class Deploy(command.Command): _('Using the existing %s for deployment') % ansible_config) shutil.copy(ansible_config, self.ansible_dir) + extra_args = [] + if not parsed_args.inflight: + extra_args = ['--skip-tags', 'opendev-validation'] # Kill heat, we're done with it now. if not parsed_args.keep_running: self._kill_heat(parsed_args) @@ -1294,7 +1310,8 @@ class Deploy(command.Command): if parsed_args.upgrade: # Run Upgrade tasks before the deployment rc = self._launch_ansible(self.ansible_dir, - operation='upgrade') + operation='upgrade', + extra_args=extra_args) if rc != 0: raise exceptions.DeploymentError('Upgrade failed') rc = self._launch_ansible(self.ansible_dir) @@ -1303,12 +1320,14 @@ class Deploy(command.Command): if parsed_args.upgrade: # Run Post Upgrade tasks after the deployment rc = self._launch_ansible(self.ansible_dir, - operation='post-upgrade') + operation='post-upgrade', + extra_args=extra_args) if rc != 0: raise exceptions.DeploymentError('Post Upgrade failed') # Run Online Upgrade tasks after the deployment rc = self._launch_ansible(self.ansible_dir, - operation='online-upgrade') + operation='online-upgrade', + extra_args=extra_args) if rc != 0: raise exceptions.DeploymentError( 'Online Upgrade failed') diff --git a/tripleoclient/v1/undercloud_config.py b/tripleoclient/v1/undercloud_config.py index 56123cfc4..0ca42c9e8 100644 --- a/tripleoclient/v1/undercloud_config.py +++ b/tripleoclient/v1/undercloud_config.py @@ -753,7 +753,8 @@ def prepare_undercloud_deploy(upgrade=False, no_validations=False, utils.ansible_symlink() undercloud_preflight.check(verbose_level, upgrade) deploy_args += ['-e', os.path.join( - tht_templates, "environments/tripleo-validations.yaml")] + tht_templates, "environments/tripleo-validations.yaml"), + '--inflight-validations'] if CONF.get('custom_env_files'): for custom_file in CONF['custom_env_files']: