1 # Copyright 2016 ZTE Corporation.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
20 from lcm.pub.database.models import NSDModel, NSInstModel
21 from lcm.pub.utils.values import ignore_case_get
22 from lcm.pub.msapi.catalog import query_csar_from_catalog, set_csar_state
23 from lcm.pub.msapi.catalog import delete_csar_from_catalog
24 from lcm.pub.exceptions import NSLCMException
26 logger = logging.getLogger(__name__)
28 STATUS_SUCCESS, STATUS_FAILED = "success", "failed"
31 def fmt_ns_pkg_rsp(status, desc, error_code="500"):
32 return [0, {"status": status, "statusDescription": desc, "errorCode": error_code}]
35 def ns_common_call(fun, csar_id, operation=""):
41 ret = fun(csar_id, operation)
44 return fmt_ns_pkg_rsp(STATUS_FAILED, ret[1])
45 except NSLCMException as e:
46 return fmt_ns_pkg_rsp(STATUS_FAILED, e.message)
48 logger.error(traceback.format_exc())
49 return fmt_ns_pkg_rsp(STATUS_FAILED, str(sys.exc_info()))
50 return fmt_ns_pkg_rsp(STATUS_SUCCESS, ret[1], "")
53 def ns_delete_pending_csar(csar_id):
54 return ns_common_call(NsPackage().delete_pending_csar, csar_id)
57 def ns_set_state_csar(csar_id, operation):
58 return ns_common_call(NsPackage().set_state_csar, csar_id, operation)
61 ###############################################################################################################
64 class NsPackage(object):
66 Actions for ns package.
72 def delete_csar(self, csar_id):
73 if not NSDModel.objects.filter(id=csar_id):
74 return delete_csar_from_catalog(csar_id)
76 if NSInstModel.objects.filter(nspackage_id=csar_id):
77 return set_csar_state(csar_id, "deletionPending", True)
79 ret = delete_csar_from_catalog(csar_id)
81 NSDModel.objects.filter(id=csar_id).delete()
84 def delete_pending_csar(self, csar_id):
85 if not NSDModel.objects.filter(id=csar_id):
86 return [0, "Delete pending CSAR(%s) successfully." % csar_id]
88 pending = query_csar_from_catalog(csar_id, "deletionPending")
90 if pending.lower() == "false":
91 return [1, "CSAR(%s) need not to be deleted." % csar_id]
93 if NSInstModel.objects.filter(nspackage_id=csar_id):
94 return [1, "CSAR(%s) is in using, cannot be deleted." % csar_id]
96 ret = delete_csar_from_catalog(csar_id)
98 NSDModel.objects.filter(id=csar_id).delete()
101 def set_state_csar(self, csar_id, operation):
102 if not NSDModel.objects.filter(id=csar_id):
103 raise NSLCMException("CSAR(%s) does not exist." % csar_id)
105 csar = query_csar_from_catalog(csar_id)
106 if ignore_case_get(csar, "operationalState") == operation.capitalize():
107 raise NSLCMException("CSAR(%s) already %s." % (csar_id, operation))
108 return set_csar_state(csar_id, 'operationState', operation.capitalize())