From 78bf55c8efe9156c52b5ed88659b3c28afd8a8f5 Mon Sep 17 00:00:00 2001 From: Jiri Stransky Date: Tue, 15 Jan 2019 13:56:13 +0100 Subject: [PATCH] Support '--tags' for 'overcloud upgrade run' This will allow more specialized usage of upgrade run command, similar to patterns used with 'external-upgrade run', e.g. during reprovisioning of nodes. Also, validation on '--skip-tags' is removed because we should no longer assume what tags are defined by the upgrade tasks, and we should allow more free-form usage. Change-Id: Icf672cc0db50ea6daa57d3c5abe131c82553fc5a Implements: blueprint upgrades-with-os --- .../test_overcloud_upgrade.py | 33 +++++++++++++++++++ tripleoclient/v1/overcloud_upgrade.py | 13 ++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py b/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py index 28c044e53..8b0b17b0e 100644 --- a/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py +++ b/tripleoclient/tests/v1/overcloud_upgrade/test_overcloud_upgrade.py @@ -207,6 +207,39 @@ class TestOvercloudUpgradeRun(fakes.TestOvercloudUpgradeRun): verbosity=1 ) + @mock.patch('tripleoclient.workflows.package_update.update_ansible', + autospec=True) + @mock.patch('os.path.expanduser') + @mock.patch('oslo_concurrency.processutils.execute') + @mock.patch('six.moves.builtins.open') + def test_upgrade_role_all_playbooks_only_validation( + self, mock_open, mock_execute, mock_expanduser, upgrade_ansible): + mock_expanduser.return_value = '/home/fake/' + argslist = ['--roles', 'Compute', '--playbook', 'all', + '--tags', 'validation'] + verifylist = [ + ('roles', 'Compute'), + ('static_inventory', None), + ('playbook', 'all'), + ('tags', 'validation') + ] + + parsed_args = self.check_parser(self.cmd, argslist, verifylist) + with mock.patch('os.path.exists') as mock_exists: + mock_exists.return_value = True + self.cmd.take_action(parsed_args) + for book in constants.MAJOR_UPGRADE_PLAYBOOKS: + upgrade_ansible.assert_any_call( + self.app.client_manager, + nodes='Compute', + inventory_file=mock_open().read(), + playbook=book, + node_user='tripleo-admin', + tags='validation', + skip_tags='', + verbosity=1, + ) + @mock.patch('tripleoclient.workflows.package_update.update_ansible', autospec=True) @mock.patch('os.path.expanduser') diff --git a/tripleoclient/v1/overcloud_upgrade.py b/tripleoclient/v1/overcloud_upgrade.py index f2e544104..55c7c5f57 100644 --- a/tripleoclient/v1/overcloud_upgrade.py +++ b/tripleoclient/v1/overcloud_upgrade.py @@ -166,6 +166,14 @@ class UpgradeRun(command.Command): help=_("DEPRECATED: Only tripleo-admin should be " "used as ssh user.") ) + parser.add_argument('--tags', + dest='tags', + action="store", + default="", + help=_('A string specifying the tag or comma ' + 'separated list of tags to be passed ' + 'as --tags to ansible-playbook.') + ) parser.add_argument('--skip-tags', dest='skip_tags', action="store", @@ -221,8 +229,9 @@ class UpgradeRun(command.Command): constants.MAJOR_UPGRADE_PLAYBOOKS, package_update, parsed_args.ssh_user, - skip_tags=skip_tags, - verbosity=verbosity) + parsed_args.tags, + skip_tags, + verbosity) playbooks = (constants.MAJOR_UPGRADE_PLAYBOOKS if playbook == 'all' else playbook)