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.
18 from lcm.ns.const import OWNER_TYPE
19 from lcm.pub.database.models import NSInstModel, NfInstModel, VLInstModel, CPInstModel, VNFFGInstModel
21 logger = logging.getLogger(__name__)
24 class GetNSInfoService(object):
25 def __init__(self, nsfilter=None):
26 self.ns_filter=nsfilter
28 def get_ns_info(self):
30 if ("ns_inst_id" in self.ns_filter):
31 ns_inst_id = self.ns_filter["ns_inst_id"]
32 ns_inst_infos = NSInstModel.objects.filter(id=ns_inst_id)
33 if ("csarId" in self.ns_filter):
34 csar_id = self.ns_filter["csarId"]
35 ns_inst_infos = NSInstModel.objects.filter(nsd_id=csar_id)
37 ns_inst_infos = NSInstModel.objects.all()
40 for info in ns_inst_infos:
41 ret = self.get_single_ns_info(info.id)
44 ns_info_list.append(ret)
47 def get_single_ns_info(self, ns_inst_id):
48 ns_insts = NSInstModel.objects.filter(id=ns_inst_id)
51 ns_inst_info = ns_insts[0]
53 'nsInstanceId': ns_inst_info.id,
54 'nsName': ns_inst_info.name,
55 'description': ns_inst_info.description,
56 'nsdId': ns_inst_info.nsd_id,
57 'vnfInfoId': self.get_vnf_infos(ns_inst_id),
58 'vlInfo': self.get_vl_infos(ns_inst_id),
59 'vnffgInfo': self.get_vnffg_infos(ns_inst_id, ns_inst_info.nsd_model),
60 'nsState': ns_inst_info.status}
64 def get_vnf_infos(ns_inst_id):
65 ns_inst_infos = NfInstModel.objects.filter(ns_inst_id=ns_inst_id)
67 for info in ns_inst_infos:
69 'vnfInstanceId': info.nfinstid,
70 'vnfInstanceName': info.nf_name,
71 'vnfProfileId': info.vnf_id}
72 vnf_info_list.append(vnf_info)
75 def get_vl_infos(self, ns_inst_id):
76 vl_inst_infos = VLInstModel.objects.filter(ownertype=OWNER_TYPE.NS, ownerid=ns_inst_id)
78 for info in vl_inst_infos:
80 'vlInstanceId': info.vlinstanceid,
81 'vlInstanceName': info.vlinstancename,
83 'relatedCpInstanceId': self.get_cp_infos(info.vlinstanceid)}
84 vl_info_list.append(vl_info)
88 def get_cp_infos(vl_inst_id):
89 cp_inst_infos = CPInstModel.objects.filter(relatedvl__icontains=vl_inst_id)
91 for info in cp_inst_infos:
93 'cpInstanceId': info.cpinstanceid,
94 'cpInstanceName': info.cpname,
96 cp_info_list.append(cp_info)
99 def get_vnffg_infos(self, ns_inst_id, nsd_model):
100 vnffg_inst_infos = VNFFGInstModel.objects.filter(nsinstid=ns_inst_id)
102 for info in vnffg_inst_infos:
104 'vnffgInstanceId': info.vnffginstid,
105 'vnfId': self.convert_string_to_list(info.vnflist),
106 'pnfId': self.get_pnf_infos(nsd_model),
107 'virtualLinkId': self.convert_string_to_list(info.vllist),
108 'cpId': self.convert_string_to_list(info.cplist),
109 'nfp': self.convert_string_to_list(info.fplist)}
110 vnffg_info_list.append(vnffg_info)
111 return vnffg_info_list
114 def get_pnf_infos(nsd_model):
115 context = json.loads(nsd_model)
116 pnfs = context['pnfs']
119 pnf_list.append(pnf['pnf_id'])
123 def convert_string_to_list(detail_id_string):
124 if not detail_id_string:
126 return detail_id_string.split(',')