Browse Source

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

changes/51/794951/1
Zuul 2 weeks ago
committed by Gerrit Code Review
parent
commit
db740318d3
3 changed files with 111 additions and 33 deletions
  1. +36
    -0
      tripleoclient/tests/v1/overcloud_external_update/test_overcloud_external_update.py
  2. +63
    -31
      tripleoclient/v1/overcloud_external_update.py
  3. +12
    -2
      tripleoclient/workflows/deployment.py

+ 36
- 0
tripleoclient/tests/v1/overcloud_external_update/test_overcloud_external_update.py View File

@ -13,7 +13,9 @@
# under the License.
#
import fixtures
import mock
import os
from tripleoclient.tests import fakes as ooofakes
from tripleoclient.tests.v1.overcloud_external_update import fakes
@ -89,3 +91,37 @@ class TestOvercloudExternalUpdateRun(fakes.TestOvercloudExternalUpdateRun):
]
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()

+ 63
- 31
tripleoclient/v1/overcloud_external_update.py View File

@ -13,6 +13,8 @@
# under the License.
#
import os
from oslo_config import cfg
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'
' config-download ansible-playbook command.')
)
parser.add_argument(
'--refresh',
action='store_true',
help=_('Refresh the config-download playbooks')
)
return parser
@ -128,35 +135,60 @@ class ExternalUpdateRun(command.Command):
constants.UPDATE_PROMPT, self.log)):
raise OvercloudUpdateNotConfirmed(constants.UPDATE_NO)
_, ansible_dir = self.get_ansible_key_and_dir(
no_workflow=True,
stack=parsed_args.stack,
orchestration=self.app.client_manager.orchestration
)
deployment.config_download(
log=self.log,
clients=self.app.client_manager,
stack=oooutils.get_stack(
self.app.client_manager.orchestration,
parsed_args.stack
),
output_dir=ansible_dir,
verbosity=oooutils.playbook_verbosity(self=self),
ansible_playbook_name=constants.EXTERNAL_UPDATE_PLAYBOOKS,
extra_vars=oooutils.parse_extra_vars(
extra_var_strings=parsed_args.extra_vars
),
inventory_path=oooutils.get_tripleo_ansible_inventory(
parsed_args.static_inventory,
parsed_args.ssh_user,
parsed_args.stack,
return_inventory_file_path=True
),
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
)
if parsed_args.refresh:
_, ansible_dir = self.get_ansible_key_and_dir(
no_workflow=True,
stack=parsed_args.stack,
orchestration=self.app.client_manager.orchestration
)
deployment.config_download(
log=self.log,
clients=self.app.client_manager,
stack=oooutils.get_stack(
self.app.client_manager.orchestration,
parsed_args.stack
),
output_dir=ansible_dir,
verbosity=oooutils.playbook_verbosity(self=self),
ansible_playbook_name=constants.EXTERNAL_UPDATE_PLAYBOOKS,
extra_vars=oooutils.parse_extra_vars(
extra_var_strings=parsed_args.extra_vars
),
inventory_path=oooutils.get_tripleo_ansible_inventory(
parsed_args.static_inventory,
parsed_args.ssh_user,
parsed_args.stack,
return_inventory_file_path=True
),
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
)
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.")

+ 12
- 2
tripleoclient/workflows/deployment.py View File

@ -469,9 +469,19 @@ def config_download(log, clients, stack, ssh_network='ctlplane',
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
repo = git.Repo(stack_work_dir)
repo = git.Repo(directory)
# Configure git user.name and user.email
git_config_user = "mistral"


Loading…
Cancel
Save