from lcm.pub.database.models import NSInstModel, VLInstModel, FPInstModel, NfInstModel
 from lcm.pub.exceptions import NSLCMException
 from lcm.pub.msapi.nslcm import call_from_ns_cancel_resource
+from lcm.pub.msapi import sdc_run_catalog
 from lcm.pub.utils.jobutil import JobUtil
 from lcm.pub.utils.values import ignore_case_get
 from lcm.pub.utils import restcall
             self.cancel_vl_list()
             self.cancel_pnf_list()
 
+            self.modify_package_state()
             NSInstModel.objects.filter(id=self.ns_inst_id).update(status='NOT_INSTANTIATED')
             JobUtil.add_job_status(self.job_id, JOB_PROGRESS.FINISHED, "ns terminate ends.", '')
             NsLcmOpOcc.update(self.occ_id, "COMPLETED")
             NsLcmOpOcc.update(self.occ_id, operationState="FAILED", error=e.args[0])
             build_in.post_deal(self.ns_inst_id, "false")
 
+    def modify_package_state(self):
+        ns_inst = NSInstModel.objects.filter(id=self.ns_inst_id)
+        ns_insts = NSInstModel.objects.filter(nspackage_id=ns_inst[0].nspackage_id)
+        if len(ns_insts) == 1:
+            sdc_run_catalog.modify_nsd_state(ns_inst[0].nspackage_id, 0)
+
     def cancel_vl_list(self):
         array_vlinst = VLInstModel.objects.filter(ownertype=OWNER_TYPE.NS, ownerid=self.ns_inst_id)
         if not array_vlinst:
 
                                                                            "status": JOB_MODEL_STATUS.PROCESSING,
                                                                            "responseid": "2",
                                                                            "statusdescription": "creating",
-                                                                           "errorcode": "0"}]}}), '200']}
+                                                                           "errorcode": "0"}]}}), '200'],
+            "/api/catalog/v1/ns_descriptors/None":
+                [0, json.JSONEncoder().encode({}), '202'],
+        }
 
         def side_effect(*args):
             return mock_vals[args[4]]
 
     return json.JSONDecoder().decode(ret[1])
 
 
-def modify_nsd_state(csar_id):
-    req_param = json.JSONEncoder().encode({"usageState": 1})
+def modify_nsd_state(csar_id, usage_state=1):
+    req_param = json.JSONEncoder().encode({"usageState": usage_state})
     ret = req_by_msb("/api/catalog/v1/ns_descriptors/%s" % csar_id, "PUT", req_param)
     if ret[0] != 0:
         logger.error("Status code is %s, detail is %s.", ret[2], ret[1])