Adds support force delete VNFFG

This patch adds '--force' parameter to vnffg delete command,
to force delete VNFFG.

e.g: openstack vnf graph delete --force VNFFG1

blueprint force-delete-resources

Change-Id: I642ddcdb7a1167f25553ef26df6102bb2be22c3f
This commit is contained in:
Nguyen Hai 2019-02-14 19:12:48 +09:00 committed by Yasufumi Ogawa
parent 124be387dc
commit 785c6dbfda
4 changed files with 39 additions and 4 deletions

View File

@ -190,18 +190,32 @@ class DeleteVNFFG(command.Command):
nargs="+", nargs="+",
help=_("VNFFG(s) to delete (name or ID)") help=_("VNFFG(s) to delete (name or ID)")
) )
parser.add_argument(
'--force',
default=False,
action='store_true',
help=_('Force delete VNFFG'))
return parser return parser
def args2body(self, parsed_args):
body = dict()
if parsed_args.force:
body[_VNFFG] = dict()
body[_VNFFG]['attributes'] = dict()
body[_VNFFG]['attributes']['force'] = True
return body
def take_action(self, parsed_args): def take_action(self, parsed_args):
client = self.app.client_manager.tackerclient client = self.app.client_manager.tackerclient
failure = False failure = False
deleted_ids = [] deleted_ids = []
failed_items = {} failed_items = {}
body = self.args2body(parsed_args)
for resource_id in parsed_args.vnffg: for resource_id in parsed_args.vnffg:
try: try:
obj = tackerV10.find_resourceid_by_name_or_id( obj = tackerV10.find_resourceid_by_name_or_id(
client, _VNFFG, resource_id) client, _VNFFG, resource_id)
client.delete_vnffg(obj) client.delete_vnffg(obj, body)
deleted_ids.append(resource_id) deleted_ids.append(resource_id)
except Exception as e: except Exception as e:
failure = True failure = True

View File

@ -232,3 +232,18 @@ class DeleteVNFFG(tackerV10.DeleteCommand):
"""Delete a given VNFFG.""" """Delete a given VNFFG."""
resource = _VNFFG resource = _VNFFG
remove_output_fields = ["attributes"]
def add_known_arguments(self, parser):
parser.add_argument(
'--force',
default=False,
action='store_true',
help=_('Force delete VNFFG'))
def args2body(self, parsed_args):
body = dict()
if parsed_args.force:
body[self.resource] = dict()
body[self.resource]['attributes'] = {'force': True}
return body

View File

@ -113,8 +113,14 @@ class CLITestV10VmVNFFGJSON(test_cli10.CLITestV10Base):
args, extra_fields, args, extra_fields,
get_client_called_count=2) get_client_called_count=2)
def test_delete_vnffg(self): def test_delete_vnffg_without_force(self):
cmd = vnffg.DeleteVNFFG(test_cli10.MyApp(sys.stdout), None) cmd = vnffg.DeleteVNFFG(test_cli10.MyApp(sys.stdout), None)
my_id = 'my-id' my_id = 'my-id'
args = [my_id] args = [my_id]
self._test_delete_resource(self._RESOURCE, cmd, my_id, args) self._test_delete_resource(self._RESOURCE, cmd, my_id, args)
def test_delete_vnffg_with_force(self):
cmd = vnffg.DeleteVNFFG(test_cli10.MyApp(sys.stdout), None)
my_id = 'my-id'
args = [my_id, '--force']
self._test_delete_resource(self._RESOURCE, cmd, my_id, args)

View File

@ -626,8 +626,8 @@ class LegacyClient(ClientBase):
return self.post(self.vnffgs_path, body=body) return self.post(self.vnffgs_path, body=body)
@APIParamsCall @APIParamsCall
def delete_vnffg(self, vnffg): def delete_vnffg(self, vnffg, body=None):
return self.delete(self.vnffg_path % vnffg) return self.delete(self.vnffg_path % vnffg, body=body)
@APIParamsCall @APIParamsCall
def update_vnffg(self, vnffg, body): def update_vnffg(self, vnffg, body):