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):