1 # Copyright 2017 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 catalog.pub.config.config import CATALOG_ROOT_PATH
21 from catalog.pub.utils import fileutil
22 from catalog.pub.utils.values import ignore_case_get
23 from catalog.pub.database.models import NSPackageModel, VnfPackageModel
24 from catalog.pub.exceptions import CatalogException
26 logger = logging.getLogger(__name__)
30 user_defined_data = ignore_case_get(data, 'userDefinedData')
32 'id': str(uuid.uuid4()),
33 'nsdOnboardingState': 'CREATED',
34 'nsdOperationalState': 'DISABLED',
35 'nsdUsageState': 'NOT_IN_USE',
36 'userDefinedData': user_defined_data,
40 nsPackageId=data['id'],
41 operationalState=data['nsdOperationalState'],
42 usageState=data['nsdUsageState'],
43 userDefinedData=data['userDefinedData']
49 ns_pkgs = NSPackageModel.objects.all()
51 raise CatalogException('NS descriptors do not exist.')
53 for ns_pkg in ns_pkgs:
55 'id': ns_pkg.nsPackageId,
56 'nsdId': ns_pkg.nsdId,
57 'nsdName': ns_pkg.nsdName,
58 'nsdVersion': ns_pkg.nsdVersion,
59 'nsdDesigner': ns_pkg.nsdDesginer,
60 'nsdInvariantId': None, # TODO
62 'pnfdInfoIds': [], # TODO
63 'nestedNsdInfoIds': [], # TODO
64 'nsdOnboardingState': 'CREATED',
65 'onboardingFailureDetails': None, # TODO
66 'nsdOperationalState': ns_pkg.operationalState,
67 'nsdUsageState': ns_pkg.usageState,
68 'userDefinedData': {},
73 data['nsdOnboardingState'] = 'ONBOARDED'
74 elif ns_pkg.localFilePath: # TODO: strip()
75 data['nsdOnboardingState'] = 'PROCESSING'
77 data['nsdOnboardingState'] = 'UPLOADING'
78 data['nsdOnboardingState'] = 'CREATED'
81 nsd_model = json.JSONDecoder().decode(ns_pkg.nsdModel)
83 for vnf in nsd_model['vnfs']:
84 vnfd_id = vnf["properties"]["id"]
85 pkgs = VnfPackageModel.objects.filter(vnfdId=vnfd_id)
87 vnf_pkg_ids.append(pkg.vnfPackageId)
88 data['vnfPkgIds'] = vnf_pkg_ids
90 if ns_pkg.userDefinedData:
91 user_defined_data = json.JSONDecoder().decode(ns_pkg.userDefinedData)
92 data['userDefinedData'] = user_defined_data
94 response_data.append(data)
98 def query_single(nsd_info_id):
99 ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id)
100 if not ns_pkgs.exists():
101 raise CatalogException('NS descriptors(%s) does not exist.' % nsd_info_id)
103 'id': ns_pkgs[0].nsPackageId,
104 'nsdId': ns_pkgs[0].nsdId,
105 'nsdName': ns_pkgs[0].nsdName,
106 'nsdVersion': ns_pkgs[0].nsdVersion,
107 'nsdDesigner': ns_pkgs[0].nsdDesginer,
108 'nsdInvariantId': None, # TODO
110 'pnfdInfoIds': [], # TODO
111 'nestedNsdInfoIds': [], # TODO
112 'nsdOnboardingState': 'CREATED',
113 'onboardingFailureDetails': None, # TODO
114 'nsdOperationalState': ns_pkgs[0].operationalState,
115 'nsdUsageState': ns_pkgs[0].usageState,
116 'userDefinedData': {},
117 '_links': None # TODO
120 if ns_pkgs[0].nsdModel:
121 ns_pkgs[0]['nsdOnboardingState'] = 'ONBOARDED'
122 elif ns_pkgs[0].localFilePath: # TODO: strip()
123 ns_pkgs[0]['nsdOnboardingState'] = 'PROCESSING'
124 elif ns_pkgs[0].nsdId:
125 ns_pkgs[0]['nsdOnboardingState'] = 'UPLOADING'
126 ns_pkgs[0]['nsdOnboardingState'] = 'CREATED'
128 if ns_pkgs[0].nsdModel:
129 nsd_model = json.JSONDecoder().decode(ns_pkgs[0].nsdModel)
131 for vnf in nsd_model['vnfs']:
132 vnfd_id = vnf["properties"]["id"]
133 pkgs = VnfPackageModel.objects.filter(vnfdId=vnfd_id)
135 vnf_pkg_ids.append(pkg.vnfPackageId)
136 data['vnfPkgIds'] = vnf_pkg_ids
138 if ns_pkgs[0].userDefinedData:
139 user_defined_data = json.JSONDecoder().decode(ns_pkgs[0].userDefinedData)
140 data['userDefinedData'] = user_defined_data
145 def delete_single(nsd_info_id):
146 ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id)
147 if not ns_pkgs.exists():
148 raise CatalogException('The NS descriptor (%s) does not exist.' % nsd_info_id)
149 if not ns_pkgs[0].nsdModel:
150 raise CatalogException('The NS descriptor (%s) is not ONBOARDED.' % nsd_info_id)
151 if ns_pkgs[0].operationalState != 'DISABLED':
152 raise CatalogException('The NS descriptor (%s) is not DISABLED.' % nsd_info_id)
153 if ns_pkgs[0].usageState != 'NOT_IN_USE':
154 raise CatalogException('The NS descriptor (%s) is not NOT_IN_USE.' % nsd_info_id)
158 def upload(files, nsd_info_id):
160 for remote_file in remote_files:
161 local_file_name = remote_file.name
162 local_file_dir = os.path.join(CATALOG_ROOT_PATH, nsd_info_id)
163 local_file_name = os.path.join(local_file_dir, local_file_name)
164 if not os.path.exists(local_file_dir):
165 fileutil.make_dirs(local_file_dir)
166 with open(local_file_name, 'wb') as local_file:
167 if remote_file.multiple_chunks(chunk_size=None):
168 for chunk in remote_file.chunks():
169 local_file.write(chunk)
171 data = remote_file.read()
172 local_file.write(data)
175 def fill_resp_data(ns_pkg):