add VFC NS query via CSARID
[vfc/nfvo/lcm.git] / lcm / ns / ns_get.py
1 # Copyright 2016 ZTE Corporation.
2 #
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
6 #
7 #         http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14 import json
15 import logging
16 import traceback
17
18 from lcm.ns.const import OWNER_TYPE
19 from lcm.pub.database.models import NSInstModel, NfInstModel, VLInstModel, CPInstModel, VNFFGInstModel
20
21 logger = logging.getLogger(__name__)
22
23
24 class GetNSInfoService(object):
25     def __init__(self, nsfilter=None):
26         self.ns_filter=nsfilter
27
28     def get_ns_info(self):
29         if self.ns_filter:
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)
36         else:
37             ns_inst_infos = NSInstModel.objects.all()
38
39         ns_info_list = []
40         for info in ns_inst_infos:
41             ret = self.get_single_ns_info(info.id)
42             if not ret:
43                 continue
44             ns_info_list.append(ret)
45         return ns_info_list
46
47     def get_single_ns_info(self, ns_inst_id):
48         ns_insts = NSInstModel.objects.filter(id=ns_inst_id)
49         if not ns_insts:
50             return None
51         ns_inst_info = ns_insts[0]
52         ret = {
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}
61         return ret
62
63     @staticmethod
64     def get_vnf_infos(ns_inst_id):
65         ns_inst_infos = NfInstModel.objects.filter(ns_inst_id=ns_inst_id)
66         vnf_info_list = []
67         for info in ns_inst_infos:
68             vnf_info = {
69                 'vnfInstanceId': info.nfinstid,
70                 'vnfInstanceName': info.nf_name,
71                 'vnfProfileId': info.vnf_id}
72             vnf_info_list.append(vnf_info)
73         return vnf_info_list
74
75     def get_vl_infos(self, ns_inst_id):
76         vl_inst_infos = VLInstModel.objects.filter(ownertype=OWNER_TYPE.NS, ownerid=ns_inst_id)
77         vl_info_list = []
78         for info in vl_inst_infos:
79             vl_info = {
80                 'vlInstanceId': info.vlinstanceid,
81                 'vlInstanceName': info.vlinstancename,
82                 'vldId': info.vldid,
83                 'relatedCpInstanceId': self.get_cp_infos(info.vlinstanceid)}
84             vl_info_list.append(vl_info)
85         return vl_info_list
86
87     @staticmethod
88     def get_cp_infos(vl_inst_id):
89         cp_inst_infos = CPInstModel.objects.filter(relatedvl__icontains=vl_inst_id)
90         cp_info_list = []
91         for info in cp_inst_infos:
92             cp_info = {
93                 'cpInstanceId': info.cpinstanceid,
94                 'cpInstanceName': info.cpname,
95                 'cpdId': info.cpdid}
96             cp_info_list.append(cp_info)
97         return cp_info_list
98
99     def get_vnffg_infos(self, ns_inst_id, nsd_model):
100         vnffg_inst_infos = VNFFGInstModel.objects.filter(nsinstid=ns_inst_id)
101         vnffg_info_list = []
102         for info in vnffg_inst_infos:
103             vnffg_info = {
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
112
113     @staticmethod
114     def get_pnf_infos(nsd_model):
115         context = json.loads(nsd_model)
116         pnfs = context['pnfs']
117         pnf_list = []
118         for pnf in pnfs:
119             pnf_list.append(pnf['pnf_id'])
120         return pnf_list
121
122     @staticmethod
123     def convert_string_to_list(detail_id_string):
124         if not detail_id_string:
125             return None
126         return detail_id_string.split(',')