Fix vfc-vnflcm unittests
[vfc/gvnfm/vnflcm.git] / lcm / lcm / nf / vnfs / vnf_query / query_vnf.py
1 # Copyright 2017 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
15 import logging
16
17 from lcm.pub.database.models import NfInstModel, StorageInstModel, VLInstModel, NetworkInstModel, VNFCInstModel, \
18     VmInstModel
19 from lcm.pub.exceptions import NFLCMException
20
21 logger = logging.getLogger(__name__)
22
23
24 class QueryVnf:
25     def __init__(self, data, instanceid=''):
26         self.vnf_inst_id = instanceid
27         self.data = data
28
29     def query_single_vnf(self):
30         vnf_inst = NfInstModel.objects.filter(nfinstid=self.vnf_inst_id)
31         if not vnf_inst.exists():
32             raise NFLCMException('VnfInst(%s) does not exist' % self.vnf_inst_id)
33         resp_data = self.fill_resp_data(vnf_inst[0])
34         return resp_data
35
36     def query_multi_vnf(self):
37         vnf_insts = NfInstModel.objects.all()
38         if not vnf_insts:
39             raise NFLCMException('VnfInsts does not exist')
40         resp_data = []
41         for vnf_inst in vnf_insts:
42             resp_data.append(self.fill_resp_data(vnf_inst))
43         return resp_data
44
45     def fill_resp_data(self, vnf):
46         logger.info('Get the list of vloumes')
47         storage_inst = StorageInstModel.objects.filter(instid=vnf.nfinstid)
48         arr = []
49         for s in storage_inst:
50             storage = {
51                 "virtualStorageInstanceId": s.storageid,
52                 "storageResource": {
53                     "vimId": s.vimid,
54                     "resourceId": s.resouceid
55                 }
56             }
57             arr.append(storage)
58         logger.info('Get the VLInstModel of list.')
59         vl_inst = VLInstModel.objects.filter(ownerid=vnf.nfinstid)
60         vl_arr = []
61         for v in vl_inst:
62             net = NetworkInstModel.objects.filter(networkid=v.relatednetworkid)
63             if not net:
64                 raise NFLCMException('NetworkInst(%s) does not exist.' % v.relatednetworkid)
65             v_dic = {
66                 "virtualLinkInstanceId": v.vlinstanceid,
67                 "virtualLinkDescId": v.vldid,
68                 "networkResource": {
69                     "vimId": net[0].vimid,
70                     "resourceId": net[0].resouceid
71                 }
72             }
73             vl_arr.append(v_dic)
74         logger.info('Get VNFCInstModel of list.')
75         vnfc_insts = VNFCInstModel.objects.filter(instid=vnf.nfinstid)
76         vnfc_arr = []
77         for vnfc in vnfc_insts:
78             vm = VmInstModel.objects.filter(vmid=vnfc.vmid)
79             if not vm:
80                 raise NFLCMException('VmInst(%s) does not exist.' % vnfc.vmid)
81             storage = StorageInstModel.objects.filter(ownerid=vm[0].vmid)
82             if not storage:
83                 raise NFLCMException('StorageInst(%s) does not exist.' % vm[0].vmid)
84             vnfc_dic = {
85                 "vnfcInstanceId": vnfc.vnfcinstanceid,
86                 "vduId": vnfc.vduid,
87                 "computeResource": {
88                     "vimId": vm[0].vimid,
89                     "resourceId": vm[0].resouceid
90                 },
91                 "storageResourceIds": [s.storageid for s in storage]
92             }
93             vnfc_arr.append(vnfc_dic)
94         logger.info('Get the VimInstModel of list.')
95         vms = VmInstModel.objects.filter(instid=vnf.nfinstid)
96         vm_arr = []
97         for vm in vms:
98             vm_dic = {
99                 "vmid": vm.vmid,
100                 "vimid": vm.vimid,
101                 "tenant": vm.tenant,
102                 "resouceid": vm.resouceid,
103                 "vmname": vm.vmname,
104                 "nic_array": vm.nic_array,
105                 "metadata": vm.metadata,
106                 "volume_array": vm.volume_array,
107                 "server_group": vm.server_group,
108                 "availability_zone": vm.availability_zone,
109                 "flavor_id": vm.flavor_id,
110                 "security_groups": vm.security_groups,
111                 "operationalstate": vm.operationalstate,
112                 "insttype": vm.insttype,
113                 "is_predefined": vm.is_predefined,
114                 "create_time": vm.create_time,
115                 "instid": vm.instid,
116                 "nodeId": vm.nodeId
117             }
118             vm_arr.append(vm_dic)
119
120         resp_data = {
121             "vnfInstanceId": vnf.nfinstid,
122             "vnfInstanceName": vnf.nf_name,
123             "onboardedVnfPkgInfoId": vnf.package_id,
124             "vnfdVersion": vnf.version,
125             "vnfProvider": vnf.vendor,
126             "instantiatedVnfInfo": {
127                 "flavourId": vnf.flavour_id,
128                 "vnfState": vnf.status,
129                 "scaleStatus": [],
130                 "extCpInfo": [],
131                 "extVirtualLink": [],
132                 "monitoringParameters": {},
133                 "vimInfo": vm_arr,
134                 "vnfcResourceInfo": vnfc_arr,
135                 "virtualLinkResourceInfo": vl_arr,
136                 "virtualStorageResourceInfo": arr
137             }
138         }
139         return resp_data