From 785c6dbfda23f94b9a5ac00209f30a6071244f99 Mon Sep 17 00:00:00 2001 From: Nguyen Hai Date: Thu, 14 Feb 2019 19:12:48 +0900 Subject: [PATCH] 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 --- tackerclient/osc/v1/nfvo/vnffg.py | 16 +++++++++++++++- tackerclient/tacker/v1_0/nfvo/vnffg.py | 15 +++++++++++++++ tackerclient/tests/unit/vm/test_cli10_vnffg.py | 8 +++++++- tackerclient/v1_0/client.py | 4 ++-- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/tackerclient/osc/v1/nfvo/vnffg.py b/tackerclient/osc/v1/nfvo/vnffg.py index c54431c9..576661ed 100644 --- a/tackerclient/osc/v1/nfvo/vnffg.py +++ b/tackerclient/osc/v1/nfvo/vnffg.py @@ -190,18 +190,32 @@ class DeleteVNFFG(command.Command): nargs="+", help=_("VNFFG(s) to delete (name or ID)") ) + parser.add_argument( + '--force', + default=False, + action='store_true', + help=_('Force delete VNFFG')) 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): client = self.app.client_manager.tackerclient failure = False deleted_ids = [] failed_items = {} + body = self.args2body(parsed_args) for resource_id in parsed_args.vnffg: try: obj = tackerV10.find_resourceid_by_name_or_id( client, _VNFFG, resource_id) - client.delete_vnffg(obj) + client.delete_vnffg(obj, body) deleted_ids.append(resource_id) except Exception as e: failure = True diff --git a/tackerclient/tacker/v1_0/nfvo/vnffg.py b/tackerclient/tacker/v1_0/nfvo/vnffg.py index efbe2a58..4b4538a7 100644 --- a/tackerclient/tacker/v1_0/nfvo/vnffg.py +++ b/tackerclient/tacker/v1_0/nfvo/vnffg.py @@ -232,3 +232,18 @@ class DeleteVNFFG(tackerV10.DeleteCommand): """Delete a given 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 diff --git a/tackerclient/tests/unit/vm/test_cli10_vnffg.py b/tackerclient/tests/unit/vm/test_cli10_vnffg.py index 6c5c7b39..12304c7f 100644 --- a/tackerclient/tests/unit/vm/test_cli10_vnffg.py +++ b/tackerclient/tests/unit/vm/test_cli10_vnffg.py @@ -113,8 +113,14 @@ class CLITestV10VmVNFFGJSON(test_cli10.CLITestV10Base): args, extra_fields, 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) my_id = 'my-id' args = [my_id] 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) diff --git a/tackerclient/v1_0/client.py b/tackerclient/v1_0/client.py index c54b2679..b70a4199 100644 --- a/tackerclient/v1_0/client.py +++ b/tackerclient/v1_0/client.py @@ -626,8 +626,8 @@ class LegacyClient(ClientBase): return self.post(self.vnffgs_path, body=body) @APIParamsCall - def delete_vnffg(self, vnffg): - return self.delete(self.vnffg_path % vnffg) + def delete_vnffg(self, vnffg, body=None): + return self.delete(self.vnffg_path % vnffg, body=body) @APIParamsCall def update_vnffg(self, vnffg, body):