diff --git a/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py b/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py index 96688c7a6..e63911e84 100644 --- a/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py +++ b/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py @@ -41,34 +41,22 @@ class TestOvercloudUpgradePrepare(fakes.TestOvercloudUpgradePrepare): 'take_action') @mock.patch('tripleoclient.workflows.deployment.' 'get_hosts_and_enable_ssh_admin', autospec=True) - @mock.patch('tripleoclient.workflows.deployment.create_overcloudrc', + @mock.patch('tripleoclient.workflows.package_update.get_config', autospec=True) - @mock.patch('tripleoclient.utils.write_overcloudrc', autospec=True) @mock.patch('tripleoclient.utils.prepend_environment', autospec=True) @mock.patch('tripleoclient.utils.get_stack', autospec=True) @mock.patch('tripleoclient.v1.overcloud_upgrade.UpgradePrepare.log', autospec=True) - @mock.patch('tripleoclient.workflows.package_update.update', - autospec=True) - @mock.patch('os.path.abspath') @mock.patch('yaml.load') - @mock.patch('shutil.copytree', autospec=True) @mock.patch('six.moves.builtins.open') - @mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.' - '_deploy_tripleo_heat_templates', autospec=True) def test_upgrade_out(self, - mock_deploy, mock_open, - mock_copy, mock_yaml, - mock_abspath, - mock_upgrade, mock_logger, mock_get_stack, add_env, - mock_write_overcloudrc, - mock_overcloudrc, + mock_get_config, mock_enable_ssh_admin, mock_overcloud_deploy): @@ -90,16 +78,14 @@ class TestOvercloudUpgradePrepare(fakes.TestOvercloudUpgradePrepare): parsed_args = self.check_parser(self.cmd, argslist, verifylist) self.cmd.take_action(parsed_args) - mock_upgrade.assert_called_once_with( - self.app.client_manager, - container='overcloud', - ) - mock_overcloudrc.assert_called_once_with(mock.ANY, - container="overcloud") - mock_write_overcloudrc.assert_called_once_with("overcloud", - mock.ANY) mock_overcloud_deploy.assert_called_once_with(parsed_args) + args, kwargs = mock_overcloud_deploy.call_args + # Check config_download arg is set to False + self.assertEqual(args[0].config_download, False) + mock_get_config.assert_called_once_with(mock.ANY, + container=mock_stack.stack_name + ) mock_enable_ssh_admin.assert_called_once_with( self.cmd.log, self.app.client_manager, mock_stack, parsed_args.overcloud_ssh_network, @@ -111,18 +97,11 @@ class TestOvercloudUpgradePrepare(fakes.TestOvercloudUpgradePrepare): @mock.patch('tripleoclient.utils.get_stack', autospec=True) @mock.patch('tripleoclient.utils.prepend_environment', autospec=True) - @mock.patch('tripleoclient.workflows.package_update.update', - autospec=True) @mock.patch('six.moves.builtins.open') - @mock.patch('os.path.abspath') @mock.patch('yaml.load') - @mock.patch('shutil.copytree', autospec=True) - @mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.' - '_deploy_tripleo_heat_templates', autospec=True) - def test_upgrade_failed(self, mock_deploy, mock_copy, mock_yaml, - mock_abspath, mock_open, mock_upgrade, + def test_upgrade_failed(self, mock_yaml, mock_open, add_env, mock_get_stack, mock_overcloud_deploy): - mock_upgrade.side_effect = exceptions.DeploymentError() + mock_overcloud_deploy.side_effect = exceptions.DeploymentError() mock_yaml.return_value = {'fake_container': 'fake_value'} mock_stack = mock.Mock(parameters={'DeployIdentifier': ''}) mock_stack.stack_name = 'overcloud' diff --git a/tripleoclient/v1/overcloud_upgrade.py b/tripleoclient/v1/overcloud_upgrade.py index 121c65853..02b655251 100644 --- a/tripleoclient/v1/overcloud_upgrade.py +++ b/tripleoclient/v1/overcloud_upgrade.py @@ -39,7 +39,11 @@ class UpgradePrepare(DeployOvercloud): first step for a major upgrade of your overcloud. """ - log = logging.getLogger(__name__ + ".MajorUpgradePrepare") + operation = "Prepare" + + template = constants.UPGRADE_PREPARE_ENV + + log = logging.getLogger(__name__ + ".UpgradePrepare") def get_parser(self, prog_name): parser = super(UpgradePrepare, self).get_parser(prog_name) @@ -62,33 +66,31 @@ class UpgradePrepare(DeployOvercloud): stack_name = stack.stack_name # In case of update and upgrade we need to force the - # update_plan_only. The heat stack update is done by the - # packag_update mistral action - parsed_args.update_plan_only = True - # Add the upgrade-prepare.yaml environment to set noops etc + # config_download to false. The heat stack update will be performed + # by DeployOvercloud class but skipping the config download part. + parsed_args.config_download = False + # Add the template attribute environment to set noops etc templates_dir = (parsed_args.templates or constants.TRIPLEO_HEAT_TEMPLATES) parsed_args.environment_files = oooutils.prepend_environment( parsed_args.environment_files, templates_dir, - constants.UPGRADE_PREPARE_ENV) + self.template) super(UpgradePrepare, self).take_action(parsed_args) - package_update.update(clients, container=stack_name) + + # Download stack_name-config as this is skiped in + # DeployOvercloud. package_update.get_config(clients, container=stack_name) - overcloudrcs = deployment.create_overcloudrc( - clients, container=stack_name) - oooutils.write_overcloudrc(stack_name, overcloudrcs) - - # refresh stack info and enable ssh admin for Ansible-via-Mistral - stack = oooutils.get_stack(clients.orchestration, parsed_args.stack) + # enable ssh admin for Ansible-via-Mistral as that's done only + # when config_download is true deployment.get_hosts_and_enable_ssh_admin( self.log, clients, stack, parsed_args.overcloud_ssh_network, parsed_args.overcloud_ssh_user, self.get_key_pair(parsed_args), parsed_args.overcloud_ssh_enable_timeout, parsed_args.overcloud_ssh_port_timeout) - self.log.info("Completed Overcloud Upgrade Prepare for stack " - "{0}".format(stack_name)) + self.log.info("Completed Overcloud Upgrade {} for stack " + "{}".format(self.operation, stack_name)) class UpgradeRun(command.Command): @@ -103,7 +105,7 @@ class UpgradeRun(command.Command): command is the second step in the major upgrade workflow. """ - log = logging.getLogger(__name__ + ".MajorUpgradeRun") + log = logging.getLogger(__name__ + ".UpgradeRun") def get_parser(self, prog_name): parser = super(UpgradeRun, self).get_parser(prog_name) @@ -241,7 +243,7 @@ class UpgradeRun(command.Command): "playbooks {1} ").format(limit_hosts, playbooks)) -class UpgradeConvergeOvercloud(DeployOvercloud): +class UpgradeConvergeOvercloud(UpgradePrepare): """Major upgrade converge - reset Heat resources in the stored plan This is the last step for completion of a overcloud major @@ -250,25 +252,8 @@ class UpgradeConvergeOvercloud(DeployOvercloud): have set specific values for some stack Heat resources. This unsets those back to their default values. """ + operation = "Converge" + + template = constants.UPGRADE_CONVERGE_ENV log = logging.getLogger(__name__ + ".UpgradeConvergeOvercloud") - - def get_parser(self, prog_name): - parser = super(UpgradeConvergeOvercloud, self).get_parser(prog_name) - return parser - - def take_action(self, parsed_args): - self.log.debug("take_action(%s)" % parsed_args) - clients = self.app.client_manager - stack = oooutils.get_stack(clients.orchestration, - parsed_args.stack) - # Add the converge environment into the args to unset noop etc - templates_dir = (parsed_args.templates or - constants.TRIPLEO_HEAT_TEMPLATES) - parsed_args.environment_files = oooutils.prepend_environment( - parsed_args.environment_files, templates_dir, - constants.UPGRADE_CONVERGE_ENV) - - super(UpgradeConvergeOvercloud, self).take_action(parsed_args) - self.log.info("Completed Overcloud Upgrade Converge for stack {0}" - .format(stack.stack_name))