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.SQLIntegrityConstraintViolationException;
\r
25 import java.sql.Timestamp;
\r
26 import java.text.SimpleDateFormat;
\r
27 import java.util.ArrayList;
\r
28 import java.util.Date;
\r
29 import java.util.HashMap;
\r
30 import java.util.Iterator;
\r
31 import java.util.LinkedHashMap;
\r
32 import java.util.List;
\r
33 import java.util.Map;
\r
34 import java.util.Set;
\r
35 import java.util.regex.Pattern;
\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.sdc.api.consumer.IComponentDoneStatusMessage;
\r
42 //import org.openecomp.generic.tosca.parser.model.Metadata;
\r
43 //import org.openecomp.generic.tosca.parser.model.NodeTemplate;
\r
44 import org.openecomp.sdc.api.notification.IArtifactInfo;
\r
45 import org.openecomp.sdc.api.notification.IStatusData;
\r
46 import org.openecomp.sdc.api.notification.IVfModuleMetadata;
\r
47 import org.openecomp.sdc.api.results.IDistributionClientResult;
\r
48 import org.openecomp.sdc.tosca.parser.impl.SdcPropertyNames;
\r
49 import org.openecomp.sdc.toscaparser.api.Group;
\r
50 import org.openecomp.sdc.toscaparser.api.NodeTemplate;
\r
51 import org.openecomp.sdc.toscaparser.api.Property;
\r
52 import org.openecomp.sdc.toscaparser.api.elements.Metadata;
\r
53 import org.openecomp.sdc.toscaparser.api.parameters.Input;
\r
54 import org.openecomp.sdc.utils.DistributionStatusEnum;
\r
55 import org.openecomp.mso.asdc.client.ASDCConfiguration;
\r
56 import org.openecomp.mso.asdc.client.exceptions.ArtifactInstallerException;
\r
57 import org.openecomp.mso.asdc.installer.ASDCElementInfo;
\r
58 import org.openecomp.mso.asdc.installer.BigDecimalVersion;
\r
59 import org.openecomp.mso.asdc.installer.IVfModuleData;
\r
60 import org.openecomp.mso.asdc.installer.IVfResourceInstaller;
\r
61 import org.openecomp.mso.asdc.installer.ToscaResourceStructure;
\r
62 import org.openecomp.mso.asdc.installer.VfModuleArtifact;
\r
63 import org.openecomp.mso.asdc.installer.VfModuleStructure;
\r
64 import org.openecomp.mso.asdc.installer.VfResourceStructure;
\r
65 import org.openecomp.mso.asdc.tenantIsolation.DistributionStatus;
\r
66 import org.openecomp.mso.asdc.tenantIsolation.WatchdogDistribution;
\r
67 import org.openecomp.mso.asdc.util.ASDCNotificationLogging;
\r
68 import org.openecomp.mso.asdc.util.YamlEditor;
\r
69 import org.openecomp.mso.db.catalog.CatalogDatabase;
\r
70 import org.openecomp.mso.db.catalog.beans.AllottedResource;
\r
71 import org.openecomp.mso.db.catalog.beans.HeatEnvironment;
\r
72 import org.openecomp.mso.db.catalog.beans.HeatFiles;
\r
73 import org.openecomp.mso.db.catalog.beans.HeatTemplate;
\r
74 import org.openecomp.mso.db.catalog.beans.HeatTemplateParam;
\r
75 import org.openecomp.mso.db.catalog.beans.NetworkResource;
\r
76 import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization;
\r
77 import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization;
\r
78 import org.openecomp.mso.db.catalog.beans.Service;
\r
79 import org.openecomp.mso.db.catalog.beans.ServiceToAllottedResources;
\r
80 import org.openecomp.mso.db.catalog.beans.ServiceToNetworks;
\r
81 import org.openecomp.mso.db.catalog.beans.ServiceToResourceCustomization;
\r
82 import org.openecomp.mso.db.catalog.beans.TempNetworkHeatTemplateLookup;
\r
83 import org.openecomp.mso.db.catalog.beans.ToscaCsar;
\r
84 import org.openecomp.mso.db.catalog.beans.VfModule;
\r
85 import org.openecomp.mso.db.catalog.beans.VfModuleCustomization;
\r
86 import org.openecomp.mso.db.catalog.beans.VfModuleToHeatFiles;
\r
87 import org.openecomp.mso.db.catalog.beans.VnfResCustomToVfModuleCustom;
\r
88 import org.openecomp.mso.db.catalog.beans.VnfResource;
\r
89 import org.openecomp.mso.db.catalog.beans.VnfResourceCustomization;
\r
90 import org.openecomp.mso.logger.MessageEnum;
\r
91 import org.openecomp.mso.logger.MsoLogger;
\r
92 import org.openecomp.mso.requestsdb.WatchdogComponentDistributionStatusDb;
\r
93 import org.openecomp.mso.requestsdb.WatchdogDistributionStatusDb;
\r
94 import org.openecomp.mso.requestsdb.WatchdogServiceModVerIdLookupDb;
\r
96 public class ToscaResourceInstaller {// implements IVfResourceInstaller {
\r
98 private MsoLogger logger;
\r
100 private static final Pattern lastDigit = Pattern.compile("(\\d+)$");
\r
102 public ToscaResourceInstaller() {
\r
103 logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.ASDC);
\r
107 public boolean isResourceAlreadyDeployed(VfResourceStructure vfResourceStruct)
\r
108 throws ArtifactInstallerException {
\r
109 boolean status = false;
\r
110 VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct;
\r
112 status = vfResourceStructure.isDeployedSuccessfully();
\r
113 } catch (RuntimeException e) {
\r
119 String serviceUUID = vfResourceStruct.getNotification().getServiceUUID();
\r
122 logger.info(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED_DETAIL,
\r
123 vfResourceStructure.getResourceInstance().getResourceInstanceName(),
\r
124 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),
\r
125 vfResourceStructure.getNotification().getServiceName(),
\r
126 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
127 vfResourceStructure.getNotification().getServiceVersion()),
\r
128 vfResourceStructure.getNotification().getServiceUUID(),
\r
129 vfResourceStructure.getResourceInstance().getResourceName(),"", "");
\r
131 logger.info(MessageEnum.ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL,
\r
132 vfResourceStructure.getResourceInstance().getResourceInstanceName(),
\r
133 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),
\r
134 vfResourceStructure.getNotification().getServiceName(),
\r
135 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
136 vfResourceStructure.getNotification().getServiceVersion()),
\r
137 vfResourceStructure.getNotification().getServiceUUID(),
\r
138 vfResourceStructure.getResourceInstance().getResourceName(),"", "");
\r
143 } catch (Exception e) {
\r
144 logger.error(MessageEnum.ASDC_ARTIFACT_CHECK_EXC, "", "", MsoLogger.ErrorCode.SchemaError, "Exception - isResourceAlreadyDeployed");
\r
145 throw new ArtifactInstallerException("Exception caught during checking existence of the VNF Resource.", e);
\r
149 public void installTheComponentStatus(IStatusData iStatus) throws ArtifactInstallerException {
\r
151 logger.debug("Entering installTheComponentStatus for distributionId " + iStatus.getDistributionID() + " and ComponentName " + iStatus.getComponentName());
\r
153 WatchdogComponentDistributionStatusDb wdComponentDistributionStatus = WatchdogComponentDistributionStatusDb.getInstance();
\r
155 WatchdogDistributionStatusDb wdDistributionStatus = WatchdogDistributionStatusDb.getInstance();
\r
159 //Check to make sure the distributionId exists in the Distribution Status table first. If not then we'll need to add it
\r
160 String distributionId = wdDistributionStatus.getWatchdogDistributionId(iStatus.getDistributionID());
\r
162 if(distributionId == null){
\r
163 // Insert the record into the parent table first - WatchDogDistributionStatus
\r
164 wdDistributionStatus.insertWatchdogDistributionId(iStatus.getDistributionID());
\r
167 wdComponentDistributionStatus.insertWatchdogComponentDistributionStatus(iStatus.getDistributionID(), iStatus.getComponentName(), iStatus.getStatus().toString());
\r
170 WatchdogDistribution wd = new WatchdogDistribution();
\r
172 String distributionStatus = wd.getOverallDistributionStatus(iStatus.getDistributionID());
\r
174 logger.debug("Distribution status in installTheComponentStatus is : " + distributionStatus);
\r
176 }catch (Exception e){
\r
177 logger.debug("Exception caught in installTheComponentStatus " + e.getMessage());
\r
178 throw new ArtifactInstallerException("Exception caught in installTheComponentStatus " + e.getMessage());
\r
184 public void installTheResource(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStruct) throws ArtifactInstallerException {
\r
186 logger.debug("installTheResource is called");
\r
188 VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct;
\r
190 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
192 switch (vfModuleArtifact.getArtifactInfo().getArtifactType()) {
\r
193 case ASDCConfiguration.HEAT:
\r
194 case ASDCConfiguration.HEAT_VOL:
\r
195 case ASDCConfiguration.HEAT_NESTED:
\r
196 ToscaResourceInstaller.createHeatTemplateFromArtifact(vfResourceStructure, toscaResourceStruct, vfModuleArtifact);
\r
198 case ASDCConfiguration.HEAT_ENV:
\r
199 ToscaResourceInstaller.createHeatEnvFromArtifact(vfResourceStructure, vfModuleArtifact);
\r
201 case ASDCConfiguration.HEAT_ARTIFACT:
\r
202 ToscaResourceInstaller.createHeatFileFromArtifact(vfResourceStructure, vfModuleArtifact, toscaResourceStruct);
\r
204 case ASDCConfiguration.HEAT_NET:
\r
205 case ASDCConfiguration.OTHER:
\r
206 logger.warn(MessageEnum.ASDC_ARTIFACT_TYPE_NOT_SUPPORT, vfModuleArtifact.getArtifactInfo().getArtifactType()+"(Artifact Name:"+vfModuleArtifact.getArtifactInfo().getArtifactName()+")", "", "", MsoLogger.ErrorCode.DataError, "Artifact type not supported");
\r
213 // Those objects could be reused by different VfModule
\r
217 // PCLO: in case of deployment failure, use a string that will represent the type of artifact that failed...
\r
218 List<ASDCElementInfo> artifactListForLogging = new ArrayList<>();
\r
220 CatalogDatabase catalogDB = CatalogDatabase.getInstance();
\r
222 WatchdogServiceModVerIdLookupDb wdLookupDB = WatchdogServiceModVerIdLookupDb.getInstance();
\r
224 WatchdogDistributionStatusDb wdDistributionStatus = WatchdogDistributionStatusDb.getInstance();
\r
226 WatchdogComponentDistributionStatusDb wdComponentDistributionStatus = WatchdogComponentDistributionStatusDb.getInstance();
\r
227 // 2. Create the VFModules/VNFResource objects by linking them to the
\r
228 // objects created before and store them in Resource/module structure
\r
229 // Opening a DB transaction, starting from here
\r
233 createToscaCsar(toscaResourceStruct);
\r
235 catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());
\r
237 ToscaResourceInstaller.createService(toscaResourceStruct, vfResourceStruct);
\r
239 catalogDB.saveService(toscaResourceStruct.getCatalogService());
\r
241 wdLookupDB.insertWatchdogServiceModVerIdLookup(vfResourceStructure.getNotification().getDistributionID(), vfResourceStructure.getNotification().getServiceUUID());
\r
243 wdDistributionStatus.insertWatchdogDistributionId(vfResourceStructure.getNotification().getDistributionID());
\r
247 * ************************************************************************************************************
\r
250 // Ingest (VNF) Data - 1707
\r
251 List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();
\r
253 logger.debug("**vfMondeTEmplatesList.size()=" + vfNodeTemplatesList.size());
\r
254 for (NodeTemplate nodeTemplate : vfNodeTemplatesList) {
\r
255 logger.debug("nodeTemplate outerLoop=" + outerLoop++);
\r
256 // extract VF metadata
\r
258 Metadata metadata = nodeTemplate.getMetaData();
\r
262 //************************Flexware code*******************************************
\r
264 String serviceType = toscaResourceStruct.getCatalogService().getServiceType();
\r
267 if(serviceType != null && serviceType.equalsIgnoreCase("Flexware")){
\r
269 createVnfResource(nodeTemplate, toscaResourceStruct);
\r
271 // check for duplicate record already in the database
\r
272 VnfResource vnfResource = catalogDB.getVnfResource(toscaResourceStruct.getCatalogVnfResource().getModelName(),
\r
273 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
274 toscaResourceStruct.getCatalogVnfResource().getVersion()));
\r
276 if (vnfResource != null) {
\r
277 toscaResourceStruct.setVnfAlreadyInstalled(true);
\r
281 if(!toscaResourceStruct.isVnfAlreadyInstalled()) {
\r
283 catalogDB.saveOrUpdateVnfResource(toscaResourceStruct.getCatalogVnfResource());
\r
288 boolean saveVnfCustomization = catalogDB.saveVnfResourceCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization());
\r
290 if(saveVnfCustomization){
\r
291 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVfServiceToResourceCustomization());
\r
298 // *************************** END of FLEXWARE CODE ****************************************************
\r
300 String vfCustomizationCategory = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CATEGORY);
\r
302 if(!vfCustomizationCategory.equalsIgnoreCase("Allotted Resource")) // Do not treat Allotted Resources as VNF resources
\r
305 String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
\r
306 logger.debug("vfCustomizationUUID=" + vfCustomizationUUID);
\r
309 /* HEAT TABLE POPULATION
\r
310 * *******************************************************************************************************
\r
314 for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) {
\r
315 logger.debug("vfResourceStructure.getVfModuleStructure() loop, nextLoop = " + nextLoop++);
\r
316 logger.debug("vfModuleStructure:" + vfModuleStructure.toString());
\r
318 // Here we set the right db structure according to the Catalog
\r
321 // We expect only one MAIN HEAT per VFMODULE
\r
322 // we can also obtain from it the Env ArtifactInfo, that's why
\r
324 // get the Main IArtifactInfo
\r
326 HeatTemplate heatMainTemplate = null;
\r
327 HeatEnvironment heatEnv;
\r
329 HeatTemplate heatVolumeTemplate = null;
\r
330 HeatEnvironment heatVolumeEnv;
\r
333 IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata();
\r
336 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT)) {
\r
338 List<VfModuleArtifact> artifacts = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT);
\r
339 logger.debug("there are " + artifacts.size() + " artifacts");
\r
340 IArtifactInfo mainEnvArtifactInfo = null;
\r
341 for (VfModuleArtifact vfma : artifacts) {
\r
342 logger.debug("vmfa=" + vfma.toString());
\r
343 mainEnvArtifactInfo =
\r
344 vfma.getArtifactInfo().getGeneratedArtifact();
\r
347 heatMainTemplate = (HeatTemplate) vfma.getCatalogObject();
\r
349 // Set HeatTemplateArtifactUUID to use later when setting the VfModule and NetworkResource
\r
350 toscaResourceStruct.setHeatTemplateUUID(heatMainTemplate.getArtifactUuid());
\r
352 // Add this one for logging
\r
353 artifactListForLogging.add(ASDCElementInfo
\r
354 .createElementFromVfArtifactInfo(vfma.getArtifactInfo()));
\r
356 catalogDB.saveHeatTemplate(heatMainTemplate, heatMainTemplate.getParameters());
\r
357 // Indicate we have deployed it in the DB
\r
358 vfma.incrementDeployedInDB();
\r
363 // We expect only one VOL HEAT per VFMODULE
\r
364 // we can also obtain from it the Env ArtifactInfo, that's why
\r
365 // we get the Volume IArtifactInfo
\r
367 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_VOL)) {
\r
368 IArtifactInfo volEnvArtifactInfo = vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0)
\r
369 .getArtifactInfo().getGeneratedArtifact();
\r
371 heatVolumeTemplate = (HeatTemplate) vfModuleStructure.getArtifactsMap()
\r
372 .get(ASDCConfiguration.HEAT_VOL).get(0).getCatalogObject();
\r
374 // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule
\r
375 toscaResourceStruct.setVolHeatTemplateUUID(heatVolumeTemplate.getArtifactUuid());
\r
378 // Add this one for logging
\r
379 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo()));
\r
381 catalogDB.saveHeatTemplate(heatVolumeTemplate, heatVolumeTemplate.getParameters());
\r
382 // Indicate we have deployed it in the DB
\r
383 vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).incrementDeployedInDB();
\r
385 if (volEnvArtifactInfo != null) {
\r
386 heatVolumeEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()
\r
387 .get(volEnvArtifactInfo.getArtifactUUID()).getCatalogObject();
\r
389 // Set VolHeatTemplate ArtifactUUID to use later when setting the VfModule
\r
390 toscaResourceStruct.setVolHeatEnvTemplateUUID(heatVolumeEnv.getArtifactUuid());
\r
392 // Add this one for logging
\r
393 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(volEnvArtifactInfo));
\r
395 catalogDB.saveHeatEnvironment(heatVolumeEnv);
\r
396 // Indicate we have deployed it in the DB
\r
397 vfResourceStructure.getArtifactsMapByUUID().get(volEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();
\r
403 // Here we expect many HEAT_NESTED template to be there
\r
404 // XXX FIX BY PCLO: Defect# -36643 -US666034 - check first if we really have nested heat templates
\r
405 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_NESTED)) {
\r
406 for (VfModuleArtifact heatNestedArtifact : vfModuleStructure.getArtifactsMap()
\r
407 .get(ASDCConfiguration.HEAT_NESTED)) {
\r
409 // Check if this nested is well referenced by the MAIN HEAT
\r
410 String parentArtifactType = ToscaResourceInstaller.identifyParentOfNestedTemplate(vfModuleStructure,heatNestedArtifact);
\r
411 HeatTemplate heatNestedTemplate = (HeatTemplate) heatNestedArtifact.getCatalogObject();
\r
413 if (parentArtifactType != null) {
\r
415 switch (parentArtifactType) {
\r
416 case ASDCConfiguration.HEAT:
\r
418 // Add this one for logging
\r
419 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));
\r
421 catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
422 // Indicate we have deployed it in the DB
\r
423 heatNestedArtifact.incrementDeployedInDB();
\r
425 case ASDCConfiguration.HEAT_VOL:
\r
427 // Add this one for logging
\r
428 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));
\r
429 catalogDB.saveNestedHeatTemplate (heatVolumeTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
430 // Indicate we have deployed it in the DB
\r
431 heatNestedArtifact.incrementDeployedInDB();
\r
438 } else { // Assume it belongs to HEAT MAIN
\r
439 // Add this one for logging
\r
440 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));
\r
442 catalogDB.saveNestedHeatTemplate (heatMainTemplate.getArtifactUuid(), heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
443 // Indicate we have deployed it in the DB
\r
444 heatNestedArtifact.incrementDeployedInDB();
\r
449 if (mainEnvArtifactInfo != null) {
\r
450 heatEnv = (HeatEnvironment) vfResourceStructure.getArtifactsMapByUUID()
\r
451 .get(mainEnvArtifactInfo.getArtifactUUID()).getCatalogObject();
\r
453 // Set HeatEnvironmentArtifactUUID to use later when setting the VfModule
\r
454 toscaResourceStruct.setEnvHeatTemplateUUID(heatEnv.getArtifactUuid());
\r
456 // Add this one for logging
\r
457 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(mainEnvArtifactInfo));
\r
459 catalogDB.saveHeatEnvironment(heatEnv);
\r
460 // Indicate we have deployed it in the DB
\r
461 vfResourceStructure.getArtifactsMapByUUID().get(mainEnvArtifactInfo.getArtifactUUID()).incrementDeployedInDB();
\r
464 // here we expect one VFModule to be there
\r
465 //VfResourceInstaller.createVfModule(vfModuleStructure,heatMainTemplate, heatVolumeTemplate, heatEnv, heatVolumeEnv);
\r
466 //VfModule vfModule = vfModuleStructure.getCatalogVfModule();
\r
468 // Add this one for logging
\r
469 //artifactListForLogging.add(ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure));
\r
471 //catalogDB.saveOrUpdateVfModule(vfModule);
\r
474 // extract VF metadata
\r
475 createVnfResource(nodeTemplate, toscaResourceStruct);
\r
477 // check for duplicate record already in the database
\r
478 VnfResource vnfResource = catalogDB.getVnfResource(toscaResourceStruct.getCatalogVnfResource().getModelName(),
\r
479 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
480 toscaResourceStruct.getCatalogVnfResource().getVersion()));
\r
482 if (vnfResource != null) {
\r
483 toscaResourceStruct.setVnfAlreadyInstalled(true);
\r
487 if(!toscaResourceStruct.isVnfAlreadyInstalled()) {
\r
489 catalogDB.saveOrUpdateVnfResource(toscaResourceStruct.getCatalogVnfResource());
\r
494 catalogDB.saveVnfResourceCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization());
\r
496 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVfServiceToResourceCustomization());
\r
499 List<org.openecomp.sdc.toscaparser.api.Group> vfGroups = toscaResourceStruct.getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID);
\r
500 logger.debug("vfGroups:" + vfGroups.toString());
\r
502 vfGroups.sort((group1, group2) -> {
\r
503 //Field name1Field = group1.class.getDeclaredField("name");
\r
504 //name1Field.setAccessible(true);
\r
505 String thisName = group1.getName(); //(String) name1Field.get(group1);
\r
506 String thatName = group2.getName(); // (String) name1Field.get(group2);
\r
508 Matcher m = lastDigit.matcher(thisName);
\r
509 Matcher m2 = lastDigit.matcher(thatName);
\r
511 String thisDigit = "0";
\r
512 String thatDigit = "0";
\r
514 thisDigit = m.group();
\r
519 thatDigit = m2.group();
\r
524 return new Integer(thisDigit).compareTo(new Integer(thatDigit));
\r
527 logger.debug("vfGroupsAfter:" + vfGroups.toString());
\r
530 for(Group group : vfGroups){
\r
533 //boolean saveVFModule = createVFModule(group, nodeTemplate, toscaResourceStruct, vfMetadata);
\r
534 if (vfMetadata.getVfModuleModelCustomizationUUID() == null) {
\r
535 logger.debug("NULL 1");
\r
537 logger.debug("vfMetadata.getMCU=" + vfMetadata.getVfModuleModelCustomizationUUID());
\r
539 if (group.getMetadata() == null) {
\r
540 logger.debug("NULL 3");
\r
542 logger.debug("group.getMetadata().getValue() = " + group.getMetadata().getValue("vfModuleModelCustomizationUUID"));
\r
544 if (vfMetadata.getVfModuleModelCustomizationUUID().equals(group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) {
\r
545 logger.debug("Found a match at " + vfMetadata.getVfModuleModelCustomizationUUID());
\r
546 createVFModule(group, nodeTemplate, toscaResourceStruct, vfResourceStructure, vfMetadata);
\r
548 catalogDB.saveOrUpdateVfModule(toscaResourceStruct.getCatalogVfModule());
\r
550 catalogDB.saveOrUpdateVfModuleCustomization(toscaResourceStruct.getCatalogVfModuleCustomization());
\r
552 catalogDB.saveVnfResourceToVfModuleCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct.getCatalogVfModuleCustomization());
\r
556 if(toscaResourceStruct.getCatalogVfModuleCustomization() != null){
\r
557 logger.debug("No match for " + toscaResourceStruct.getCatalogVfModuleCustomization().getModelCustomizationUuid());
\r
559 logger.debug("No match for vfModuleModelCustomizationUUID");
\r
565 } //Commented out to process VFModules each time
\r
567 // Here we expect many HEAT_TEMPLATE files to be there
\r
568 if (vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_ARTIFACT)) {
\r
569 for (VfModuleArtifact heatArtifact : vfModuleStructure.getArtifactsMap()
\r
570 .get(ASDCConfiguration.HEAT_ARTIFACT)) {
\r
572 HeatFiles heatFile = (HeatFiles) heatArtifact.getCatalogObject();
\r
574 // Add this one for logging
\r
575 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(heatArtifact.getArtifactInfo()));
\r
577 if(toscaResourceStruct.getCatalogVfModule() != null && heatFile != null){
\r
578 catalogDB.saveVfModuleToHeatFiles (toscaResourceStruct.getCatalogVfModule().getModelUUID(), heatFile);
\r
580 // Indicate we will deploy it in the DB
\r
581 heatArtifact.incrementDeployedInDB();
\r
589 /* END OF HEAT TABLE POPULATION
\r
590 * ***************************************************************************************************
\r
594 // throw new ArtifactInstallerException("TESTING");
\r
597 List<NodeTemplate> allottedResourceList = toscaResourceStruct.getSdcCsarHelper().getAllottedResources();
\r
599 if(allottedResourceList != null){
\r
601 for(NodeTemplate allottedNode : allottedResourceList){
\r
603 createAllottedResource(allottedNode, toscaResourceStruct);
\r
605 catalogDB.saveAllottedResource(toscaResourceStruct.getAllottedResource());
\r
607 catalogDB.saveAllottedResourceCustomization(toscaResourceStruct.getCatalogAllottedResourceCustomization());
\r
609 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogAllottedServiceToResourceCustomization());
\r
615 List<NodeTemplate> nodeTemplatesVLList = toscaResourceStruct.getSdcCsarHelper().getServiceVlList();
\r
617 if(nodeTemplatesVLList != null){
\r
619 for(NodeTemplate vlNode : nodeTemplatesVLList){
\r
621 String networkResourceModelName = vlNode.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME);
\r
623 List<TempNetworkHeatTemplateLookup> networkHeatTemplateLookup = catalogDB.getTempNetworkHeatTemplateLookup(networkResourceModelName);
\r
625 if(networkHeatTemplateLookup != null && networkHeatTemplateLookup.size() > 0 ){
\r
627 createNetworkResource(vlNode, toscaResourceStruct, networkHeatTemplateLookup.get(0));
\r
630 logger.info(MessageEnum.ASDC_GENERAL_INFO,
\r
631 "No NetworkResourceName found in TempNetworkHeatTemplateLookup for" + networkResourceModelName, "ASDC",
\r
632 "createVfModuleStructures");
\r
633 createNetworkResource(vlNode, toscaResourceStruct, null);
\r
637 catalogDB.saveNetworkResource(toscaResourceStruct.getCatalogNetworkResource());
\r
639 catalogDB.saveNetworkResourceCustomization(toscaResourceStruct.getCatalogNetworkResourceCustomization());
\r
641 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVlServiceToResourceCustomization());
\r
647 //createServiceToResourceCustomization(toscaResourceStruct.getCatalogService(), toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct);
\r
649 // catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());
\r
650 wdComponentDistributionStatus.insertWatchdogComponentDistributionStatus(vfResourceStruct.getNotification().getDistributionID(), "SO", DistributionStatusEnum.COMPONENT_DONE_OK.name());
\r
652 catalogDB.commit();
\r
653 toscaResourceStruct.setSuccessfulDeployment();
\r
655 }catch(Exception e){
\r
656 logger.debug("Exception :",e);
\r
658 wdDistributionStatus.insertWatchdogDistributionId(vfResourceStructure.getNotification().getDistributionID());
\r
660 wdComponentDistributionStatus.insertWatchdogComponentDistributionStatus(vfResourceStruct.getNotification().getDistributionID(), "SO", DistributionStatusEnum.COMPONENT_DONE_ERROR.name());
\r
662 wdDistributionStatus.updateWatchdogDistributionIdStatus(vfResourceStruct.getNotification().getDistributionID(), DistributionStatusEnum.DISTRIBUTION_COMPLETE_ERROR.name());
\r
664 Throwable dbExceptionToCapture = e;
\r
665 while (!(dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException)
\r
666 && (dbExceptionToCapture.getCause() != null)) {
\r
667 dbExceptionToCapture = dbExceptionToCapture.getCause();
\r
670 if (dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException) {
\r
671 logger.warn(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED, vfResourceStructure.getResourceInstance().getResourceName(),
\r
672 vfResourceStructure.getNotification().getServiceVersion(), "", "", MsoLogger.ErrorCode.DataError, "Exception - ASCDC Artifact already deployed", e);
\r
674 String elementToLog = (artifactListForLogging.size() > 0 ? artifactListForLogging.get(artifactListForLogging.size()-1).toString() : "No element listed");
\r
675 logger.error(MessageEnum.ASDC_ARTIFACT_INSTALL_EXC, elementToLog, "", "", MsoLogger.ErrorCode.DataError, "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback", e);
\r
676 catalogDB.rollback();
\r
677 throw new ArtifactInstallerException(
\r
678 "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback.", e);
\r
688 public static String verifyTheFilePrefixInArtifacts(String filebody, VfResourceStructure vfResourceStructure, List<String> listTypes) {
\r
689 String newFileBody = filebody;
\r
690 for (VfModuleArtifact moduleArtifact:vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
692 if (listTypes.contains(moduleArtifact.getArtifactInfo().getArtifactType())) {
\r
694 newFileBody = verifyTheFilePrefixInString(newFileBody,moduleArtifact.getArtifactInfo().getArtifactName());
\r
697 return newFileBody;
\r
700 public static String verifyTheFilePrefixInString(final String body, final String filenameToVerify) {
\r
702 String needlePrefix = "file:///";
\r
703 String prefixedFilenameToVerify = needlePrefix+filenameToVerify;
\r
705 if ((body == null) || (body.length() == 0) || (filenameToVerify == null) || (filenameToVerify.length() == 0)) {
\r
709 StringBuilder sb = new StringBuilder(body.length());
\r
711 int currentIndex = 0;
\r
712 int startIndex = 0;
\r
714 while (currentIndex != -1) {
\r
715 startIndex = currentIndex;
\r
716 currentIndex = body.indexOf(prefixedFilenameToVerify, startIndex);
\r
718 if (currentIndex == -1) {
\r
722 // We append from the startIndex up to currentIndex (start of File Name)
\r
723 sb.append(body.substring(startIndex, currentIndex));
\r
724 sb.append(filenameToVerify);
\r
726 currentIndex += prefixedFilenameToVerify.length();
\r
729 sb.append(body.substring(startIndex));
\r
731 return sb.toString();
\r
735 private static void createHeatTemplateFromArtifact(VfResourceStructure vfResourceStructure,ToscaResourceStructure toscaResourceStruct,
\r
736 VfModuleArtifact vfModuleArtifact) {
\r
737 HeatTemplate heatTemplate = new HeatTemplate();
\r
739 // TODO Set the label
\r
740 // heatTemplate.setAsdcLabel("label");
\r
741 // Use the ResourceName of the ASDC template because the HEAT could be
\r
743 // heatTemplate.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());
\r
744 heatTemplate.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
746 List<String> typeList = new ArrayList<>();
\r
747 typeList.add(ASDCConfiguration.HEAT_NESTED);
\r
748 typeList.add(ASDCConfiguration.HEAT_ARTIFACT);
\r
750 heatTemplate.setTemplateBody(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));
\r
751 heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
753 if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {
\r
754 heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());
\r
756 heatTemplate.setTimeoutMinutes(240);
\r
759 //toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
761 heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
762 heatTemplate.setVersion(BigDecimalVersion
\r
763 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
764 heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
766 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
767 heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
769 heatTemplate.setArtifactChecksum("MANUAL_RECORD");
\r
772 Set<HeatTemplateParam> heatParam = ToscaResourceInstaller
\r
773 .extractHeatTemplateParameters(vfModuleArtifact.getResult(), vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
774 heatTemplate.setParameters(heatParam);
\r
775 //heatTemplate.setCreated(getCurrentTimeStamp());
\r
777 vfModuleArtifact.setCatalogObject(heatTemplate);
\r
780 private static void createHeatEnvFromArtifact(VfResourceStructure vfResourceStructure,
\r
781 VfModuleArtifact vfModuleArtifact) {
\r
782 HeatEnvironment heatEnvironment = new HeatEnvironment();
\r
784 heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
785 // TODO Set the label
\r
786 // heatEnvironment.setAsdcLabel("Label");
\r
788 List<String> typeList = new ArrayList<>();
\r
789 typeList.add(ASDCConfiguration.HEAT);
\r
790 typeList.add(ASDCConfiguration.HEAT_VOL);
\r
792 heatEnvironment.setEnvironment(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));
\r
793 // heatEnvironment.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
794 heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
795 heatEnvironment.setVersion(BigDecimalVersion
\r
796 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
797 // heatEnvironment.setAsdcResourceName(VfResourceInstaller.createVNFName(vfResourceStructure));
\r
798 heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
800 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
801 heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
803 heatEnvironment.setArtifactChecksum("MANUAL_RECORD");
\r
805 //heatEnvironment.setCreated(getCurrentTimeStamp());
\r
807 vfModuleArtifact.setCatalogObject(heatEnvironment);
\r
811 private static void createHeatFileFromArtifact(VfResourceStructure vfResourceStructure,
\r
812 VfModuleArtifact vfModuleArtifact, ToscaResourceStructure toscaResourceStruct) {
\r
814 HeatFiles heatFile = new HeatFiles();
\r
815 // TODO Set the label
\r
816 // heatFile.setAsdcLabel("Label");
\r
817 heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
818 heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
819 heatFile.setFileBody(vfModuleArtifact.getResult());
\r
820 heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
821 heatFile.setVersion(BigDecimalVersion
\r
822 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
824 toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
825 //heatFile.setCreated(getCurrentTimeStamp());
\r
827 // heatFile.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());
\r
830 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
831 heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
833 heatFile.setArtifactChecksum("MANUAL_RECORD");
\r
836 vfModuleArtifact.setCatalogObject(heatFile);
\r
840 private static void createService(ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure) {
\r
842 toscaResourceStructure.getServiceMetadata();
\r
844 Metadata serviceMetadata = toscaResourceStructure.getServiceMetadata();
\r
846 Service service = new Service();
\r
849 if(serviceMetadata != null) {
\r
851 if(toscaResourceStructure.getServiceVersion() != null){
\r
852 service.setVersion(toscaResourceStructure.getServiceVersion());
\r
855 service.setServiceType(serviceMetadata.getValue("serviceType"));
\r
856 service.setServiceRole(serviceMetadata.getValue("serviceRole"));
\r
858 service.setDescription(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
\r
859 service.setModelName(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
\r
860 service.setModelUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
\r
861 service.setEnvironmentContext(serviceMetadata.getValue("environmentContext"));
\r
864 if(vfResourceStructure != null){
\r
865 service.setWorkloadContext(vfResourceStructure.getNotification().getWorkloadContext());
\r
867 //service.setVersion(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
\r
868 service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
\r
869 service.setCategory(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
\r
870 service.setToscaCsarArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());
\r
871 //service.setCreated(getCurrentTimeStamp());
\r
874 toscaResourceStructure.setCatalogService(service);
\r
877 private static void createToscaCsar(ToscaResourceStructure toscaResourceStructure) {
\r
879 ToscaCsar toscaCsar = new ToscaCsar();
\r
880 if(toscaResourceStructure.getToscaArtifact().getArtifactChecksum() != null){
\r
881 toscaCsar.setArtifactChecksum(toscaResourceStructure.getToscaArtifact().getArtifactChecksum());
\r
883 toscaCsar.setArtifactChecksum("MANUAL_RECORD");
\r
885 toscaCsar.setArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());
\r
886 toscaCsar.setName(toscaResourceStructure.getToscaArtifact().getArtifactName());
\r
887 toscaCsar.setVersion(toscaResourceStructure.getToscaArtifact().getArtifactVersion());
\r
888 toscaCsar.setDescription(toscaResourceStructure.getToscaArtifact().getArtifactDescription());
\r
889 toscaCsar.setUrl(toscaResourceStructure.getToscaArtifact().getArtifactURL());
\r
891 toscaResourceStructure.setCatalogToscaCsar(toscaCsar);
\r
894 private static void createNetworkResource(NodeTemplate networkNodeTemplate, ToscaResourceStructure toscaResourceStructure, TempNetworkHeatTemplateLookup networkHeatTemplateLookup) {
\r
895 NetworkResourceCustomization networkResourceCustomization = new NetworkResourceCustomization();
\r
897 NetworkResource networkResource = new NetworkResource();
\r
899 String providerNetwork = toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_PROVIDERNETWORK_ISPROVIDERNETWORK);
\r
901 if("true".equalsIgnoreCase(providerNetwork)){
\r
902 networkResource.setNeutronNetworkType("PROVIDER");
\r
904 networkResource.setNeutronNetworkType("BASIC");
\r
907 networkResource.setModelName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
\r
909 networkResource.setModelInvariantUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));
\r
910 networkResource.setModelUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
911 networkResource.setModelVersion(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
\r
913 networkResource.setAicVersionMax(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
\r
914 String aicVersionMin = networkHeatTemplateLookup != null ? networkHeatTemplateLookup.getAicVersionMin() : "2.5";
\r
915 networkResource.setAicVersionMin(aicVersionMin);
\r
916 networkResource.setToscaNodeType(networkNodeTemplate.getType());
\r
917 networkResource.setDescription(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
\r
918 networkResource.setOrchestrationMode("HEAT");
\r
919 networkResource.setCategory(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
\r
920 networkResource.setSubCategory(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY));
\r
921 //for tosca NS ,there is no heat for network VL
\r
922 String heatTemplateArtifactUUID = networkHeatTemplateLookup != null ? networkHeatTemplateLookup.getHeatTemplateArtifactUuid() : "null";
\r
923 networkResource.setHeatTemplateArtifactUUID(heatTemplateArtifactUUID);
\r
925 toscaResourceStructure.setCatalogNetworkResource(networkResource);
\r
927 networkResourceCustomization.setModelInstanceName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
\r
928 networkResourceCustomization.setModelCustomizationUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)));
\r
929 networkResourceCustomization.setNetworkResourceModelUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
932 networkResourceCustomization.setNetworkTechnology(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTECHNOLOGY)));
\r
933 networkResourceCustomization.setNetworkType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTYPE)));
\r
934 networkResourceCustomization.setNetworkRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)));
\r
935 networkResourceCustomization.setNetworkScope(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)));
\r
937 toscaResourceStructure.setCatalogNetworkResourceCustomization(networkResourceCustomization);
\r
939 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
940 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
941 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)));
\r
942 serviceToResourceCustomization.setModelType("network");
\r
944 toscaResourceStructure.setCatalogVlServiceToResourceCustomization(serviceToResourceCustomization);
\r
949 private static void createVFModule(Group group, NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure, IVfModuleData vfModuleData) {
\r
950 VfModule vfModule = new VfModule();
\r
952 Metadata vfMetadata = group.getMetadata();
\r
954 String vfModuleModelUUID = vfModuleData.getVfModuleModelUUID();
\r
957 if(vfModuleModelUUID != null && vfModuleModelUUID.contains(".")){
\r
958 vfModuleModelUUID = vfModuleModelUUID.substring(0, vfModuleModelUUID.indexOf("."));
\r
962 for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()){
\r
964 String vfModelUUID = vfModuleStructure.getVfModuleMetadata().getVfModuleModelUUID();
\r
966 if(vfModelUUID != null && vfModelUUID.equalsIgnoreCase(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID))){
\r
968 List<String> artifacts = vfModuleStructure.getVfModuleMetadata().getArtifacts();
\r
970 for(String artifact: artifacts){
\r
973 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
976 if(artifact.equals(vfModuleArtifact.getArtifactInfo().getArtifactUUID())){
\r
977 //if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ARTIFACT)){
\r
978 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT)){
\r
979 vfModule.setHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
982 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_VOL)){
\r
983 vfModule.setVolHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
999 vfModule.setModelInvariantUuid(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)));
\r
1000 vfModule.setModelName(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELNAME)));
\r
1001 vfModule.setModelUUID(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID)));
\r
1002 vfModule.setVersion(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELVERSION)));
\r
1003 vfModule.setDescription(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
\r
1004 //vfModule.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());
\r
1005 //vfModule.setVolHeatTemplateArtifactUUId(toscaResourceStructure.getVolHeatTemplateUUID());
\r
1007 vfModule.setVnfResourceModelUUId(toscaResourceStructure.getCatalogVnfResource().getModelUuid());
\r
1009 String vfModuleType = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULETYPE);
\r
1010 if(vfModuleType != null && "Base".equalsIgnoreCase(vfModuleType)){
\r
1011 vfModule.setIsBase(1);
\r
1013 vfModule.setIsBase(0);
\r
1017 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
\r
1018 vfModuleCustomization.setModelCustomizationUuid(vfModuleData.getVfModuleModelCustomizationUUID());
\r
1021 vfModuleCustomization.setVfModuleModelUuid(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
\r
1023 vfModuleCustomization.setHeatEnvironmentArtifactUuid(toscaResourceStructure.getEnvHeatTemplateUUID());
\r
1026 vfModuleCustomization.setVolEnvironmentArtifactUuid(toscaResourceStructure.getVolHeatEnvTemplateUUID());
\r
1028 String initialCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT);
\r
1029 if(initialCount != null && initialCount.length() > 0){
\r
1030 vfModuleCustomization.setInitialCount(Integer.valueOf(initialCount));
\r
1033 vfModuleCustomization.setInitialCount(Integer.valueOf(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT)));
\r
1035 String availabilityZoneCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT);
\r
1036 if(availabilityZoneCount != null && availabilityZoneCount.length() > 0){
\r
1037 vfModuleCustomization.setAvailabilityZoneCount(Integer.valueOf(availabilityZoneCount));
\r
1041 vfModuleCustomization.setLabel(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULELABEL));
\r
1043 String maxInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MAXVFMODULEINSTANCES);
\r
1044 if(maxInstances != null && maxInstances.length() > 0){
\r
1045 vfModuleCustomization.setMaxInstances(Integer.valueOf(maxInstances));
\r
1048 String minInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);
\r
1049 if(minInstances != null && minInstances.length() > 0){
\r
1050 vfModuleCustomization.setMinInstances(Integer.valueOf(minInstances));
\r
1053 toscaResourceStructure.setCatalogVfModule(vfModule);
\r
1055 toscaResourceStructure.setCatalogVfModuleCustomization(vfModuleCustomization);
\r
1059 private static void createVnfResourceToVfModuleCustomization(VnfResourceCustomization vnfResourceCustomization,
\r
1060 VfModuleCustomization vfModuleCustomization,
\r
1061 ToscaResourceStructure toscaResourceStructure) {
\r
1063 VnfResCustomToVfModuleCustom vnfResCustomToVfModuleCustom = new VnfResCustomToVfModuleCustom();
\r
1065 vnfResCustomToVfModuleCustom.setVfModuleCustModelCustomizationUuid(vfModuleCustomization.getModelCustomizationUuid());
\r
1066 vnfResCustomToVfModuleCustom.setVnfResourceCustModelCustomizationUuid(vnfResourceCustomization.getModelCustomizationUuid());
\r
1068 toscaResourceStructure.setCatalogVnfResCustomToVfModuleCustom(vnfResCustomToVfModuleCustom);
\r
1075 private static void createTempNetworkHeatTemplateLookup(NetworkResource networkResource,
\r
1076 VfModule vfModule,
\r
1077 ToscaResourceStructure toscaResourceStructure) {
\r
1079 TempNetworkHeatTemplateLookup tempNetworkHeatTemplateLookup = new TempNetworkHeatTemplateLookup();
\r
1081 tempNetworkHeatTemplateLookup.setNetworkResourceModelName(networkResource.getModelName());
\r
1082 tempNetworkHeatTemplateLookup.setHeatTemplateArtifactUuid(vfModule.getHeatTemplateArtifactUUId());
\r
1083 tempNetworkHeatTemplateLookup.setAicVersionMin("1");
\r
1085 toscaResourceStructure.setCatalogTempNetworkHeatTemplateLookup(tempNetworkHeatTemplateLookup);
\r
1091 private static void createVnfResource(NodeTemplate vfNodeTemplate, ToscaResourceStructure toscaResourceStructure) {
\r
1092 VnfResource vnfResource = new VnfResource();
\r
1095 //toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT)
\r
1097 vnfResource.setModelInvariantUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));
\r
1098 vnfResource.setModelName(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
\r
1099 vnfResource.setModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
1101 vnfResource.setVersion(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
\r
1102 vnfResource.setDescription(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
\r
1103 vnfResource.setOrchestrationMode("HEAT");
\r
1104 vnfResource.setToscaNodeType(testNull(vfNodeTemplate.getType()));
\r
1105 vnfResource.setAicVersionMax(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
\r
1106 vnfResource.setAicVersionMin(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
\r
1107 //vnfResource.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());
\r
1109 // vfNodeTemplate.getProperties()
\r
1110 toscaResourceStructure.setCatalogVnfResource(vnfResource);
\r
1112 VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization();
\r
1113 vnfResourceCustomization.setModelCustomizationUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)));
\r
1114 vnfResourceCustomization.setModelInstanceName(vfNodeTemplate.getName());
\r
1116 vnfResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)));
\r
1117 vnfResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)));
\r
1118 vnfResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)));
\r
1119 vnfResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)));
\r
1122 vnfResourceCustomization.setMultiStageDesign(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, "multi_stage_design"));
\r
1125 vnfResourceCustomization.setVnfResourceModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
1126 vnfResourceCustomization.setAvailabilityZoneMaxCount(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT)));
\r
1128 //vnfResourceCustomization.setMultiStageDesign(vfNodeTemplate.getMetaData().getValue("multi_stage_design"));
\r
1129 //vnfResourceCustomization.setMultiStageDesign(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT).trim());
\r
1132 vnfResourceCustomization.setMaxInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
\r
1133 vnfResourceCustomization.setMinInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
\r
1137 toscaResourceStructure.setCatalogVnfResourceCustomization(vnfResourceCustomization);
\r
1140 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
1141 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
1142 serviceToResourceCustomization.setResourceModelCustomizationUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
\r
1143 serviceToResourceCustomization.setModelType("vnf");
\r
1145 toscaResourceStructure.setCatalogVfServiceToResourceCustomization(serviceToResourceCustomization);
\r
1150 private static void createAllottedResource(NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure) {
\r
1151 AllottedResource allottedResource = new AllottedResource();
\r
1153 allottedResource.setModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
1154 allottedResource.setModelInvariantUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));
\r
1155 allottedResource.setModelName(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME)));
\r
1156 allottedResource.setModelVersion(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
\r
1157 allottedResource.setToscaNodeType(testNull(nodeTemplate.getType()));
\r
1158 allottedResource.setSubcategory(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY)));
\r
1159 allottedResource.setDescription(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
\r
1161 toscaResourceStructure.setAllottedResource(allottedResource);
\r
1163 AllottedResourceCustomization allottedResourceCustomization = new AllottedResourceCustomization();
\r
1164 allottedResourceCustomization.setModelCustomizationUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)));
\r
1165 allottedResourceCustomization.setModelInstanceName(nodeTemplate.getName());
\r
1166 allottedResourceCustomization.setArModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
1169 allottedResourceCustomization.setProvidingServiceModelInvariantUuid(toscaResourceStructure.getCatalogService().getModelInvariantUUID());
\r
1170 allottedResourceCustomization.setProvidingServiceModelUuid(toscaResourceStructure.getCatalogService().getModelUUID());
\r
1171 allottedResourceCustomization.setProvidingServiceModelName(toscaResourceStructure.getCatalogService().getModelName());
\r
1172 allottedResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)));
\r
1173 allottedResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)));
\r
1174 allottedResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)));
\r
1175 allottedResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)));
\r
1176 allottedResourceCustomization.setMinInstances(Integer.getInteger(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES)));
\r
1177 allottedResourceCustomization.setMaxInstances(Integer.getInteger(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
\r
1178 allottedResourceCustomization.setTargetNetworkRole(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NETWORKROLE));
\r
1180 toscaResourceStructure.setCatalogAllottedResourceCustomization(allottedResourceCustomization);
\r
1182 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
1183 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
1184 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)));
\r
1185 serviceToResourceCustomization.setModelType("allottedResource");
\r
1187 toscaResourceStructure.setCatalogAllottedServiceToResourceCustomization(serviceToResourceCustomization);
\r
1191 private static Set<HeatTemplateParam> extractHeatTemplateParameters(String yamlFile, String artifactUUID) {
\r
1193 // Scan the payload downloadResult and extract the HeatTemplate
\r
1195 YamlEditor yamlEditor = new YamlEditor(yamlFile.getBytes());
\r
1196 return yamlEditor.getParameterList(artifactUUID);
\r
1200 private static String identifyParentOfNestedTemplate(VfModuleStructure vfModuleStructure,VfModuleArtifact heatNestedArtifact) {
\r
1202 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT) != null
\r
1203 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0).getArtifactInfo().getRelatedArtifacts() != null) {
\r
1204 for (IArtifactInfo unknownArtifact : vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0)
\r
1205 .getArtifactInfo().getRelatedArtifacts()) {
\r
1206 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {
\r
1207 return ASDCConfiguration.HEAT;
\r
1213 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL) != null
\r
1214 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts() != null) {
\r
1215 for (IArtifactInfo unknownArtifact:vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts()) {
\r
1216 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {
\r
1217 return ASDCConfiguration.HEAT_VOL;
\r
1223 // Does not belong to anything
\r
1228 private static String testNull(Object object) {
\r
1231 if(object == null){
\r
1233 }else if (object != null && object.equals("NULL")) {
\r
1235 }else if (object != null && object instanceof Integer) {
\r
1236 return object.toString();
\r
1237 } else if (object != null && object instanceof String) {
\r
1238 return (String)object;
\r
1240 return "Type not recognized";
\r
1244 private static String createVNFName(VfResourceStructure vfResourceStructure) {
\r
1246 return vfResourceStructure.getNotification().getServiceName() + "/" + vfResourceStructure.getResourceInstance().getResourceInstanceName();
\r
1249 private static String createVfModuleName(VfModuleStructure vfModuleStructure) {
\r
1251 return createVNFName(vfModuleStructure.getParentVfResource())+"::"+vfModuleStructure.getVfModuleMetadata().getVfModuleModelName();
\r
1255 private static Timestamp getCurrentTimeStamp() {
\r
1257 return new Timestamp(new Date().getTime());
\r