From 1e280fb1fe68de4c50d88d1a4e66d31b4141308b Mon Sep 17 00:00:00 2001
From: dharmendra <dharmendra.kushwaha@india.nec.com>
Date: Fri, 21 Dec 2018 09:01:45 +0000
Subject: [PATCH] Adds support force delete for NS.

This patch adds '--force' parameter to NS delete command, to delete NS
forcefully.

blueprint force-delete-resources

Change-Id: I7d8eb7ae63f9e43da37701e3e8312e650ea5bd3c
---
 tackerclient/osc/v1/nfvo/ns.py      | 16 +++++++++++++++-
 tackerclient/tacker/v1_0/nfvo/ns.py | 14 ++++++++++++++
 tackerclient/v1_0/client.py         |  4 ++--
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/tackerclient/osc/v1/nfvo/ns.py b/tackerclient/osc/v1/nfvo/ns.py
index 8440aa49..f58d1e33 100644
--- a/tackerclient/osc/v1/nfvo/ns.py
+++ b/tackerclient/osc/v1/nfvo/ns.py
@@ -156,18 +156,32 @@ class DeleteNS(command.Command):
             nargs="+",
             help=_("NS(s) to delete (name or ID)")
         )
+        parser.add_argument(
+            '--force',
+            default=False,
+            action='store_true',
+            help=_('Force delete Network Service')
+        )
         return parser
 
+    def args2body(self, parsed_args):
+        if parsed_args.force:
+            body = {_NS: {'attributes': {'force': True}}}
+        else:
+            body = dict()
+        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.ns:
             try:
                 obj = tackerV10.find_resourceid_by_name_or_id(
                     client, _NS, resource_id)
-                client.delete_ns(obj)
+                client.delete_ns(obj, body)
                 deleted_ids.append(resource_id)
             except Exception as e:
                 failure = True
diff --git a/tackerclient/tacker/v1_0/nfvo/ns.py b/tackerclient/tacker/v1_0/nfvo/ns.py
index bed10331..6b167ffc 100644
--- a/tackerclient/tacker/v1_0/nfvo/ns.py
+++ b/tackerclient/tacker/v1_0/nfvo/ns.py
@@ -123,3 +123,17 @@ class DeleteNS(tackerV10.DeleteCommand):
 
     resource = _NS
     deleted_msg = {'ns': 'delete initiated'}
+
+    def add_known_arguments(self, parser):
+        parser.add_argument(
+            '--force',
+            default=False,
+            action='store_true',
+            help=_('Force delete Network Service'))
+
+    def args2body(self, parsed_args):
+        if parsed_args.force:
+            body = {self.resource: {'attributes': {'force': True}}}
+        else:
+            body = dict()
+        return body
diff --git a/tackerclient/v1_0/client.py b/tackerclient/v1_0/client.py
index b8cc57fe..fbf13720 100644
--- a/tackerclient/v1_0/client.py
+++ b/tackerclient/v1_0/client.py
@@ -665,8 +665,8 @@ class Client(ClientBase):
         return self.post(self.nss_path, body=body)
 
     @APIParamsCall
-    def delete_ns(self, ns):
-        return self.delete(self.ns_path % ns)
+    def delete_ns(self, ns, body=None):
+        return self.delete(self.ns_path % ns, body=body)
 
     @APIParamsCall
     def create_cluster(self, body=None):