Merge "Ephemeral Heat: Add a --refresh option to external update run" into stable/wallaby

This commit is contained in:
Zuul 2021-06-02 20:18:27 +00:00 committed by Gerrit Code Review
commit db740318d3
3 changed files with 111 additions and 33 deletions

View File

@ -13,7 +13,9 @@
# under the License. # under the License.
# #
import fixtures
import mock import mock
import os
from tripleoclient.tests import fakes as ooofakes from tripleoclient.tests import fakes as ooofakes
from tripleoclient.tests.v1.overcloud_external_update import fakes from tripleoclient.tests.v1.overcloud_external_update import fakes
@ -89,3 +91,37 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
] ]
self.check_parser(self.cmd, argslist, verifylist) self.check_parser(self.cmd, argslist, verifylist)
@mock.patch('tripleoclient.workflows.deployment.config_download')
@mock.patch('tripleoclient.utils.get_default_working_dir', autospec=True)
@mock.patch('tripleoclient.workflows.deployment.snapshot_dir',
autospec=True)
@mock.patch('tripleoclient.utils.run_ansible_playbook', autospec=True)
@mock.patch('tripleoclient.utils.get_key')
def test_update_with_refresh(
self, mock_get_key,
mock_run_ansible_playbook,
mock_snapshot_dir,
mock_get_default_working_dir,
mock_config_download):
argslist = ['--yes', '--refresh']
verifylist = [
('refresh', True)
]
parsed_args = self.check_parser(self.cmd, argslist, verifylist)
argslist = ['--yes']
verifylist = [
('refresh', False)
]
parsed_args = self.check_parser(self.cmd, argslist, verifylist)
mock_get_key.return_value = '/test/key'
work_dir = self.useFixture(fixtures.TempDir())
mock_get_default_working_dir.return_value = work_dir.path
ansible_dir = os.path.join(work_dir.path, 'config-download',
'overcloud')
self.cmd.take_action(parsed_args)
mock_get_key.assert_called_once_with('overcloud')
mock_snapshot_dir.assert_called_once_with(ansible_dir)
mock_run_ansible_playbook.assert_called()
mock_config_download.assert_not_called()

View File

@ -13,6 +13,8 @@
# under the License. # under the License.
# #
import os
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log as logging from oslo_log import log as logging
@ -114,6 +116,11 @@ class ExternalUpdateRun(command.Command):
help=_('The number of Ansible forks to use for the' help=_('The number of Ansible forks to use for the'
' config-download ansible-playbook command.') ' config-download ansible-playbook command.')
) )
parser.add_argument(
'--refresh',
action='store_true',
help=_('Refresh the config-download playbooks')
)
return parser return parser
@ -128,35 +135,60 @@ class ExternalUpdateRun(command.Command):
constants.UPDATE_PROMPT, self.log)): constants.UPDATE_PROMPT, self.log)):
raise OvercloudUpdateNotConfirmed(constants.UPDATE_NO) raise OvercloudUpdateNotConfirmed(constants.UPDATE_NO)
_, ansible_dir = self.get_ansible_key_and_dir( if parsed_args.refresh:
no_workflow=True, _, ansible_dir = self.get_ansible_key_and_dir(
stack=parsed_args.stack, no_workflow=True,
orchestration=self.app.client_manager.orchestration stack=parsed_args.stack,
) orchestration=self.app.client_manager.orchestration
deployment.config_download( )
log=self.log, deployment.config_download(
clients=self.app.client_manager, log=self.log,
stack=oooutils.get_stack( clients=self.app.client_manager,
self.app.client_manager.orchestration, stack=oooutils.get_stack(
parsed_args.stack self.app.client_manager.orchestration,
), parsed_args.stack
output_dir=ansible_dir, ),
verbosity=oooutils.playbook_verbosity(self=self), output_dir=ansible_dir,
ansible_playbook_name=constants.EXTERNAL_UPDATE_PLAYBOOKS, verbosity=oooutils.playbook_verbosity(self=self),
extra_vars=oooutils.parse_extra_vars( ansible_playbook_name=constants.EXTERNAL_UPDATE_PLAYBOOKS,
extra_var_strings=parsed_args.extra_vars extra_vars=oooutils.parse_extra_vars(
), extra_var_strings=parsed_args.extra_vars
inventory_path=oooutils.get_tripleo_ansible_inventory( ),
parsed_args.static_inventory, inventory_path=oooutils.get_tripleo_ansible_inventory(
parsed_args.ssh_user, parsed_args.static_inventory,
parsed_args.stack, parsed_args.ssh_user,
return_inventory_file_path=True parsed_args.stack,
), return_inventory_file_path=True
tags=parsed_args.tags, ),
skip_tags=parsed_args.skip_tags, tags=parsed_args.tags,
limit_hosts=oooutils.playbook_limit_parse( skip_tags=parsed_args.skip_tags,
limit_nodes=parsed_args.limit limit_hosts=oooutils.playbook_limit_parse(
), limit_nodes=parsed_args.limit
forks=parsed_args.ansible_forks ),
) forks=parsed_args.ansible_forks
)
else:
working_dir = oooutils.get_default_working_dir(parsed_args.stack)
config_download_dir = os.path.join(working_dir, 'config-download')
ansible_dir = os.path.join(config_download_dir, parsed_args.stack)
inventory_path = os.path.join(ansible_dir,
'tripleo-ansible-inventory.yaml')
key = oooutils.get_key(parsed_args.stack)
playbooks = [os.path.join(ansible_dir, p)
for p in constants.EXTERNAL_UPDATE_PLAYBOOKS]
oooutils.run_ansible_playbook(
playbook=playbooks,
inventory=inventory_path,
workdir=config_download_dir,
tags=parsed_args.tags,
skip_tags=parsed_args.skip_tags,
limit_hosts=oooutils.playbook_limit_parse(
limit_nodes=parsed_args.limit
),
forks=parsed_args.ansible_forks,
key=key,
reproduce_command=True
)
deployment.snapshot_dir(ansible_dir)
self.log.info("Completed Overcloud External Update Run.") self.log.info("Completed Overcloud External Update Run.")

View File

@ -469,9 +469,19 @@ def config_download(log, clients, stack, ssh_network='ctlplane',
print_msg=(verbosity == 0) print_msg=(verbosity == 0)
) )
if os.path.exists(stack_work_dir): snapshot_dir(stack_work_dir)
def snapshot_dir(directory):
"""Git snapshot a directory
:params directory: Directory to snapshot
:type directory: string
:returns: None
"""
if os.path.exists(directory):
# Object to the git repository # Object to the git repository
repo = git.Repo(stack_work_dir) repo = git.Repo(directory)
# Configure git user.name and user.email # Configure git user.name and user.email
git_config_user = "mistral" git_config_user = "mistral"