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
102 status = vfResourceStructure.isDeployedSuccessfully();
\r
103 } catch (RuntimeException e) {
\r
109 String serviceUUID = vfResourceStruct.getNotification().getServiceUUID();
\r
112 logger.info(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED_DETAIL,
\r
113 vfResourceStructure.getResourceInstance().getResourceInstanceName(),
\r
114 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),
\r
115 vfResourceStructure.getNotification().getServiceName(),
\r
116 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
117 vfResourceStructure.getNotification().getServiceVersion()),
\r
118 vfResourceStructure.getNotification().getServiceUUID(),
\r
119 vfResourceStructure.getResourceInstance().getResourceName(),"", "");
\r
121 logger.info(MessageEnum.ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL,
\r
122 vfResourceStructure.getResourceInstance().getResourceInstanceName(),
\r
123 vfResourceStructure.getResourceInstance().getResourceCustomizationUUID(),
\r
124 vfResourceStructure.getNotification().getServiceName(),
\r
125 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
126 vfResourceStructure.getNotification().getServiceVersion()),
\r
127 vfResourceStructure.getNotification().getServiceUUID(),
\r
128 vfResourceStructure.getResourceInstance().getResourceName(),"", "");
\r
133 } catch (Exception e) {
\r
134 logger.error(MessageEnum.ASDC_ARTIFACT_CHECK_EXC, "", "", MsoLogger.ErrorCode.SchemaError, "Exception - isResourceAlreadyDeployed");
\r
135 throw new ArtifactInstallerException("Exception caught during checking existence of the VNF Resource.", e);
\r
140 public void installTheResource(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStruct) throws ArtifactInstallerException {
\r
142 logger.debug("installTheResource is called");
\r
144 VfResourceStructure vfResourceStructure = (VfResourceStructure)vfResourceStruct;
\r
146 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
148 switch (vfModuleArtifact.getArtifactInfo().getArtifactType()) {
\r
149 case ASDCConfiguration.HEAT:
\r
150 case ASDCConfiguration.HEAT_VOL:
\r
151 case ASDCConfiguration.HEAT_NESTED:
\r
152 ToscaResourceInstaller.createHeatTemplateFromArtifact(vfResourceStructure, toscaResourceStruct, vfModuleArtifact);
\r
154 case ASDCConfiguration.HEAT_ENV:
\r
155 ToscaResourceInstaller.createHeatEnvFromArtifact(vfResourceStructure, vfModuleArtifact);
\r
157 case ASDCConfiguration.HEAT_ARTIFACT:
\r
158 ToscaResourceInstaller.createHeatFileFromArtifact(vfResourceStructure, vfModuleArtifact, toscaResourceStruct);
\r
160 case ASDCConfiguration.HEAT_NET:
\r
161 case ASDCConfiguration.OTHER:
\r
162 logger.warn(MessageEnum.ASDC_ARTIFACT_TYPE_NOT_SUPPORT, vfModuleArtifact.getArtifactInfo().getArtifactType()+"(Artifact Name:"+vfModuleArtifact.getArtifactInfo().getArtifactName()+")", "", "", MsoLogger.ErrorCode.DataError, "Artifact type not supported");
\r
169 // Those objects could be reused by different VfModule
\r
173 // PCLO: in case of deployment failure, use a string that will represent the type of artifact that failed...
\r
174 List<ASDCElementInfo> artifactListForLogging = new ArrayList<>();
\r
176 CatalogDatabase catalogDB = CatalogDatabase.getInstance();
\r
177 // 2. Create the VFModules/VNFResource objects by linking them to the
\r
178 // objects created before and store them in Resource/module structure
\r
179 // Opening a DB transaction, starting from here
\r
183 createToscaCsar(toscaResourceStruct);
\r
185 catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());
\r
187 ToscaResourceInstaller.createService(toscaResourceStruct);
\r
189 catalogDB.saveService(toscaResourceStruct.getCatalogService());
\r
193 * ************************************************************************************************************
\r
196 // Ingest (VNF) Data - 1707
\r
197 List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();
\r
199 logger.debug("**vfMondeTEmplatesList.size()=" + vfNodeTemplatesList.size());
\r
200 for(NodeTemplate nodeTemplate : vfNodeTemplatesList) {
\r
201 logger.debug("nodeTemplate outerLoop=" + outerLoop++);
\r
202 // extract VF metadata
\r
204 Metadata metadata = nodeTemplate.getMetaData();
\r
206 String vfCustomizationUUID = toscaResourceStruct.getSdcCsarHelper().getMetadataPropertyValue(metadata,
\r
207 SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
\r
208 logger.debug("vfCustomizationUUID=" + vfCustomizationUUID);
\r
210 // extract VF metadata
\r
211 createVnfResource(nodeTemplate, toscaResourceStruct);
\r
213 // check for duplicate record already in the database
\r
214 VnfResource vnfResource =
\r
215 catalogDB.getVnfResource(toscaResourceStruct.getCatalogVnfResource().getModelName(),
\r
216 BigDecimalVersion.castAndCheckNotificationVersionToString(
\r
217 toscaResourceStruct.getCatalogVnfResource().getVersion()));
\r
219 if(vnfResource != null) {
\r
220 toscaResourceStruct.setVnfAlreadyInstalled(true);
\r
223 if(!toscaResourceStruct.isVnfAlreadyInstalled()) {
\r
225 catalogDB.saveOrUpdateVnfResource(toscaResourceStruct.getCatalogVnfResource());
\r
229 boolean saveVnfCustomization = catalogDB
\r
230 .saveVnfResourceCustomization(toscaResourceStruct.getCatalogVnfResourceCustomization());
\r
232 if(saveVnfCustomization) {
\r
233 catalogDB.saveServiceToResourceCustomization(
\r
234 toscaResourceStruct.getCatalogVfServiceToResourceCustomization());
\r
238 * HEAT TABLE POPULATION
\r
239 * *********************************************************************************
\r
240 * **********************
\r
244 for(VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()) {
\r
245 logger.debug("vfResourceStructure.getVfMOduleStructure() loop, nextLoop = " + nextLoop++);
\r
246 logger.debug("vfModuleStructure:" + vfModuleStructure.toString());
\r
248 // Here we set the right db structure according to the Catalog
\r
251 // We expect only one MAIN HEAT per VFMODULE
\r
252 // we can also obtain from it the Env ArtifactInfo, that's why
\r
254 // get the Main IArtifactInfo
\r
256 HeatTemplate heatMainTemplate = null;
\r
257 HeatEnvironment heatEnv;
\r
259 HeatTemplate heatVolumeTemplate = null;
\r
260 HeatEnvironment heatVolumeEnv;
\r
262 IVfModuleData vfMetadata = vfModuleStructure.getVfModuleMetadata();
\r
264 if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT)) {
\r
266 List<VfModuleArtifact> artifacts =
\r
267 vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT);
\r
268 logger.debug("there are " + artifacts.size() + " artifacts");
\r
269 IArtifactInfo mainEnvArtifactInfo = null;
\r
270 for(VfModuleArtifact vfma : artifacts) {
\r
271 logger.debug("vmfa=" + vfma.toString());
\r
272 mainEnvArtifactInfo = vfma.getArtifactInfo().getGeneratedArtifact();
\r
275 heatMainTemplate = (HeatTemplate)vfma.getCatalogObject();
\r
277 // Set HeatTemplateArtifactUUID to use later when setting the VfModule
\r
278 // and NetworkResource
\r
279 toscaResourceStruct.setHeatTemplateUUID(heatMainTemplate.getArtifactUuid());
\r
281 // Add this one for logging
\r
282 artifactListForLogging
\r
283 .add(ASDCElementInfo.createElementFromVfArtifactInfo(vfma.getArtifactInfo()));
\r
285 catalogDB.saveHeatTemplate(heatMainTemplate, heatMainTemplate.getParameters());
\r
286 // Indicate we have deployed it in the DB
\r
287 vfma.incrementDeployedInDB();
\r
291 // We expect only one VOL HEAT per VFMODULE
\r
292 // we can also obtain from it the Env ArtifactInfo, that's why
\r
293 // we get the Volume IArtifactInfo
\r
295 if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_VOL)) {
\r
296 IArtifactInfo volEnvArtifactInfo = vfModuleStructure.getArtifactsMap()
\r
297 .get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getGeneratedArtifact();
\r
299 heatVolumeTemplate = (HeatTemplate)vfModuleStructure.getArtifactsMap()
\r
300 .get(ASDCConfiguration.HEAT_VOL).get(0).getCatalogObject();
\r
302 // Set VolHeatTemplate ArtifactUUID to use later when setting the
\r
304 toscaResourceStruct.setVolHeatTemplateUUID(heatVolumeTemplate.getArtifactUuid());
\r
306 // Add this one for logging
\r
307 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(vfModuleStructure
\r
308 .getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo()));
\r
310 catalogDB.saveHeatTemplate(heatVolumeTemplate, heatVolumeTemplate.getParameters());
\r
311 // Indicate we have deployed it in the DB
\r
312 vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0)
\r
313 .incrementDeployedInDB();
\r
315 if(volEnvArtifactInfo != null) {
\r
316 heatVolumeEnv = (HeatEnvironment)vfResourceStructure.getArtifactsMapByUUID()
\r
317 .get(volEnvArtifactInfo.getArtifactUUID()).getCatalogObject();
\r
319 // Set VolHeatTemplate ArtifactUUID to use later when setting the
\r
321 toscaResourceStruct.setVolHeatEnvTemplateUUID(heatVolumeEnv.getArtifactUuid());
\r
323 // Add this one for logging
\r
324 artifactListForLogging
\r
325 .add(ASDCElementInfo.createElementFromVfArtifactInfo(volEnvArtifactInfo));
\r
327 catalogDB.saveHeatEnvironment(heatVolumeEnv);
\r
328 // Indicate we have deployed it in the DB
\r
329 vfResourceStructure.getArtifactsMapByUUID().get(volEnvArtifactInfo.getArtifactUUID())
\r
330 .incrementDeployedInDB();
\r
336 // Here we expect many HEAT_NESTED template to be there
\r
337 // XXX FIX BY PCLO: Defect# -36643 -US666034 - check first if we really have
\r
338 // nested heat templates
\r
339 if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_NESTED)) {
\r
340 for(VfModuleArtifact heatNestedArtifact : vfModuleStructure.getArtifactsMap()
\r
341 .get(ASDCConfiguration.HEAT_NESTED)) {
\r
343 // Check if this nested is well referenced by the MAIN HEAT
\r
344 String parentArtifactType = ToscaResourceInstaller
\r
345 .identifyParentOfNestedTemplate(vfModuleStructure, heatNestedArtifact);
\r
346 HeatTemplate heatNestedTemplate = (HeatTemplate)heatNestedArtifact.getCatalogObject();
\r
348 if(parentArtifactType != null) {
\r
350 switch(parentArtifactType) {
\r
351 case ASDCConfiguration.HEAT:
\r
353 // Add this one for logging
\r
354 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(
\r
355 heatNestedArtifact.getArtifactInfo()));
\r
357 catalogDB.saveNestedHeatTemplate(heatMainTemplate.getArtifactUuid(),
\r
358 heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
359 // Indicate we have deployed it in the DB
\r
360 heatNestedArtifact.incrementDeployedInDB();
\r
362 case ASDCConfiguration.HEAT_VOL:
\r
364 // Add this one for logging
\r
365 artifactListForLogging.add(ASDCElementInfo.createElementFromVfArtifactInfo(
\r
366 heatNestedArtifact.getArtifactInfo()));
\r
367 catalogDB.saveNestedHeatTemplate(heatVolumeTemplate.getArtifactUuid(),
\r
368 heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
369 // Indicate we have deployed it in the DB
\r
370 heatNestedArtifact.incrementDeployedInDB();
\r
377 } else { // Assume it belongs to HEAT MAIN
\r
378 // Add this one for logging
\r
379 artifactListForLogging.add(ASDCElementInfo
\r
380 .createElementFromVfArtifactInfo(heatNestedArtifact.getArtifactInfo()));
\r
382 catalogDB.saveNestedHeatTemplate(heatMainTemplate.getArtifactUuid(),
\r
383 heatNestedTemplate, heatNestedTemplate.getTemplateName());
\r
384 // Indicate we have deployed it in the DB
\r
385 heatNestedArtifact.incrementDeployedInDB();
\r
390 if(mainEnvArtifactInfo != null) {
\r
391 heatEnv = (HeatEnvironment)vfResourceStructure.getArtifactsMapByUUID()
\r
392 .get(mainEnvArtifactInfo.getArtifactUUID()).getCatalogObject();
\r
394 // Set HeatEnvironmentArtifactUUID to use later when setting the
\r
396 toscaResourceStruct.setEnvHeatTemplateUUID(heatEnv.getArtifactUuid());
\r
398 // Add this one for logging
\r
399 artifactListForLogging
\r
400 .add(ASDCElementInfo.createElementFromVfArtifactInfo(mainEnvArtifactInfo));
\r
402 catalogDB.saveHeatEnvironment(heatEnv);
\r
403 // Indicate we have deployed it in the DB
\r
404 vfResourceStructure.getArtifactsMapByUUID().get(mainEnvArtifactInfo.getArtifactUUID())
\r
405 .incrementDeployedInDB();
\r
408 // here we expect one VFModule to be there
\r
409 // VfResourceInstaller.createVfModule(vfModuleStructure,heatMainTemplate,
\r
410 // heatVolumeTemplate, heatEnv, heatVolumeEnv);
\r
411 // VfModule vfModule = vfModuleStructure.getCatalogVfModule();
\r
413 // Add this one for logging
\r
414 // artifactListForLogging.add(ASDCElementInfo.createElementFromVfModuleStructure(vfModuleStructure));
\r
416 // catalogDB.saveOrUpdateVfModule(vfModule);
\r
418 List<org.openecomp.sdc.toscaparser.api.Group> vfGroups =
\r
419 toscaResourceStruct.getSdcCsarHelper().getVfModulesByVf(vfCustomizationUUID);
\r
420 logger.debug("vfGroups:" + vfGroups.toString());
\r
422 vfGroups.sort(new Comparator<Group>() {
\r
425 public int compare(Group group1,
\r
428 // Field name1Field = group1.class.getDeclaredField("name");
\r
429 // name1Field.setAccessible(true);
\r
430 String thisName = group1.getName(); // (String)
\r
431 // name1Field.get(group1);
\r
432 String thatName = group2.getName(); // (String)
\r
433 // name1Field.get(group2);
\r
435 Matcher m = lastDigit.matcher(thisName);
\r
436 Matcher m2 = lastDigit.matcher(thatName);
\r
438 String thisDigit = "0";
\r
439 String thatDigit = "0";
\r
441 thisDigit = m.group();
\r
446 thatDigit = m2.group();
\r
451 return new Integer(thisDigit).compareTo(new Integer(thatDigit));
\r
456 logger.debug("vfGroupsAfter:" + vfGroups.toString());
\r
458 for(Group group : vfGroups) {
\r
460 // boolean saveVFModule = createVFModule(group, nodeTemplate,
\r
461 // toscaResourceStruct, vfMetadata);
\r
462 if(vfMetadata.getVfModuleModelCustomizationUUID() == null) {
\r
463 logger.debug("NULL 1");
\r
465 logger.debug("vfMetadata.getMCU=" + vfMetadata.getVfModuleModelCustomizationUUID());
\r
467 if(group.getMetadata() == null) {
\r
468 logger.debug("NULL 3");
\r
470 logger.debug("group.getMetadata().getValue() = "
\r
471 + group.getMetadata().getValue("vfModuleModelCustomizationUUID"));
\r
473 if(vfMetadata.getVfModuleModelCustomizationUUID()
\r
474 .equals(group.getMetadata().getValue("vfModuleModelCustomizationUUID"))) {
\r
475 logger.debug("Found a match at " + vfMetadata.getVfModuleModelCustomizationUUID());
\r
476 createVFModule(group, nodeTemplate, toscaResourceStruct, vfResourceStructure,
\r
479 catalogDB.saveOrUpdateVfModule(toscaResourceStruct.getCatalogVfModule());
\r
481 catalogDB.saveOrUpdateVfModuleCustomization(
\r
482 toscaResourceStruct.getCatalogVfModuleCustomization());
\r
484 catalogDB.saveVnfResourceToVfModuleCustomization(
\r
485 toscaResourceStruct.getCatalogVnfResourceCustomization(),
\r
486 toscaResourceStruct.getCatalogVfModuleCustomization());
\r
489 if(toscaResourceStruct.getCatalogVfModuleCustomization() != null) {
\r
490 logger.debug("No match for " + toscaResourceStruct.getCatalogVfModuleCustomization()
\r
491 .getModelCustomizationUuid());
\r
493 logger.debug("No match for vfModuleModelCustomizationUUID");
\r
499 } // Commented out to process VFModules each time
\r
501 // Here we expect many HEAT_TEMPLATE files to be there
\r
502 if(vfModuleStructure.getArtifactsMap().containsKey(ASDCConfiguration.HEAT_ARTIFACT)) {
\r
503 for(VfModuleArtifact heatArtifact : vfModuleStructure.getArtifactsMap()
\r
504 .get(ASDCConfiguration.HEAT_ARTIFACT)) {
\r
506 HeatFiles heatFile = (HeatFiles)heatArtifact.getCatalogObject();
\r
508 // Add this one for logging
\r
509 artifactListForLogging.add(
\r
510 ASDCElementInfo.createElementFromVfArtifactInfo(heatArtifact.getArtifactInfo()));
\r
512 if(toscaResourceStruct.getCatalogVfModule() != null && heatFile != null) {
\r
513 catalogDB.saveVfModuleToHeatFiles(
\r
514 toscaResourceStruct.getCatalogVfModule().getModelUUID(), heatFile);
\r
516 // Indicate we will deploy it in the DB
\r
517 heatArtifact.incrementDeployedInDB();
\r
525 /* END OF HEAT TABLE POPULATION
\r
526 * ***************************************************************************************************
\r
530 // throw new ArtifactInstallerException("TESTING");
\r
533 List<NodeTemplate> allottedResourceList = toscaResourceStruct.getSdcCsarHelper().getAllottedResources();
\r
535 if(allottedResourceList != null){
\r
537 for(NodeTemplate allottedNode : allottedResourceList){
\r
539 createAllottedResource(allottedNode, toscaResourceStruct);
\r
541 catalogDB.saveAllottedResource(toscaResourceStruct.getAllottedResource());
\r
543 catalogDB.saveAllottedResourceCustomization(toscaResourceStruct.getCatalogAllottedResourceCustomization());
\r
545 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogAllottedServiceToResourceCustomization());
\r
551 List<NodeTemplate> nodeTemplatesVLList = toscaResourceStruct.getSdcCsarHelper().getServiceVlList();
\r
553 if(nodeTemplatesVLList != null){
\r
555 for(NodeTemplate vlNode : nodeTemplatesVLList){
\r
557 String networkResourceModelName = vlNode.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim();
\r
559 List<TempNetworkHeatTemplateLookup> networkHeatTemplateLookup = catalogDB.getTempNetworkHeatTemplateLookup(networkResourceModelName);
\r
561 if(networkHeatTemplateLookup != null && networkHeatTemplateLookup.size() > 0 ){
\r
563 createNetworkResource(vlNode, toscaResourceStruct, networkHeatTemplateLookup.get(0));
\r
566 logger.info(MessageEnum.ASDC_GENERAL_INFO,
\r
567 "No NetworkResourceName found in TempNetworkHeatTemplateLookup for" + networkResourceModelName, "ASDC",
\r
568 "createVfModuleStructures");
\r
569 createNetworkResource(vlNode, toscaResourceStruct, null);
\r
573 catalogDB.saveNetworkResource(toscaResourceStruct.getCatalogNetworkResource());
\r
575 catalogDB.saveNetworkResourceCustomization(toscaResourceStruct.getCatalogNetworkResourceCustomization());
\r
577 catalogDB.saveServiceToResourceCustomization(toscaResourceStruct.getCatalogVlServiceToResourceCustomization());
\r
583 //createServiceToResourceCustomization(toscaResourceStruct.getCatalogService(), toscaResourceStruct.getCatalogVnfResourceCustomization(), toscaResourceStruct);
\r
585 // catalogDB.saveToscaCsar(toscaResourceStruct.getCatalogToscaCsar());
\r
588 catalogDB.commit();
\r
589 vfResourceStructure.setSuccessfulDeployment();
\r
591 }catch(Exception e){
\r
592 logger.debug("Exception :",e);
\r
594 Throwable dbExceptionToCapture = e;
\r
595 while (!(dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException)
\r
596 && (dbExceptionToCapture.getCause() != null)) {
\r
597 dbExceptionToCapture = dbExceptionToCapture.getCause();
\r
600 if (dbExceptionToCapture instanceof ConstraintViolationException || dbExceptionToCapture instanceof LockAcquisitionException) {
\r
601 logger.warn(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED, vfResourceStructure.getResourceInstance().getResourceName(),
\r
602 vfResourceStructure.getNotification().getServiceVersion(), "", "", MsoLogger.ErrorCode.DataError, "Exception - ASCDC Artifact already deployed", e);
\r
604 String elementToLog = (artifactListForLogging.size() > 0 ? artifactListForLogging.get(artifactListForLogging.size()-1).toString() : "No element listed");
\r
605 logger.error(MessageEnum.ASDC_ARTIFACT_INSTALL_EXC, elementToLog, "", "", MsoLogger.ErrorCode.DataError, "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback", e);
\r
606 catalogDB.rollback();
\r
607 throw new ArtifactInstallerException(
\r
608 "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback.", e);
\r
618 public static String verifyTheFilePrefixInArtifacts(String filebody, VfResourceStructure vfResourceStructure, List<String> listTypes) {
\r
619 String newFileBody = filebody;
\r
620 for (VfModuleArtifact moduleArtifact:vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
622 if (listTypes.contains(moduleArtifact.getArtifactInfo().getArtifactType())) {
\r
624 newFileBody = verifyTheFilePrefixInString(newFileBody,moduleArtifact.getArtifactInfo().getArtifactName());
\r
627 return newFileBody;
\r
630 public static String verifyTheFilePrefixInString(final String body, final String filenameToVerify) {
\r
632 String needlePrefix = "file:///";
\r
633 String prefixedFilenameToVerify = needlePrefix+filenameToVerify;
\r
635 if ((body == null) || (body.length() == 0) || (filenameToVerify == null) || (filenameToVerify.length() == 0)) {
\r
639 StringBuilder sb = new StringBuilder(body.length());
\r
641 int currentIndex = 0;
\r
642 int startIndex = 0;
\r
644 while (currentIndex != -1) {
\r
645 startIndex = currentIndex;
\r
646 currentIndex = body.indexOf(prefixedFilenameToVerify, startIndex);
\r
648 if (currentIndex == -1) {
\r
652 // We append from the startIndex up to currentIndex (start of File Name)
\r
653 sb.append(body.substring(startIndex, currentIndex));
\r
654 sb.append(filenameToVerify);
\r
656 currentIndex += prefixedFilenameToVerify.length();
\r
659 sb.append(body.substring(startIndex));
\r
661 return sb.toString();
\r
665 private static void createHeatTemplateFromArtifact(VfResourceStructure vfResourceStructure,ToscaResourceStructure toscaResourceStruct,
\r
666 VfModuleArtifact vfModuleArtifact) {
\r
667 HeatTemplate heatTemplate = new HeatTemplate();
\r
669 // TODO Set the label
\r
670 // heatTemplate.setAsdcLabel("label");
\r
671 // Use the ResourceName of the ASDC template because the HEAT could be
\r
673 // heatTemplate.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());
\r
674 heatTemplate.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
676 List<String> typeList = new ArrayList<>();
\r
677 typeList.add(ASDCConfiguration.HEAT_NESTED);
\r
678 typeList.add(ASDCConfiguration.HEAT_ARTIFACT);
\r
680 heatTemplate.setTemplateBody(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));
\r
681 heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
683 if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {
\r
684 heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());
\r
686 heatTemplate.setTimeoutMinutes(240);
\r
689 //toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
691 heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
692 heatTemplate.setVersion(BigDecimalVersion
\r
693 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
694 heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
696 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
697 heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
699 heatTemplate.setArtifactChecksum("MANUAL_RECORD");
\r
702 Set<HeatTemplateParam> heatParam = ToscaResourceInstaller
\r
703 .extractHeatTemplateParameters(vfModuleArtifact.getResult(), vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
704 heatTemplate.setParameters(heatParam);
\r
705 //heatTemplate.setCreated(getCurrentTimeStamp());
\r
707 vfModuleArtifact.setCatalogObject(heatTemplate);
\r
710 private static void createHeatEnvFromArtifact(VfResourceStructure vfResourceStructure,
\r
711 VfModuleArtifact vfModuleArtifact) {
\r
712 HeatEnvironment heatEnvironment = new HeatEnvironment();
\r
714 heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
715 // TODO Set the label
\r
716 // heatEnvironment.setAsdcLabel("Label");
\r
718 List<String> typeList = new ArrayList<>();
\r
719 typeList.add(ASDCConfiguration.HEAT);
\r
720 typeList.add(ASDCConfiguration.HEAT_VOL);
\r
722 heatEnvironment.setEnvironment(verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(),vfResourceStructure,typeList));
\r
723 // heatEnvironment.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
724 heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
725 heatEnvironment.setVersion(BigDecimalVersion
\r
726 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
727 // heatEnvironment.setAsdcResourceName(VfResourceInstaller.createVNFName(vfResourceStructure));
\r
728 heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
730 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
731 heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
733 heatEnvironment.setArtifactChecksum("MANUAL_RECORD");
\r
735 //heatEnvironment.setCreated(getCurrentTimeStamp());
\r
737 vfModuleArtifact.setCatalogObject(heatEnvironment);
\r
741 private static void createHeatFileFromArtifact(VfResourceStructure vfResourceStructure,
\r
742 VfModuleArtifact vfModuleArtifact, ToscaResourceStructure toscaResourceStruct) {
\r
744 HeatFiles heatFile = new HeatFiles();
\r
745 // TODO Set the label
\r
746 // heatFile.setAsdcLabel("Label");
\r
747 heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
748 heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
\r
749 heatFile.setFileBody(vfModuleArtifact.getResult());
\r
750 heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());
\r
751 heatFile.setVersion(BigDecimalVersion
\r
752 .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
\r
754 toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
755 //heatFile.setCreated(getCurrentTimeStamp());
\r
757 // heatFile.setAsdcResourceName(vfResourceStructure.getResourceInstance().getResourceName());
\r
760 if(vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null){
\r
761 heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
\r
763 heatFile.setArtifactChecksum("MANUAL_RECORD");
\r
766 vfModuleArtifact.setCatalogObject(heatFile);
\r
770 private static void createService(ToscaResourceStructure toscaResourceStructure) {
\r
772 toscaResourceStructure.getServiceMetadata();
\r
774 Metadata serviceMetadata = toscaResourceStructure.getServiceMetadata();
\r
776 Service service = new Service();
\r
779 if(serviceMetadata != null){
\r
781 if(toscaResourceStructure.getServiceVersion() != null){
\r
782 service.setVersion(toscaResourceStructure.getServiceVersion());
\r
785 service.setServiceType(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(serviceMetadata, "serviceType"));
\r
786 service.setServiceRole(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(serviceMetadata, "serviceRole"));
\r
788 service.setDescription(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
\r
789 service.setModelName(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
\r
790 service.setModelUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
\r
791 //service.setVersion(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
\r
792 service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
\r
793 service.setCategory(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
\r
794 service.setToscaCsarArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());
\r
795 //service.setCreated(getCurrentTimeStamp());
\r
798 toscaResourceStructure.setCatalogService(service);
\r
801 private static void createToscaCsar(ToscaResourceStructure toscaResourceStructure) {
\r
803 ToscaCsar toscaCsar = new ToscaCsar();
\r
804 if(toscaResourceStructure.getToscaArtifact().getArtifactChecksum() != null){
\r
805 toscaCsar.setArtifactChecksum(toscaResourceStructure.getToscaArtifact().getArtifactChecksum());
\r
807 toscaCsar.setArtifactChecksum("MANUAL_RECORD");
\r
809 toscaCsar.setArtifactUUID(toscaResourceStructure.getToscaArtifact().getArtifactUUID());
\r
810 toscaCsar.setName(toscaResourceStructure.getToscaArtifact().getArtifactName());
\r
811 toscaCsar.setVersion(toscaResourceStructure.getToscaArtifact().getArtifactVersion());
\r
812 toscaCsar.setDescription(toscaResourceStructure.getToscaArtifact().getArtifactDescription());
\r
813 toscaCsar.setUrl(toscaResourceStructure.getToscaArtifact().getArtifactURL());
\r
815 toscaResourceStructure.setCatalogToscaCsar(toscaCsar);
\r
818 private static void createNetworkResource(NodeTemplate networkNodeTemplate, ToscaResourceStructure toscaResourceStructure, TempNetworkHeatTemplateLookup networkHeatTemplateLookup) {
\r
819 NetworkResourceCustomization networkResourceCustomization = new NetworkResourceCustomization();
\r
821 NetworkResource networkResource = new NetworkResource();
\r
823 String providerNetwork = toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_PROVIDERNETWORK_ISPROVIDERNETWORK);
\r
825 if("true".equalsIgnoreCase(providerNetwork)){
\r
826 networkResource.setNeutronNetworkType("PROVIDER");
\r
828 networkResource.setNeutronNetworkType("BASIC");
\r
831 networkResource.setModelName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
833 networkResource.setModelInvariantUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)));
\r
834 networkResource.setModelUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)));
\r
835 networkResource.setModelVersion(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
\r
837 networkResource.setAicVersionMax(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES)));
\r
838 String aicVersionMin = networkHeatTemplateLookup != null ? networkHeatTemplateLookup.getAicVersionMin() : "2.5";
\r
839 networkResource.setAicVersionMin(aicVersionMin);
\r
840 networkResource.setToscaNodeType(networkNodeTemplate.getType());
\r
841 networkResource.setDescription(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
\r
842 networkResource.setOrchestrationMode("HEAT");
\r
843 networkResource.setCategory(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
\r
844 networkResource.setSubCategory(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY));
\r
845 //for tosca NS ,there is no heat for network VL
\r
846 String heatTemplateArtifactUUID = networkHeatTemplateLookup != null ? networkHeatTemplateLookup.getHeatTemplateArtifactUuid() : "null";
\r
847 networkResource.setHeatTemplateArtifactUUID(heatTemplateArtifactUUID);
\r
849 toscaResourceStructure.setCatalogNetworkResource(networkResource);
\r
851 networkResourceCustomization.setModelInstanceName(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
852 networkResourceCustomization.setModelCustomizationUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
853 networkResourceCustomization.setNetworkResourceModelUuid(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
856 networkResourceCustomization.setNetworkTechnology(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTECHNOLOGY)).trim());
\r
857 networkResourceCustomization.setNetworkType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKTYPE)).trim());
\r
858 networkResourceCustomization.setNetworkRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)).trim());
\r
859 networkResourceCustomization.setNetworkScope(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(networkNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NETWORKSCOPE)).trim());
\r
861 toscaResourceStructure.setCatalogNetworkResourceCustomization(networkResourceCustomization);
\r
863 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
864 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
865 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(networkNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
866 serviceToResourceCustomization.setModelType("network");
\r
868 toscaResourceStructure.setCatalogVlServiceToResourceCustomization(serviceToResourceCustomization);
\r
873 private static void createVFModule(Group group, NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure, VfResourceStructure vfResourceStructure, IVfModuleData vfModuleData) {
\r
874 VfModule vfModule = new VfModule();
\r
876 Metadata vfMetadata = group.getMetadata();
\r
878 String vfModuleModelUUID = vfModuleData.getVfModuleModelUUID();
\r
881 if(vfModuleModelUUID != null && vfModuleModelUUID.contains(".")){
\r
882 vfModuleModelUUID = vfModuleModelUUID.substring(0, vfModuleModelUUID.indexOf("."));
\r
886 for (VfModuleStructure vfModuleStructure : vfResourceStructure.getVfModuleStructure()){
\r
888 String vfModelUUID = vfModuleStructure.getVfModuleMetadata().getVfModuleModelUUID();
\r
890 if(vfModelUUID != null && vfModelUUID.equalsIgnoreCase(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID))){
\r
892 List<String> artifacts = vfModuleStructure.getVfModuleMetadata().getArtifacts();
\r
894 for(String artifact: artifacts){
\r
897 for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {
\r
900 if(artifact.equals(vfModuleArtifact.getArtifactInfo().getArtifactUUID())){
\r
901 //if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ARTIFACT)){
\r
902 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT)){
\r
903 vfModule.setHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
906 if(vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_VOL)){
\r
907 vfModule.setVolHeatTemplateArtifactUUId(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
\r
923 vfModule.setModelInvariantUuid(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)));
\r
924 vfModule.setModelName(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELNAME)));
\r
925 vfModule.setModelUUID(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID)));
\r
926 vfModule.setVersion(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELVERSION)));
\r
927 vfModule.setDescription(testNull(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata, SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
\r
928 //vfModule.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());
\r
929 //vfModule.setVolHeatTemplateArtifactUUId(toscaResourceStructure.getVolHeatTemplateUUID());
\r
931 vfModule.setVnfResourceModelUUId(toscaResourceStructure.getCatalogVnfResource().getModelUuid());
\r
933 String vfModuleType = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULETYPE);
\r
934 if(vfModuleType != null && "Base".equalsIgnoreCase(vfModuleType)){
\r
935 vfModule.setIsBase(1);
\r
937 vfModule.setIsBase(0);
\r
941 VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
\r
942 vfModuleCustomization.setModelCustomizationUuid(vfModuleData.getVfModuleModelCustomizationUUID());
\r
945 vfModuleCustomization.setVfModuleModelUuid(toscaResourceStructure.getSdcCsarHelper().getMetadataPropertyValue(vfMetadata,SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
\r
947 vfModuleCustomization.setHeatEnvironmentArtifactUuid(toscaResourceStructure.getEnvHeatTemplateUUID());
\r
950 vfModuleCustomization.setVolEnvironmentArtifactUuid(toscaResourceStructure.getVolHeatEnvTemplateUUID());
\r
952 String initialCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT);
\r
953 if(initialCount != null && initialCount.length() > 0){
\r
954 vfModuleCustomization.setInitialCount(Integer.valueOf(initialCount));
\r
957 vfModuleCustomization.setInitialCount(Integer.valueOf(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_INITIALCOUNT)));
\r
959 String availabilityZoneCount = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT);
\r
960 if(availabilityZoneCount != null && availabilityZoneCount.length() > 0){
\r
961 vfModuleCustomization.setAvailabilityZoneCount(Integer.valueOf(availabilityZoneCount));
\r
965 vfModuleCustomization.setLabel(toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_VFMODULELABEL));
\r
967 String maxInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MAXVFMODULEINSTANCES);
\r
968 if(maxInstances != null && maxInstances.length() > 0){
\r
969 vfModuleCustomization.setMaxInstances(Integer.valueOf(maxInstances));
\r
972 String minInstances = toscaResourceStructure.getSdcCsarHelper().getGroupPropertyLeafValue(group, SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);
\r
973 if(minInstances != null && minInstances.length() > 0){
\r
974 vfModuleCustomization.setMinInstances(Integer.valueOf(minInstances));
\r
977 toscaResourceStructure.setCatalogVfModule(vfModule);
\r
979 toscaResourceStructure.setCatalogVfModuleCustomization(vfModuleCustomization);
\r
983 private static void createVnfResourceToVfModuleCustomization(VnfResourceCustomization vnfResourceCustomization,
\r
984 VfModuleCustomization vfModuleCustomization,
\r
985 ToscaResourceStructure toscaResourceStructure) {
\r
987 VnfResCustomToVfModuleCustom vnfResCustomToVfModuleCustom = new VnfResCustomToVfModuleCustom();
\r
989 vnfResCustomToVfModuleCustom.setVfModuleCustModelCustomizationUuid(vfModuleCustomization.getModelCustomizationUuid());
\r
990 vnfResCustomToVfModuleCustom.setVnfResourceCustModelCustomizationUuid(vnfResourceCustomization.getModelCustomizationUuid());
\r
992 toscaResourceStructure.setCatalogVnfResCustomToVfModuleCustom(vnfResCustomToVfModuleCustom);
\r
999 private static void createTempNetworkHeatTemplateLookup(NetworkResource networkResource,
\r
1000 VfModule vfModule,
\r
1001 ToscaResourceStructure toscaResourceStructure) {
\r
1003 TempNetworkHeatTemplateLookup tempNetworkHeatTemplateLookup = new TempNetworkHeatTemplateLookup();
\r
1005 tempNetworkHeatTemplateLookup.setNetworkResourceModelName(networkResource.getModelName());
\r
1006 tempNetworkHeatTemplateLookup.setHeatTemplateArtifactUuid(vfModule.getHeatTemplateArtifactUUId());
\r
1007 tempNetworkHeatTemplateLookup.setAicVersionMin("1");
\r
1009 toscaResourceStructure.setCatalogTempNetworkHeatTemplateLookup(tempNetworkHeatTemplateLookup);
\r
1015 private static void createVnfResource(NodeTemplate vfNodeTemplate, ToscaResourceStructure toscaResourceStructure) {
\r
1016 VnfResource vnfResource = new VnfResource();
\r
1019 //toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT)
\r
1021 vnfResource.setModelInvariantUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID).trim()));
\r
1022 vnfResource.setModelName(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
1023 vnfResource.setModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
1025 vnfResource.setVersion(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION).trim()));
\r
1026 vnfResource.setDescription(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION).trim()));
\r
1027 vnfResource.setOrchestrationMode("HEAT");
\r
1028 vnfResource.setToscaNodeType(testNull(vfNodeTemplate.getType()));
\r
1029 vnfResource.setAicVersionMax(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES).trim()));
\r
1030 vnfResource.setAicVersionMin(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES).trim()));
\r
1031 // vnfResource.setHeatTemplateArtifactUUId(toscaResourceStructure.getHeatTemplateUUID());
\r
1032 vnfResource.setCategory(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
\r
1033 vnfResource.setSubCategory(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY));
\r
1034 // vfNodeTemplate.getProperties()
\r
1035 toscaResourceStructure.setCatalogVnfResource(vnfResource);
\r
1037 VnfResourceCustomization vnfResourceCustomization = new VnfResourceCustomization();
\r
1038 vnfResourceCustomization.setModelCustomizationUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
1039 vnfResourceCustomization.setModelInstanceName(vfNodeTemplate.getName());
\r
1041 vnfResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)).trim());
\r
1042 vnfResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)).trim());
\r
1043 vnfResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)).trim());
\r
1044 vnfResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfNodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)).trim());
\r
1047 vnfResourceCustomization.setVnfResourceModelUuid(testNull(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
1048 vnfResourceCustomization.setAvailabilityZoneMaxCount(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_AVAILABILITYZONECOUNT).trim()));
\r
1050 vnfResourceCustomization.setMaxInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MAXINSTANCES).trim()));
\r
1051 vnfResourceCustomization.setMinInstances(Integer.getInteger(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_MININSTANCES).trim()));
\r
1055 toscaResourceStructure.setCatalogVnfResourceCustomization(vnfResourceCustomization);
\r
1058 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
1059 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
1060 serviceToResourceCustomization.setResourceModelCustomizationUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim());
\r
1061 serviceToResourceCustomization.setModelType("vnf");
\r
1063 toscaResourceStructure.setCatalogVfServiceToResourceCustomization(serviceToResourceCustomization);
\r
1068 private static void createAllottedResource(NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure) {
\r
1069 AllottedResource allottedResource = new AllottedResource();
\r
1071 allottedResource.setModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
1072 allottedResource.setModelInvariantUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID).trim()));
\r
1073 allottedResource.setModelName(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME).trim()));
\r
1074 allottedResource.setModelVersion(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION).trim()));
\r
1075 allottedResource.setToscaNodeType(testNull(nodeTemplate.getType()));
\r
1077 toscaResourceStructure.setAllottedResource(allottedResource);
\r
1079 AllottedResourceCustomization allottedResourceCustomization = new AllottedResourceCustomization();
\r
1080 allottedResourceCustomization.setModelCustomizationUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
1081 allottedResourceCustomization.setModelInstanceName(nodeTemplate.getName());
\r
1082 allottedResourceCustomization.setArModelUuid(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID).trim()));
\r
1084 allottedResourceCustomization.setNfFunction(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION)).trim());
\r
1085 allottedResourceCustomization.setNfNamingCode(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFCODE)).trim());
\r
1086 allottedResourceCustomization.setNfRole(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE)).trim());
\r
1087 allottedResourceCustomization.setNfType(testNull(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE)).trim());
\r
1089 toscaResourceStructure.setCatalogAllottedResourceCustomization(allottedResourceCustomization);
\r
1091 ServiceToResourceCustomization serviceToResourceCustomization = new ServiceToResourceCustomization();
\r
1092 serviceToResourceCustomization.setServiceModelUUID(toscaResourceStructure.getCatalogService().getModelUUID());
\r
1093 serviceToResourceCustomization.setResourceModelCustomizationUUID(testNull(nodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).trim()));
\r
1094 serviceToResourceCustomization.setModelType("allottedResource");
\r
1096 toscaResourceStructure.setCatalogAllottedServiceToResourceCustomization(serviceToResourceCustomization);
\r
1100 private static Set<HeatTemplateParam> extractHeatTemplateParameters(String yamlFile, String artifactUUID) {
\r
1102 // Scan the payload downloadResult and extract the HeatTemplate
\r
1104 YamlEditor yamlEditor = new YamlEditor(yamlFile.getBytes());
\r
1105 return yamlEditor.getParameterList(artifactUUID);
\r
1109 private static String identifyParentOfNestedTemplate(VfModuleStructure vfModuleStructure,VfModuleArtifact heatNestedArtifact) {
\r
1111 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT) != null
\r
1112 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0).getArtifactInfo().getRelatedArtifacts() != null) {
\r
1113 for (IArtifactInfo unknownArtifact : vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT).get(0)
\r
1114 .getArtifactInfo().getRelatedArtifacts()) {
\r
1115 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {
\r
1116 return ASDCConfiguration.HEAT;
\r
1122 if (vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL) != null
\r
1123 && vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts() != null) {
\r
1124 for (IArtifactInfo unknownArtifact:vfModuleStructure.getArtifactsMap().get(ASDCConfiguration.HEAT_VOL).get(0).getArtifactInfo().getRelatedArtifacts()) {
\r
1125 if (heatNestedArtifact.getArtifactInfo().getArtifactUUID().equals(unknownArtifact.getArtifactUUID())) {
\r
1126 return ASDCConfiguration.HEAT_VOL;
\r
1132 // Does not belong to anything
\r
1137 private static String testNull(Object object) {
\r
1138 if (object == null) {
\r
1140 } else if ("null".equals(object)) {
\r
1142 }else if (object instanceof Integer) {
\r
1143 return object.toString();
\r
1144 } else if (object instanceof String) {
\r
1145 return (String)object;
\r
1147 return "Type not recognized";
\r
1151 private static String createVNFName(VfResourceStructure vfResourceStructure) {
\r
1153 return vfResourceStructure.getNotification().getServiceName() + "/" + vfResourceStructure.getResourceInstance().getResourceInstanceName();
\r
1156 private static String createVfModuleName(VfModuleStructure vfModuleStructure) {
\r
1158 return createVNFName(vfModuleStructure.getParentVfResource())+"::"+vfModuleStructure.getVfModuleMetadata().getVfModuleModelName();
\r
1162 private static Timestamp getCurrentTimeStamp() {
\r
1164 return new Timestamp(new Date().getTime());
\r