030e42c100a78729ebaffa8177e3f36f607cb50a
[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
17 from lcm.ns.const import OWNER_TYPE
18 from lcm.pub.database.models import NSInstModel, NfInstModel, VLInstModel, CPInstModel, VNFFGInstModel
19
20 logger = logging.getLogger(__name__)
21
22
23 class GetNSInfoService(object):
24     def __init__(self, nsfilter=None):
25         self.ns_filter = nsfilter
26
27     def get_ns_info(self):
28         if self.ns_filter:
29             if ("ns_inst_id" in self.ns_filter):
30                 ns_inst_id = self.ns_filter["ns_inst_id"]
31                 ns_inst_infos = NSInstModel.objects.filter(id=ns_inst_id)
32             if ("csarId" in self.ns_filter):
33                 csar_id = self.ns_filter["csarId"]
34                 ns_inst_infos = NSInstModel.objects.filter(nsd_id=csar_id)
35         else:
36             ns_inst_infos = NSInstModel.objects.all()
37
38         ns_info_list = []
39         for info in ns_inst_infos:
40             ret = self.get_single_ns_info(info.id)
41             if not ret:
42                 continue
43             ns_info_list.append(ret)
44         return ns_info_list
45
46     def get_single_ns_info(self, ns_inst_id):
47         ns_insts = NSInstModel.objects.filter(id=ns_inst_id)
48         if not ns_insts:
49             return None
50         ns_inst_info = ns_insts[0]
51         ret = {
52             'nsInstanceId': ns_inst_info.id,
53             'nsName': ns_inst_info.name,
54             'description': ns_inst_info.description,
55             'nsdId': ns_inst_info.nsd_id,
56             'vnfInfoId': self.get_vnf_infos(ns_inst_id),
57             'vlInfo': self.get_vl_infos(ns_inst_id),
58             'vnffgInfo': self.get_vnffg_infos(ns_inst_id, ns_inst_info.nsd_model),
59             'nsState': ns_inst_info.status}
60         return ret
61
62     @staticmethod
63     def get_vnf_infos(ns_inst_id):
64         ns_inst_infos = NfInstModel.objects.filter(ns_inst_id=ns_inst_id)
65         vnf_info_list = []
66         for info in ns_inst_infos:
67             vnf_info = {
68                 'vnfInstanceId': info.nfinstid,
69                 'vnfInstanceName': info.nf_name,
70                 'vnfProfileId': info.vnf_id}
71             vnf_info_list.append(vnf_info)
72         return vnf_info_list
73
74     def get_vl_infos(self, ns_inst_id):
75         vl_inst_infos = VLInstModel.objects.filter(ownertype=OWNER_TYPE.NS, ownerid=ns_inst_id)
76         vl_info_list = []
77         for info in vl_inst_infos:
78             vl_info = {
79                 'vlInstanceId': info.vlinstanceid,
80                 'vlInstanceName': info.vlinstancename,
81                 'vldId': info.vldid,
82                 'relatedCpInstanceId': self.get_cp_infos(info.vlinstanceid)}
83             vl_info_list.append(vl_info)
84         return vl_info_list
85
86     @staticmethod
87     def get_cp_infos(vl_inst_id):
88         cp_inst_infos = CPInstModel.objects.filter(relatedvl__icontains=vl_inst_id)
89         cp_info_list = []
90         for info in cp_inst_infos:
91             cp_info = {
92                 'cpInstanceId': info.cpinstanceid,
93                 'cpInstanceName': info.cpname,
94                 'cpdId': info.cpdid}
95             cp_info_list.append(cp_info)
96         return cp_info_list
97
98     def get_vnffg_infos(self, ns_inst_id, nsd_model):
99         vnffg_inst_infos = VNFFGInstModel.objects.filter(nsinstid=ns_inst_id)
100         vnffg_info_list = []
101         for info in vnffg_inst_infos:
102             vnffg_info = {
103                 'vnffgInstanceId': info.vnffginstid,
104                 'vnfId': self.convert_string_to_list(info.vnflist),
105                 'pnfId': self.get_pnf_infos(nsd_model),
106                 'virtualLinkId': self.convert_string_to_list(info.vllist),
107                 'cpId': self.convert_string_to_list(info.cplist),
108                 'nfp': self.convert_string_to_list(info.fplist)}
109             vnffg_info_list.append(vnffg_info)
110         return vnffg_info_list
111
112     @staticmethod
113     def get_pnf_infos(nsd_model):
114         context = json.loads(nsd_model)
115         pnfs = context['pnfs']
116         pnf_list = []
117         for pnf in pnfs:
118             pnf_list.append(pnf['pnf_id'])
119         return pnf_list
120
121     @staticmethod
122     def convert_string_to_list(detail_id_string):
123         if not detail_id_string:
124             return None
125         return detail_id_string.split(',')