Merge "Add network unprovision to overcloud delete"

This commit is contained in:
Zuul 2021-08-30 17:26:14 +00:00 committed by Gerrit Code Review
commit ef97e3c349
3 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,5 @@
features:
- |
Added options for "overcloud delete" command to unprovision
networks provisioned with "overcloud deploy" or with
"overcloud network provision".

View File

@ -92,6 +92,38 @@ class TestDeleteOvercloud(deploy_fakes.TestDeployOvercloud):
)
self.assertEqual(mock_run_playbook.call_count, 2)
@mock.patch('tripleoclient.utils.TempDirs', autospect=True)
@mock.patch('os.path.abspath', autospect=True)
@mock.patch('os.path.exists', autospect=True)
@mock.patch('tripleoclient.utils.run_ansible_playbook', autospec=True)
def test_overcloud_delete_network_unprovision(self, mock_run_playbook,
mock_path_exists,
mock_abspath, mock_tempdirs):
arglist = ["overcast", "-y",
"--networks-file", "network_data_v2.yaml"]
verifylist = [
("stack", "overcast"),
("yes", True),
("networks_file", "network_data_v2.yaml")
]
mock_abspath.side_effect = ['/test/network_data_v2.yaml',
'/test/network_data_v2.yaml']
mock_path_exists.side_effect = [True]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
mock_run_playbook.assert_called_with(
workdir=mock.ANY,
playbook='cli-overcloud-network-unprovision.yaml',
inventory=mock.ANY,
playbook_dir=mock.ANY,
verbosity=3,
extra_vars={
"network_data_path": '/test/network_data_v2.yaml'
}
)
self.assertEqual(mock_run_playbook.call_count, 2)
def test_no_confirmation(self):
arglist = ["overcast", ]
verifylist = [

View File

@ -14,6 +14,7 @@
#
import logging
import os
import yaml
from osc_lib import exceptions as oscexc
@ -56,6 +57,11 @@ class DeleteOvercloud(command.Command):
metavar='<baremetal_deployment.yaml>',
help=_('Configuration file describing the '
'baremetal deployment'))
parser.add_argument('--networks-file',
metavar='<network_data.yaml>',
help=_('Configuration file describing the '
'network deployment to enable '
'unprovisioning of networks.'))
parser.add_argument('--network-ports',
help=_('Enable unprovisioning of network ports'),
default=False,
@ -65,6 +71,12 @@ class DeleteOvercloud(command.Command):
def _validate_args(self, parsed_args):
if parsed_args.stack in (None, ''):
raise oscexc.CommandError("You must specify a stack name")
if parsed_args.networks_file:
networks_file_path = os.path.abspath(parsed_args.networks_file)
if not os.path.exists(networks_file_path):
raise oscexc.CommandError(
"Network configuration file does not exist:"
" {args}".format(args=parsed_args.networks_file))
def take_action(self, parsed_args):
self.log.debug("take_action({args})".format(args=parsed_args))
@ -117,4 +129,19 @@ class DeleteOvercloud(command.Command):
"manage_network_ports": parsed_args.network_ports,
}
)
if parsed_args.networks_file:
networks_file_path = os.path.abspath(parsed_args.networks_file)
with utils.TempDirs() as tmp:
utils.run_ansible_playbook(
playbook='cli-overcloud-network-unprovision.yaml',
inventory='localhost,',
workdir=tmp,
playbook_dir=constants.ANSIBLE_TRIPLEO_PLAYBOOKS,
verbosity=utils.playbook_verbosity(self=self),
extra_vars={
"network_data_path": networks_file_path
}
)
print("Success.")