Merge "Ephemeral Heat: Add a --refresh option to external update run" into stable/wallaby
This commit is contained in:
commit
db740318d3
|
@ -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()
|
||||||
|
|
|
@ -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.")
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue