Merge "Refactor upgrade prepare and converge."

This commit is contained in:
Zuul 2020-06-22 15:50:37 +00:00 committed by Gerrit Code Review
commit 11f4cf1998
2 changed files with 24 additions and 63 deletions

View File

@ -42,32 +42,19 @@ class TestOvercloudUpgradePrepare(fakes.TestOvercloudUpgradePrepare):
'take_action') 'take_action')
@mock.patch('tripleoclient.workflows.deployment.' @mock.patch('tripleoclient.workflows.deployment.'
'get_hosts_and_enable_ssh_admin', autospec=True) 'get_hosts_and_enable_ssh_admin', autospec=True)
@mock.patch('tripleoclient.workflows.deployment.create_overcloudrc',
autospec=True)
@mock.patch('tripleoclient.utils.prepend_environment', autospec=True) @mock.patch('tripleoclient.utils.prepend_environment', autospec=True)
@mock.patch('tripleoclient.utils.get_stack', @mock.patch('tripleoclient.utils.get_stack',
autospec=True) autospec=True)
@mock.patch('tripleoclient.v1.overcloud_upgrade.UpgradePrepare.log', @mock.patch('tripleoclient.v1.overcloud_upgrade.UpgradePrepare.log',
autospec=True) autospec=True)
@mock.patch('tripleoclient.workflows.package_update.update',
autospec=True)
@mock.patch('os.path.abspath')
@mock.patch('yaml.safe_load') @mock.patch('yaml.safe_load')
@mock.patch('shutil.copytree', autospec=True)
@mock.patch('six.moves.builtins.open') @mock.patch('six.moves.builtins.open')
@mock.patch('tripleoclient.v1.overcloud_deploy.DeployOvercloud.'
'_deploy_tripleo_heat_templates', autospec=True)
def test_upgrade_out(self, def test_upgrade_out(self,
mock_deploy,
mock_open, mock_open,
mock_copy,
mock_yaml, mock_yaml,
mock_abspath,
mock_upgrade,
mock_logger, mock_logger,
mock_get_stack, mock_get_stack,
add_env, add_env,
mock_overcloudrc,
mock_enable_ssh_admin, mock_enable_ssh_admin,
mock_overcloud_deploy): mock_overcloud_deploy):
@ -89,13 +76,11 @@ class TestOvercloudUpgradePrepare(fakes.TestOvercloudUpgradePrepare):
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
mock_upgrade.assert_called_once_with(
self.app.client_manager,
container='overcloud',
)
mock_overcloudrc.assert_called_once_with(container="overcloud")
mock_overcloud_deploy.assert_called_once_with(parsed_args) 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_enable_ssh_admin.assert_called_once_with( mock_enable_ssh_admin.assert_called_once_with(
mock_stack, mock_stack,
parsed_args.overcloud_ssh_network, parsed_args.overcloud_ssh_network,
@ -110,18 +95,11 @@ class TestOvercloudUpgradePrepare(fakes.TestOvercloudUpgradePrepare):
@mock.patch('tripleoclient.utils.get_stack', @mock.patch('tripleoclient.utils.get_stack',
autospec=True) autospec=True)
@mock.patch('tripleoclient.utils.prepend_environment', 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('six.moves.builtins.open')
@mock.patch('os.path.abspath')
@mock.patch('yaml.safe_load') @mock.patch('yaml.safe_load')
@mock.patch('shutil.copytree', autospec=True) def test_upgrade_failed(self, mock_yaml, mock_open,
@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,
add_env, mock_get_stack, mock_overcloud_deploy): 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_yaml.return_value = {'fake_container': 'fake_value'}
mock_stack = mock.Mock(parameters={'DeployIdentifier': ''}) mock_stack = mock.Mock(parameters={'DeployIdentifier': ''})
mock_stack.stack_name = 'overcloud' mock_stack.stack_name = 'overcloud'

View File

@ -24,7 +24,6 @@ from tripleoclient import exceptions
from tripleoclient import utils as oooutils from tripleoclient import utils as oooutils
from tripleoclient.v1.overcloud_deploy import DeployOvercloud from tripleoclient.v1.overcloud_deploy import DeployOvercloud
from tripleoclient.workflows import deployment from tripleoclient.workflows import deployment
from tripleoclient.workflows import package_update
CONF = cfg.CONF CONF = cfg.CONF
logging.register_options(CONF) logging.register_options(CONF)
@ -39,7 +38,11 @@ class UpgradePrepare(DeployOvercloud):
first step for a major upgrade of your overcloud. 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): def get_parser(self, prog_name):
parser = super(UpgradePrepare, self).get_parser(prog_name) parser = super(UpgradePrepare, self).get_parser(prog_name)
@ -62,22 +65,19 @@ class UpgradePrepare(DeployOvercloud):
stack_name = stack.stack_name stack_name = stack.stack_name
# In case of update and upgrade we need to force the # In case of update and upgrade we need to force the
# update_plan_only. The heat stack update is done by the # config_download to false. The heat stack update will be performed
# packag_update mistral action # by DeployOvercloud class but skipping the config download part.
parsed_args.update_plan_only = True parsed_args.config_download = False
# Add the upgrade-prepare.yaml environment to set noops etc # Add the template attribute environment to set noops etc
templates_dir = (parsed_args.templates or templates_dir = (parsed_args.templates or
constants.TRIPLEO_HEAT_TEMPLATES) constants.TRIPLEO_HEAT_TEMPLATES)
parsed_args.environment_files = oooutils.prepend_environment( parsed_args.environment_files = oooutils.prepend_environment(
parsed_args.environment_files, templates_dir, parsed_args.environment_files, templates_dir,
constants.UPGRADE_PREPARE_ENV) self.template)
super(UpgradePrepare, self).take_action(parsed_args) super(UpgradePrepare, self).take_action(parsed_args)
package_update.update(clients, container=stack_name)
deployment.create_overcloudrc(container=stack_name) # enable ssh admin for Ansible-via-Mistral as that's done only
# when config_download is true
# refresh stack info and enable ssh admin for Ansible-via-Mistral
stack = oooutils.get_stack(clients.orchestration, parsed_args.stack)
deployment.get_hosts_and_enable_ssh_admin( deployment.get_hosts_and_enable_ssh_admin(
stack, stack,
parsed_args.overcloud_ssh_network, parsed_args.overcloud_ssh_network,
@ -87,8 +87,8 @@ class UpgradePrepare(DeployOvercloud):
verbosity=oooutils.playbook_verbosity(self=self) verbosity=oooutils.playbook_verbosity(self=self)
) )
self.log.info("Completed Overcloud Upgrade Prepare for stack " self.log.info("Completed Overcloud Upgrade {} for stack "
"{0}".format(stack_name)) "{}".format(self.operation, stack_name))
class UpgradeRun(command.Command): class UpgradeRun(command.Command):
@ -103,7 +103,7 @@ class UpgradeRun(command.Command):
command is the second step in the major upgrade workflow. 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): def get_parser(self, prog_name):
parser = super(UpgradeRun, self).get_parser(prog_name) parser = super(UpgradeRun, self).get_parser(prog_name)
@ -229,7 +229,7 @@ class UpgradeRun(command.Command):
self.log.info("Completed Overcloud Major Upgrade Run.") self.log.info("Completed Overcloud Major Upgrade Run.")
class UpgradeConvergeOvercloud(DeployOvercloud): class UpgradeConvergeOvercloud(UpgradePrepare):
"""Major upgrade converge - reset Heat resources in the stored plan """Major upgrade converge - reset Heat resources in the stored plan
This is the last step for completion of a overcloud major This is the last step for completion of a overcloud major
@ -238,25 +238,8 @@ class UpgradeConvergeOvercloud(DeployOvercloud):
have set specific values for some stack Heat resources. This have set specific values for some stack Heat resources. This
unsets those back to their default values. unsets those back to their default values.
""" """
operation = "Converge"
template = constants.UPGRADE_CONVERGE_ENV
log = logging.getLogger(__name__ + ".UpgradeConvergeOvercloud") 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))