2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
\r
7 * ================================================================================
\r
8 * Licensed under the Apache License, Version 2.0 (the "License");
\r
9 * you may not use this file except in compliance with the License.
\r
10 * You may obtain a copy of the License at
\r
12 * http://www.apache.org/licenses/LICENSE-2.0
\r
14 * Unless required by applicable law or agreed to in writing, software
\r
15 * distributed under the License is distributed on an "AS IS" BASIS,
\r
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
17 * See the License for the specific language governing permissions and
\r
18 * limitations under the License.
\r
19 * ============LICENSE_END=========================================================
\r
22 package org.openecomp.mso.asdc.installer.heat;
\r
24 import java.sql.Timestamp;
\r
25 import java.text.SimpleDateFormat;
\r
26 import java.util.ArrayList;
\r
27 import java.util.Date;
\r
28 import java.util.HashMap;
\r
29 import java.util.Iterator;
\r
30 import java.util.LinkedHashMap;
\r
31 import java.util.List;
\r
32 import java.util.Map;
\r
33 import java.util.Set;
\r
34 import java.util.regex.Pattern;
\r
35 import java.util.Collections;
\r
36 import java.util.regex.Matcher;
\r
37 import java.util.Comparator;
\r
39 import org.hibernate.exception.ConstraintViolationException;
\r
40 import org.hibernate.exception.LockAcquisitionException;
\r
41 //import org.openecomp.generic.tosca.parser.model.Metadata;
\r
42 //import org.openecomp.generic.tosca.parser.model.NodeTemplate;
\r
43 import org.openecomp.sdc.api.notification.IArtifactInfo;
\r
44 import org.openecomp.sdc.api.notification.IVfModuleMetadata;
\r
45 import org.openecomp.sdc.tosca.parser.impl.SdcPropertyNames;
\r
46 import org.openecomp.sdc.toscaparser.api.Group;
\r
47 import org.openecomp.sdc.toscaparser.api.NodeTemplate;
\r
48 import org.openecomp.sdc.toscaparser.api.Property;
\r
49 import org.openecomp.sdc.toscaparser.api.elements.Metadata;
\r
50 import org.openecomp.sdc.toscaparser.api.parameters.Input;
\r
51 import org.openecomp.mso.asdc.client.ASDCConfiguration;
\r
52 import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;
\r
53 import org.openecomp.mso.asdc.installer.ASDCElementInfo;
\r
54 import org.openecomp.mso.asdc.installer.BigDecimalVersion;
\r
55 import org.openecomp.mso.asdc.installer.IVfModuleData;
\r
56 import org.openecomp.mso.asdc.installer.IVfResourceInstaller;
\r
57 import org.openecomp.mso.asdc.installer.ToscaResourceStructure;
\r
58 import org.openecomp.mso.asdc.installer.VfModuleArtifact;
\r
59 import org.openecomp.mso.asdc.installer.VfModuleStructure;
\r
60 import org.openecomp.mso.asdc.installer.VfResourceStructure;
\r
61 import org.openecomp.mso.asdc.util.YamlEditor;
\r
62 import org.openecomp.mso.db.catalog.CatalogDatabase;
\r
63 import org.openecomp.mso.db.catalog.beans.AllottedResource;
\r
64 import org.openecomp.mso.db.catalog.beans.HeatEnvironment;
\r
65 import org.openecomp.mso.db.catalog.beans.HeatFiles;
\r
66 import org.openecomp.mso.db.catalog.beans.HeatTemplate;
\r
67 import org.openecomp.mso.db.catalog.beans.HeatTemplateParam;
\r
68 import org.openecomp.mso.db.catalog.beans.NetworkResource;
\r
69 import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization;
\r
70 import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization;
\r
71 import org.openecomp.mso.db.catalog.beans.Service;
\r
72 import org.openecomp.mso.db.catalog.beans.ServiceToAllottedResources;
\r
73 import org.openecomp.mso.db.catalog.beans.ServiceToNetworks;
\r
74 import org.openecomp.mso.db.catalog.beans.ServiceToResourceCustomization;
\r
75 import org.openecomp.mso.db.catalog.beans.TempNetworkHeatTemplateLookup;
\r
76 import org.openecomp.mso.db.catalog.beans.ToscaCsar;
\r
77 import org.openecomp.mso.db.catalog.beans.VfModule;
\r
78 import org.openecomp.mso.db.catalog.beans.VfModuleCustomization;
\r
79 import org.openecomp.mso.db.catalog.beans.VfModuleToHeatFiles;
\r
80 import org.openecomp.mso.db.catalog.beans.VnfResCustomToVfModuleCustom;
\r
81 import org.openecomp.mso.db.catalog.beans.VnfResource;
\r
82 import org.openecomp.mso.db.catalog.beans.VnfResourceCustomization;
\r
83 import org.openecomp.mso.logger.MessageEnum;
\r
84 import org.openecomp.mso.logger.MsoLogger;
\r
86 public class ToscaResourceInstaller {// implements IVfResourceInstaller {
\r
88 private MsoLogger logger;
\r
90 private static final Pattern lastDigit = Pattern.compile("(\\d+)$");
\r
92 public ToscaResourceInstaller() {
\r
93 logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.ASDC);
\r
97 public boolean isResourceAlreadyDeployed(VfResourceStructure vfResourceStruct)
\r
98 throws ArtifactInstallerException {
\r
99 boolean status = false;
\r
100 VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct;
\r
104 String serviceUUID = vfResourceStruct.getNotification().getServiceUUID();
\r
107 logger.info(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED_DETAIL,
\r
108 vfResourceStructure.getResourceInstance().getResourceInstanceName(),
\r
109 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),
\r
110 vfResourceStructure.getNotification().getServiceName(),
\r
111 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
112 vfResourceStructure.getNotification().getServiceVersion()),
\r
113 vfResourceStructure.getNotification().getServiceUUID(),
\r
114 vfResourceStructure.getResourceInstance().getResourceName(),"", "");
\r
116 logger.info(MessageEnum.ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL,
\r
117 vfResourceStructure.getResourceInstance().getResourceInstanceName(),
\r
118 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),
\r
119 vfResourceStructure.getNotification().getServiceName(),
\r
120 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
121 vfResourceStructure.getNotification().getServiceVersion()),
\r
122 vfResourceStructure.getNotification().getServiceUUID(),
\r
123 vfResourceStructure.getResourceInstance().getResourceName(),"", "");
\r
128 } catch (Exception e) {
\r
129 logger.error(MessageEnum.ASDC_ARTIFACT_CHECK_EXC, "", "", MsoLogger.ErrorCode.SchemaError, "Exception - isResourceAlreadyDeployed");
\r
130 throw new ArtifactInstallerException("Exception caught during checking existence of the VNF Resource.", e);
\r
135 public void installTheResource(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStruct) throws ArtifactInstallerException {
\r
137 logger.debug("installTheResource is called");
\r
139 VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct;
\r
141 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
143 switch (vfModuleArtifact.getArtifactInfo().getArtifactType()) {
\r
144 case ASDCConfiguration.HEAT:
\r
145 case ASDCConfiguration.HEAT_VOL:
\r
146 case ASDCConfiguration.HEAT_NESTED:
\r
147 ToscaResourceInstaller.createHeatTemplateFromArtifact(vfResourceStructure, toscaResourceStruct, vfModuleArtifact);
\r
149 case ASDCConfiguration.HEAT_ENV:
\r
150 ToscaResourceInstaller.createHeatEnvFromArtifact(vfResourceStructure, vfModuleArtifact);
\r
152 case ASDCConfiguration.HEAT_ARTIFACT:
\r
153 ToscaResourceInstaller.createHeatFileFromArtifact(vfResourceStructure, vfModuleArtifact, toscaResourceStruct);
\r
155 case ASDCConfiguration.HEAT_NET:
\r
156 case ASDCConfiguration.OTHER:
\r
157 logger.warn(MessageEnum.ASDC_ARTIFACT_TYPE_NOT_SUPPORT, vfModuleArtifact.getArtifactInfo().getArtifactType()+"(Artifact Name:"+vfModuleArtifact.getArtifactInfo().getArtifactName()+")", "", "", MsoLogger.ErrorCode.DataError, "Artifact type not supported");
\r
164 // Those objects could be reused by different VfModule
\r
168 // PCLO: in case of deployment failure, use a string that will represent the type of artifact that failed...
\r
169 List<ASDCElementInfo> artifactListForLogging = new ArrayList<>();
\r
171 CatalogDatabase catalogDB = CatalogDatabase.getInstance();
\r
172 // 2. Create the VFModules/VNFResource objects by linking them to the
\r
173 // objects created before and store them in Resource/module structure
\r
174 // Opening a DB transaction, starting from here
\r
178 createToscaCsar(toscaResourceStruct);
\r
180 catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());
\r
182 ToscaResourceInstaller.createService(toscaResourceStruct);
\r
184 catalogDB.saveService(toscaResourceStruct.getCatalogService());
\r
188 * ************************************************************************************************************
\r
191 // Ingest (VNF) Data - 1707
\r
192 List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();
\r
194 logger.debug("**vfMondeTEmplatesList.size()=" + vfNodeTemplatesList.size());
\r
195 for (NodeTemplate nodeTemplate : vfNodeTemplatesList) {
\r
196 logger.debug("nodeTemplate outerLoop=" + outerLoop++);
\r
197 // extract VF metadata
\r
199 Metadata metadata = nodeTemplate.getMetaData();
\r
201 String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
\r
202 logger.debug("vfCustomizationUUID=" + vfCustomizationUUID);
\r
205 /* HEAT TABLE POPULATION
\r
206 * *******************************************************************************************************
\r
210 for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) {
\r
211 logger.debug("vfResourceStructure.getVfMOduleStructure() loop, nextLoop = " + nextLoop++);
\r
212 logger.debug("vfModuleStructure:" + vfModuleStructure.toString());
\r
214 // Here we set the right db structure according to the Catalog
\r
217 // We expect only one MAIN HEAT per VFMODULE
\r
218 // we can also obtain from it the Env ArtifactInfo, that's why
\r
220 // get the Main IArtifactInfo
\r
222 HeatTemplate heatMainTemplate = null;
\r
223 HeatEnvironment heatEnv;
\r
225 HeatTemplate heatVolumeTemplate = null;
\r
226 HeatEnvironment heatVolumeEnv;
\r
229 IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata();
\r
232 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT)) {
\r
234 List<VfModuleArtifact> artifacts = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT);
\r
235 logger.debug("there are " + artifacts.size() + " artifacts");
\r
236 IArtifactInfo mainEnvArtifactInfo = null;
\r
237 for (VfModuleArtifact vfma : artifacts) {
\r
238 logger.debug("vmfa=" + vfma.toString());
\r
239 mainEnvArtifactInfo =
\r
240 vfma.getArtifactInfo().getGeneratedArtifact();
\r
243 heatMainTemplate = (HeatTemplate) vfma.getCatalogObject();
\r
245 // Set HeatTemplateArtifactUUID to use later when setting the VfModule and NetworkResource
\r
246 toscaResourceStruct.setHeatTemplateUUID(heatMainTemplate.getArtifactUuid());
\r
248 // Add this one for logging
\r
249 artifactListForLogging.add(ASDCElementInfo
\r
250 .createElementFromVfArtifactInfo(vfma.getArtifactInfo()));
\r
252 catalogDB.saveHeatTemplate(heatMainTemplate, heatMainTemplate.getParameters());
\r
253 // Indicate we have deployed it in the DB
\r
254 vfma.incrementDeployedInDB();
\r
259 // We expect only one VOL HEAT per VFMODULE
\r
260 // we can also obtain from it the Env ArtifactInfo, that's why
\r
261 // we get the Volume IArtifactInfo
\r
263 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_VOL)) {
\r
264 IArtifactInfo volEnvArtifactInfo = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0)
\r
265 .getArtifactInfo().getGeneratedArtifact();
\r
267 heatVolumeTemplate = (HeatTemplate) vfModuleStructure.getArtifactsMap()
\r
268 .get(ASDCConfiguration.HEAT_VOL).get(0).getCatalogObject();
\r
270 // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule
\r
271 toscaResourceStruct.setVolHeatTemplateUUID(heatVolumeTemplate.getArtifactUuid());
\r
274 // Add this one for logging
\r
275 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo()));
\r
277 catalogDB.saveHeatTemplate(heatVolumeTemplate, heatVolumeTemplate.getParameters());
\r
278 // Indicate we have deployed it in the DB
\r
279 vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).incrementDeployedInDB();
\r
281 if (volEnvArtifactInfo != null) {
\r
282 heatVolumeEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()
\r
283 .get(volEnvArtifactInfo.getArtifactUUID()).getCatalogObject();
\r
285 // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule
\r
286 toscaResourceStruct.setVolHeatEnvTemplateUUID(heatVolumeEnv.getArtifactUuid());
\r
288 // Add this one for logging
\r
289 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(volEnvArtifactInfo));
\r
291 catalogDB.saveHeatEnvironment(heatVolumeEnv);
\r
292 // Indicate we have deployed it in the DB
\r
293 vfResourceStructure.getArtifactsMapByUUID().get(volEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();
\r
299 // Here we expect many HEAT_NESTED template to be there
\r
300 // XXX FIX BY PCLO: Defect# -36643 -US666034 - check first if we really have nested heat templates
\r
301 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_NESTED)) {
\r
302 for (VfModuleArtifact heatNestedArtifact : vfModuleStructure.getArtifactsMap()
\r
303 .get(ASDCConfiguration.HEAT_NESTED)) {
\r
305 // Check if this nested is well referenced by the MAIN HEAT
\r
306 String parentArtifactType = ToscaResourceInstaller.identifyParentOfNestedTemplate(vfModuleStructure,heatNestedArtifact);
\r
307 HeatTemplate heatNestedTemplate = (HeatTemplate) heatNestedArtifact.getCatalogObject();
\r
309 if (parentArtifactType != null) {
\r
311 switch (parentArtifactType) {
\r
312 case ASDCConfiguration.HEAT:
\r
314 // Add this one for logging
\r
315 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));
\r
317 catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
318 // Indicate we have deployed it in the DB
\r
319 heatNestedArtifact.incrementDeployedInDB();
\r
321 case ASDCConfiguration.HEAT_VOL:
\r
323 // Add this one for logging
\r
324 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));
\r
325 catalogDB.saveNestedHeatTemplate (heatVolumeTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
326 // Indicate we have deployed it in the DB
\r
327 heatNestedArtifact.incrementDeployedInDB();
\r
334 } else { // Assume it belongs to HEAT MAIN
\r
335 // Add this one for logging
\r
336 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));
\r
338 catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
339 // Indicate we have deployed it in the DB
\r
340 heatNestedArtifact.incrementDeployedInDB();
\r
345 if (mainEnvArtifactInfo != null) {
\r
346 heatEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()
\r
347 .get(mainEnvArtifactInfo.getArtifactUUID()).getCatalogObject();
\r
349 // Set HeatEnvironmentArtifactUUID to use later when setting the VfModule
\r
350 toscaResourceStruct.setEnvHeatTemplateUUID(heatEnv.getArtifactUuid());
\r
352 // Add this one for logging
\r
353 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(mainEnvArtifactInfo));
\r
355 catalogDB.saveHeatEnvironment(heatEnv);
\r
356 // Indicate we have deployed it in the DB
\r
357 vfResourceStructure.getArtifactsMapByUUID().get(mainEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();
\r
360 // here we expect one VFModule to be there
\r
361 //VfResourceInstaller.createVfModule(vfModuleStructure,heatMainTemplate, heatVolumeTemplate, heatEnv, heatVolumeEnv);
\r
362 //VfModule vfModule = vfModuleStructure.getCatalogVfModule();
\r
364 // Add this one for logging
\r
365 //artifactListForLogging.add(ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure));
\r
367 //catalogDB.saveOrUpdateVfModule(vfModule);
\r
370 // extract VF metadata
\r
371 createVnfResource(nodeTemplate, toscaResourceStruct);
\r
373 // check for duplicate record already in the database
\r
374 VnfResource vnfResource = catalogDB.getVnfResource(toscaResourceStruct.getCatalogVnfResource().getModelName(),
\r
375 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
376 toscaResourceStruct.getCatalogVnfResource().getVersion()));
\r
378 if (vnfResource != null) {
\r
379 toscaResourceStruct.setVnfAlreadyInstalled(true);
\r
383 if(!toscaResourceStruct.isVnfAlreadyInstalled()) {
\r
385 catalogDB.saveOrUpdateVnfResource(toscaResourceStruct.getCatalogVnfResource());
\r
390 boolean saveVnfCustomization = catalogDB.saveVnfResourceCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization());
\r
392 if(saveVnfCustomization){
\r
393 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVfServiceToResourceCustomization());
\r
396 List<org.openecomp.sdc.toscaparser.api.Group> vfGroups = toscaResourceStruct.getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID);
\r
397 logger.debug("vfGroups:" + vfGroups.toString());
\r
399 Collections.sort(vfGroups, new Comparator<org.openecomp.sdc.toscaparser.api.Group>() {
\r
401 public int compare(org.openecomp.sdc.toscaparser.api.Group group1, org.openecomp.sdc.toscaparser.api.Group group2) {
\r
403 //Field name1Field = group1.class.getDeclaredField("name");
\r
404 //name1Field.setAccessible(true);
\r
405 String thisName = group1.getName(); //(String) name1Field.get(group1);
\r
406 String thatName = group2.getName(); // (String) name1Field.get(group2);
\r
408 Matcher m = lastDigit.matcher(thisName);
\r
409 Matcher m2 = lastDigit.matcher(thatName);
\r
411 String thisDigit = "0";
\r
412 String thatDigit = "0";
\r
414 thisDigit = m.group();
\r
419 thatDigit = m2.group();
\r
424 return new Integer(thisDigit).compareTo(new Integer(thatDigit));
\r
429 logger.debug("vfGroupsAfter:" + vfGroups.toString());
\r
432 for(Group group : vfGroups){
\r
435 //boolean saveVFModule = createVFModule(group, nodeTemplate, toscaResourceStruct, vfMetadata);
\r
436 if (vfMetadata.getVfModuleModelCustomizationUUID() == null) {
\r
437 logger.debug("NULL 1");
\r
439 logger.debug("vfMetadata.getMCU=" + vfMetadata.getVfModuleModelCustomizationUUID());
\r
441 if (group.getMetadata() == null) {
\r
442 logger.debug("NULL 3");
\r
444 logger.debug("group.getMetadata().getValue() = " + group.getMetadata().getValue("vfModuleModelCustomizationUUID"));
\r
446 if (vfMetadata.getVfModuleModelCustomizationUUID().equals(group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) {
\r
447 logger.debug("Found a match at " + vfMetadata.getVfModuleModelCustomizationUUID());
\r
448 createVFModule(group, nodeTemplate, toscaResourceStruct, vfResourceStructure, vfMetadata);
\r
450 catalogDB.saveOrUpdateVfModule(toscaResourceStruct.getCatalogVfModule());
\r
452 catalogDB.saveOrUpdateVfModuleCustomization(toscaResourceStruct.getCatalogVfModuleCustomization());
\r
454 catalogDB.saveVnfResourceToVfModuleCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct.getCatalogVfModuleCustomization());
\r
458 if(toscaResourceStruct.getCatalogVfModuleCustomization() != null){
\r
459 logger.debug("No match for " + toscaResourceStruct.getCatalogVfModuleCustomization().getModelCustomizationUuid());
\r
461 logger.debug("No match for vfModuleModelCustomizationUUID");
\r
467 } //Commented out to process VFModules each time
\r
471 // Here we expect many HEAT_TEMPLATE files to be there
\r
472 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_ARTIFACT)) {
\r
473 for (VfModuleArtifact heatArtifact : vfModuleStructure.getArtifactsMap()
\r
474 .get(ASDCConfiguration.HEAT_ARTIFACT)) {
\r
476 HeatFiles heatFile = (HeatFiles) heatArtifact.getCatalogObject();
\r
478 // Add this one for logging
\r
479 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatArtifact.getArtifactInfo()));
\r
481 if(toscaResourceStruct.getCatalogVfModule() != null && heatFile != null){
\r
482 catalogDB.saveVfModuleToHeatFiles (toscaResourceStruct.getCatalogVfModule().getModelUUID(), heatFile);
\r
484 // Indicate we will deploy it in the DB
\r
485 heatArtifact.incrementDeployedInDB();
\r
493 /* END OF HEAT TABLE POPULATION
\r
494 * ***************************************************************************************************
\r
498 // throw new ArtifactInstallerException("TESTING");
\r
501 List<NodeTemplate> allottedResourceList = toscaResourceStruct.getSdcCsarHelper().getAllottedResources();
\r
503 if(allottedResourceList != null){
\r
505 for(NodeTemplate allottedNode : allottedResourceList){
\r
507 createAllottedResource(allottedNode, toscaResourceStruct);
\r
509 catalogDB.saveAllottedResource(toscaResourceStruct.getAllottedResource());
\r
511 catalogDB.saveAllottedResourceCustomization(toscaResourceStruct.getCatalogAllottedResourceCustomization());
\r
513 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogAllottedServiceToResourceCustomization());
\r
519 List<NodeTemplate> nodeTemplatesVLList = toscaResourceStruct.getSdcCsarHelper().getServiceVlList();
\r
521 if(nodeTemplatesVLList != null){
\r
523 for(NodeTemplate vlNode : nodeTemplatesVLList){
\r
525 String networkResourceModelName = vlNode.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim();
\r
527 List<TempNetworkHeatTemplateLookup> networkHeatTemplateLookup = catalogDB.getTempNetworkHeatTemplateLookup(networkResourceModelName);
\r
529 if(networkHeatTemplateLookup != null && networkHeatTemplateLookup.size() > 0 ){
\r
531 createNetworkResource(vlNode, toscaResourceStruct, networkHeatTemplateLookup.get(0));
\r
534 throw new ArtifactInstallerException("No NetworkResourceName found in TempNetworkHeatTemplateLookup for " + networkResourceModelName);
\r
538 catalogDB.saveNetworkResource(toscaResourceStruct.getCatalogNetworkResource());
\r
540 catalogDB.saveNetworkResourceCustomization(toscaResourceStruct.getCatalogNetworkResourceCustomization());
\r
542 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVlServiceToResourceCustomization());
\r
548 //createServiceToResourceCustomization(toscaResourceStruct.getCatalogService(), toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct);
\r
550 // catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());
\r
553 catalogDB.commit();
\r
554 vfResourceStructure.setSuccessfulDeployment();
\r
556 }catch(Exception e){
\r
557 logger.debug("Exception :",e);
\r
559 Throwable dbExceptionToCapture = e;
\r
560 while (!(dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException)
\r
561 && (dbExceptionToCapture.getCause() != null)) {
\r
562 dbExceptionToCapture = dbExceptionToCapture.getCause();
\r
565 if (dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException) {
\r
566 logger.warn(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED, vfResourceStructure.getResourceInstance().getResourceName(),
\r
567 vfResourceStructure.getNotification().getServiceVersion(), "", "", MsoLogger.ErrorCode.DataError, "Exception - ASCDC Artifact already deployed", e);
\r
569 String elementToLog = (artifactListForLogging.size() > 0 ? artifactListForLogging.get(artifactListForLogging.size()-1).toString() : "No element listed");
\r
570 logger.error(MessageEnum.ASDC_ARTIFACT_INSTALL_EXC, elementToLog, "", "", MsoLogger.ErrorCode.DataError, "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback", e);
\r
571 catalogDB.rollback();
\r
572 throw new ArtifactInstallerException(
\r
573 "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback.", e);
\r
581 public static String verifyTheFilePrefixInArtifacts(String filebody, VfResourceStructure vfResourceStructure, List<String> listTypes) {
\r
582 String newFileBody = filebody;
\r
583 for (VfModuleArtifact moduleArtifact:vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
585 if (listTypes.contains(moduleArtifact.getArtifactInfo().getArtifactType())) {
\r
587 newFileBody = verifyTheFilePrefixInString(newFileBody,moduleArtifact.getArtifactInfo().getArtifactName());
\r
590 return newFileBody;
\r
593 public static String verifyTheFilePrefixInString(final String body, final String filenameToVerify) {
\r
595 String needlePrefix = "file:///";
\r
596 String prefixedFilenameToVerify = needlePrefix+filenameToVerify;
\r
598 if ((body == null) || (body.length() == 0) || (filenameToVerify == null) || (filenameToVerify.length() == 0)) {
\r
602 StringBuffer sb = new StringBuffer(body.length());
\r
604 int currentIndex = 0;
\r
605 int startIndex = 0;
\r
607 while (currentIndex != -1) {
\r
608 startIndex = currentIndex;
\r
609 currentIndex = body.indexOf(prefixedFilenameToVerify, startIndex);
\r
611 if (currentIndex == -1) {
\r
615 // We append from the startIndex up to currentIndex (start of File Name)
\r
616 sb.append(body.substring(startIndex, currentIndex));
\r
617 sb.append(filenameToVerify);
\r
619 currentIndex += prefixedFilenameToVerify.length();
\r
622 sb.append(body.substring(startIndex));
\r
624 return sb.toString();
\r
628 private static void createHeatTemplateFromArtifact(VfResourceStructure vfResourceStructure,ToscaResourceStructure toscaResourceStruct,
\r
629 VfModuleArtifact vfModuleArtifact) {
\r
630 HeatTemplate heatTemplate = new HeatTemplate();
\r
632 // TODO Set the label
\r
633 // heatTemplate.setAsdcLabel("label");
\r
634 // Use the ResourceName of the ASDC template because the HEAT could be
\r
636 // heatTemplate.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());
\r
637 heatTemplate.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
639 List<String> typeList = new ArrayList<>();
\r
640 typeList.add(ASDCConfiguration.HEAT_NESTED);
\r
641 typeList.add(ASDCConfiguration.HEAT_ARTIFACT);
\r
643 heatTemplate.setTemplateBody(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));
\r
644 heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
646 if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {
\r
647 heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());
\r
649 heatTemplate.setTimeoutMinutes(240);
\r
652 //toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
654 heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
655 heatTemplate.setVersion(BigDecimalVersion
\r
656 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
657 heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
659 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
660 heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
662 heatTemplate.setArtifactChecksum("MANUAL_RECORD");
\r
665 Set<HeatTemplateParam> heatParam = ToscaResourceInstaller
\r
666 .extractHeatTemplateParameters(vfModuleArtifact.getResult(), vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
667 heatTemplate.setParameters(heatParam);
\r
668 //heatTemplate.setCreated(getCurrentTimeStamp());
\r
670 vfModuleArtifact.setCatalogObject(heatTemplate);
\r
673 private static void createHeatEnvFromArtifact(VfResourceStructure vfResourceStructure,
\r
674 VfModuleArtifact vfModuleArtifact) {
\r
675 HeatEnvironment heatEnvironment = new HeatEnvironment();
\r
677 heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
678 // TODO Set the label
\r
679 // heatEnvironment.setAsdcLabel("Label");
\r
681 List<String> typeList = new ArrayList<>();
\r
682 typeList.add(ASDCConfiguration.HEAT);
\r
683 typeList.add(ASDCConfiguration.HEAT_VOL);
\r
685 heatEnvironment.setEnvironment(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));
\r
686 // heatEnvironment.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
687 heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
688 heatEnvironment.setVersion(BigDecimalVersion
\r
689 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
690 // heatEnvironment.setAsdcResourceName(VfResourceInstaller.createVNFName(vfResourceStructure));
\r
691 heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
693 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
694 heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
696 heatEnvironment.setArtifactChecksum("MANUAL_RECORD");
\r
698 //heatEnvironment.setCreated(getCurrentTimeStamp());
\r
700 vfModuleArtifact.setCatalogObject(heatEnvironment);
\r
704 private static void createHeatFileFromArtifact(VfResourceStructure vfResourceStructure,
\r
705 VfModuleArtifact vfModuleArtifact, ToscaResourceStructure toscaResourceStruct) {
\r
707 HeatFiles heatFile = new HeatFiles();
\r
708 // TODO Set the label
\r
709 // heatFile.setAsdcLabel("Label");
\r
710 heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
711 heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
712 heatFile.setFileBody(vfModuleArtifact.getResult());
\r
713 heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
714 heatFile.setVersion(BigDecimalVersion
\r
715 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
717 toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
718 //heatFile.setCreated(getCurrentTimeStamp());
\r
720 // heatFile.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());
\r
723 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
724 heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
726 heatFile.setArtifactChecksum("MANUAL_RECORD");
\r
729 vfModuleArtifact.setCatalogObject(heatFile);
\r
733 private static void createService(ToscaResourceStructure toscaResourceStructure) {
\r
735 toscaResourceStructure.getServiceMetadata();
\r
737 Metadata serviceMetadata = toscaResourceStructure.getServiceMetadata();
\r
739 Service service = new Service();
\r
742 if(serviceMetadata != null){
\r
744 if(toscaResourceStructure.getServiceVersion() != null){
\r
745 service.setVersion(toscaResourceStructure.getServiceVersion());
\r
748 service.setServiceType(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(serviceMetadata, "serviceType"));
\r
749 service.setServiceRole(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(serviceMetadata, "serviceRole"));
\r
751 service.setDescription(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
\r
752 service.setModelName(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
\r
753 service.setModelUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
\r
754 //service.setVersion(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
\r
755 service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
\r
756 service.setToscaCsarArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());
\r
757 //service.setCreated(getCurrentTimeStamp());
\r
760 toscaResourceStructure.setCatalogService(service);
\r
763 private static void createToscaCsar(ToscaResourceStructure toscaResourceStructure) {
\r
765 ToscaCsar toscaCsar = new ToscaCsar();
\r
766 if(toscaResourceStructure.getToscaArtifact().getArtifactChecksum() != null){
\r
767 toscaCsar.setArtifactChecksum(toscaResourceStructure.getToscaArtifact().getArtifactChecksum());
\r
769 toscaCsar.setArtifactChecksum("MANUAL_RECORD");
\r
771 toscaCsar.setArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());
\r
772 toscaCsar.setName(toscaResourceStructure.getToscaArtifact().getArtifactName());
\r
773 toscaCsar.setVersion(toscaResourceStructure.getToscaArtifact().getArtifactVersion());
\r
774 toscaCsar.setDescription(toscaResourceStructure.getToscaArtifact().getArtifactDescription());
\r
775 toscaCsar.setUrl(toscaResourceStructure.getToscaArtifact().getArtifactURL());
\r
777 toscaResourceStructure.setCatalogToscaCsar(toscaCsar);
\r
780 private static void createNetworkResource(NodeTemplate networkNodeTemplate, ToscaResourceStructure toscaResourceStructure, TempNetworkHeatTemplateLookup networkHeatTemplateLookup) {
\r
781 NetworkResourceCustomization networkResourceCustomization = new NetworkResourceCustomization();
\r
783 NetworkResource networkResource = new NetworkResource();
\r
785 String providerNetwork = toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_PROVIDERNETWORK_ISPROVIDERNETWORK);
\r
787 if(providerNetwork != null && providerNetwork.equalsIgnoreCase("true")){
\r
788 networkResource.setNeutronNetworkType("PROVIDER");
\r
790 networkResource.setNeutronNetworkType("BASIC");
\r
793 networkResource.setModelName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
795 networkResource.setModelInvariantUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));
\r
796 networkResource.setModelUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
797 networkResource.setModelVersion(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
\r
799 networkResource.setAicVersionMax(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
\r
800 networkResource.setAicVersionMin(networkHeatTemplateLookup.getAicVersionMin());
\r
801 networkResource.setToscaNodeType(networkNodeTemplate.getType());
\r
802 networkResource.setDescription(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
\r
803 networkResource.setOrchestrationMode("HEAT");
\r
804 networkResource.setHeatTemplateArtifactUUID(networkHeatTemplateLookup.getHeatTemplateArtifactUuid());
\r
806 toscaResourceStructure.setCatalogNetworkResource(networkResource);
\r
808 networkResourceCustomization.setModelInstanceName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
809 networkResourceCustomization.setModelCustomizationUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
810 networkResourceCustomization.setNetworkResourceModelUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
813 networkResourceCustomization.setNetworkTechnology(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTECHNOLOGY)).trim());
\r
814 networkResourceCustomization.setNetworkType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTYPE)).trim());
\r
815 networkResourceCustomization.setNetworkRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)).trim());
\r
816 networkResourceCustomization.setNetworkScope(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)).trim());
\r
818 toscaResourceStructure.setCatalogNetworkResourceCustomization(networkResourceCustomization);
\r
820 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
821 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
822 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
823 serviceToResourceCustomization.setModelType("network");
\r
825 toscaResourceStructure.setCatalogVlServiceToResourceCustomization(serviceToResourceCustomization);
\r
830 private static void createVFModule(Group group, NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure, IVfModuleData vfModuleData) {
\r
831 VfModule vfModule = new VfModule();
\r
833 Metadata vfMetadata = group.getMetadata();
\r
835 String vfModuleModelUUID = vfModuleData.getVfModuleModelUUID();
\r
838 if(vfModuleModelUUID != null && vfModuleModelUUID.indexOf(".") > -1){
\r
839 vfModuleModelUUID = vfModuleModelUUID.substring(0, vfModuleModelUUID.indexOf("."));
\r
843 for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()){
\r
845 String vfModelUUID = vfModuleStructure.getVfModuleMetadata().getVfModuleModelUUID();
\r
847 if(vfModelUUID != null && vfModelUUID.equalsIgnoreCase(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID))){
\r
849 List<String> artifacts = vfModuleStructure.getVfModuleMetadata().getArtifacts();
\r
851 for(String artifact: artifacts){
\r
854 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
857 if(artifact.equals(vfModuleArtifact.getArtifactInfo().getArtifactUUID())){
\r
858 //if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ARTIFACT)){
\r
859 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT)){
\r
860 vfModule.setHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
863 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_VOL)){
\r
864 vfModule.setVolHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
880 vfModule.setModelInvariantUuid(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)));
\r
881 vfModule.setModelName(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELNAME)));
\r
882 vfModule.setModelUUID(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID)));
\r
883 vfModule.setVersion(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELVERSION)));
\r
884 vfModule.setDescription(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
\r
885 //vfModule.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());
\r
886 //vfModule.setVolHeatTemplateArtifactUUId(toscaResourceStructure.getVolHeatTemplateUUID());
\r
888 vfModule.setVnfResourceModelUUId(toscaResourceStructure.getCatalogVnfResource().getModelUuid());
\r
890 String vfModuleType = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULETYPE);
\r
891 if(vfModuleType != null && "Base".equalsIgnoreCase(vfModuleType)){
\r
892 vfModule.setIsBase(1);
\r
894 vfModule.setIsBase(0);
\r
898 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
\r
899 vfModuleCustomization.setModelCustomizationUuid(vfModuleData.getVfModuleModelCustomizationUUID());
\r
902 vfModuleCustomization.setVfModuleModelUuid(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
\r
904 vfModuleCustomization.setHeatEnvironmentArtifactUuid(toscaResourceStructure.getEnvHeatTemplateUUID());
\r
907 vfModuleCustomization.setVolEnvironmentArtifactUuid(toscaResourceStructure.getVolHeatEnvTemplateUUID());
\r
909 String initialCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT);
\r
910 if(initialCount != null && initialCount.length() > 0){
\r
911 vfModuleCustomization.setInitialCount(Integer.valueOf(initialCount));
\r
914 vfModuleCustomization.setInitialCount(Integer.valueOf(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT)));
\r
916 String availabilityZoneCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT);
\r
917 if(availabilityZoneCount != null && availabilityZoneCount.length() > 0){
\r
918 vfModuleCustomization.setAvailabilityZoneCount(Integer.valueOf(availabilityZoneCount));
\r
922 vfModuleCustomization.setLabel(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULELABEL));
\r
924 String maxInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MAXVFMODULEINSTANCES);
\r
925 if(maxInstances != null && maxInstances.length() > 0){
\r
926 vfModuleCustomization.setMaxInstances(Integer.valueOf(maxInstances));
\r
929 String minInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);
\r
930 if(minInstances != null && minInstances.length() > 0){
\r
931 vfModuleCustomization.setMinInstances(Integer.valueOf(minInstances));
\r
934 toscaResourceStructure.setCatalogVfModule(vfModule);
\r
936 toscaResourceStructure.setCatalogVfModuleCustomization(vfModuleCustomization);
\r
940 private static void createVnfResourceToVfModuleCustomization(VnfResourceCustomization vnfResourceCustomization,
\r
941 VfModuleCustomization vfModuleCustomization,
\r
942 ToscaResourceStructure toscaResourceStructure) {
\r
944 VnfResCustomToVfModuleCustom vnfResCustomToVfModuleCustom = new VnfResCustomToVfModuleCustom();
\r
946 vnfResCustomToVfModuleCustom.setVfModuleCustModelCustomizationUuid(vfModuleCustomization.getModelCustomizationUuid());
\r
947 vnfResCustomToVfModuleCustom.setVnfResourceCustModelCustomizationUuid(vnfResourceCustomization.getModelCustomizationUuid());
\r
949 toscaResourceStructure.setCatalogVnfResCustomToVfModuleCustom(vnfResCustomToVfModuleCustom);
\r
956 private static void createTempNetworkHeatTemplateLookup(NetworkResource networkResource,
\r
957 VfModule vfModule,
\r
958 ToscaResourceStructure toscaResourceStructure) {
\r
960 TempNetworkHeatTemplateLookup tempNetworkHeatTemplateLookup = new TempNetworkHeatTemplateLookup();
\r
962 tempNetworkHeatTemplateLookup.setNetworkResourceModelName(networkResource.getModelName());
\r
963 tempNetworkHeatTemplateLookup.setHeatTemplateArtifactUuid(vfModule.getHeatTemplateArtifactUUId());
\r
964 tempNetworkHeatTemplateLookup.setAicVersionMin("1");
\r
966 toscaResourceStructure.setCatalogTempNetworkHeatTemplateLookup(tempNetworkHeatTemplateLookup);
\r
972 private static void createVnfResource(NodeTemplate vfNodeTemplate, ToscaResourceStructure toscaResourceStructure) {
\r
973 VnfResource vnfResource = new VnfResource();
\r
976 //toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT)
\r
978 vnfResource.setModelInvariantUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID).trim()));
\r
979 vnfResource.setModelName(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
980 vnfResource.setModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
982 vnfResource.setVersion(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION).trim()));
\r
983 vnfResource.setDescription(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION).trim()));
\r
984 vnfResource.setOrchestrationMode("HEAT");
\r
985 vnfResource.setToscaNodeType(testNull(vfNodeTemplate.getType()));
\r
986 vnfResource.setAicVersionMax(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES).trim()));
\r
987 vnfResource.setAicVersionMin(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES).trim()));
\r
988 //vnfResource.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());
\r
990 // vfNodeTemplate.getProperties()
\r
991 toscaResourceStructure.setCatalogVnfResource(vnfResource);
\r
993 VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization();
\r
994 vnfResourceCustomization.setModelCustomizationUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
995 vnfResourceCustomization.setModelInstanceName(vfNodeTemplate.getName());
\r
997 vnfResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)).trim());
\r
998 vnfResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)).trim());
\r
999 vnfResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)).trim());
\r
1000 vnfResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)).trim());
\r
1003 vnfResourceCustomization.setVnfResourceModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
1004 vnfResourceCustomization.setAvailabilityZoneMaxCount(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT).trim()));
\r
1006 vnfResourceCustomization.setMaxInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES).trim()));
\r
1007 vnfResourceCustomization.setMinInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES).trim()));
\r
1011 toscaResourceStructure.setCatalogVnfResourceCustomization(vnfResourceCustomization);
\r
1014 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
1015 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
1016 serviceToResourceCustomization.setResourceModelCustomizationUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim());
\r
1017 serviceToResourceCustomization.setModelType("vnf");
\r
1019 toscaResourceStructure.setCatalogVfServiceToResourceCustomization(serviceToResourceCustomization);
\r
1024 private static void createAllottedResource(NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure) {
\r
1025 AllottedResource allottedResource = new AllottedResource();
\r
1027 allottedResource.setModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
1028 allottedResource.setModelInvariantUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID).trim()));
\r
1029 allottedResource.setModelName(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
1030 allottedResource.setModelVersion(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION).trim()));
\r
1031 allottedResource.setToscaNodeType(testNull(nodeTemplate.getType()));
\r
1033 toscaResourceStructure.setAllottedResource(allottedResource);
\r
1035 AllottedResourceCustomization allottedResourceCustomization = new AllottedResourceCustomization();
\r
1036 allottedResourceCustomization.setModelCustomizationUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
1037 allottedResourceCustomization.setModelInstanceName(nodeTemplate.getName());
\r
1038 allottedResourceCustomization.setArModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
1040 allottedResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)).trim());
\r
1041 allottedResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)).trim());
\r
1042 allottedResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)).trim());
\r
1043 allottedResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)).trim());
\r
1045 toscaResourceStructure.setCatalogAllottedResourceCustomization(allottedResourceCustomization);
\r
1047 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
1048 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
1049 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
1050 serviceToResourceCustomization.setModelType("allottedResource");
\r
1052 toscaResourceStructure.setCatalogAllottedServiceToResourceCustomization(serviceToResourceCustomization);
\r
1056 private static Set<HeatTemplateParam> extractHeatTemplateParameters(String yamlFile, String artifactUUID) {
\r
1058 // Scan the payload downloadResult and extract the HeatTemplate
\r
1060 YamlEditor yamlEditor = new YamlEditor(yamlFile.getBytes());
\r
1061 return yamlEditor.getParameterList(artifactUUID);
\r
1065 private static String identifyParentOfNestedTemplate(VfModuleStructure vfModuleStructure,VfModuleArtifact heatNestedArtifact) {
\r
1067 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT) != null
\r
1068 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0).getArtifactInfo().getRelatedArtifacts() != null) {
\r
1069 for (IArtifactInfo unknownArtifact : vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0)
\r
1070 .getArtifactInfo().getRelatedArtifacts()) {
\r
1071 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {
\r
1072 return ASDCConfiguration.HEAT;
\r
1078 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL) != null
\r
1079 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts() != null) {
\r
1080 for (IArtifactInfo unknownArtifact:vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts()) {
\r
1081 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {
\r
1082 return ASDCConfiguration.HEAT_VOL;
\r
1088 // Does not belong to anything
\r
1093 private static String testNull(Object object) {
\r
1094 if (object == null) {
\r
1096 } else if ("null".equals(object)) {
\r
1098 }else if (object instanceof Integer) {
\r
1099 return object.toString();
\r
1100 } else if (object instanceof String) {
\r
1101 return (String)object;
\r
1103 return "Type not recognized";
\r
1107 private static String createVNFName(VfResourceStructure vfResourceStructure) {
\r
1109 return vfResourceStructure.getNotification().getServiceName() + "/" + vfResourceStructure.getResourceInstance().getResourceInstanceName();
\r
1112 private static String createVfModuleName(VfModuleStructure vfModuleStructure) {
\r
1114 return createVNFName(vfModuleStructure.getParentVfResource())+"::"+vfModuleStructure.getVfModuleMetadata().getVfModuleModelName();
\r
1118 private static Timestamp getCurrentTimeStamp() {
\r
1120 return new Timestamp(new Date().getTime());
\r