2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.translator.services.heattotosca.impl;
23 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
24 import org.openecomp.sdc.heat.datatypes.model.Resource;
25 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
26 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
27 import org.openecomp.sdc.tosca.services.DataModelUtil;
28 import org.openecomp.sdc.translator.datatypes.heattotosca.AttachedResourceId;
29 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
30 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslatedHeatResource;
31 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
32 import org.openecomp.sdc.translator.services.heattotosca.mapping.TranslatorHeatToToscaPropertyConverter;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
36 import java.util.Arrays;
37 import java.util.List;
38 import java.util.Objects;
39 import java.util.Optional;
42 public class ResourceTranslationContrailV2VmInterfaceImpl extends ResourceTranslationBase {
43 protected static Logger logger =
44 LoggerFactory.getLogger(ResourceTranslationContrailV2VmInterfaceImpl.class);
47 protected void translate(TranslateTo translateTo) {
48 NodeTemplate nodeTemplate = new NodeTemplate();
49 nodeTemplate.setType(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE.getDisplayName());
51 nodeTemplate.setProperties(TranslatorHeatToToscaPropertyConverter
52 .getToscaPropertiesSimpleConversion(translateTo.getResource().getProperties(),
53 nodeTemplate.getProperties(), translateTo.getHeatFileName(),
54 translateTo.getHeatOrchestrationTemplate(), translateTo.getResource().getType(),
55 nodeTemplate, translateTo.getContext()));
56 handleNetworkRequirement(translateTo, nodeTemplate);
57 Optional<String> resourceTranslatedId = getResourceTranslatedId(translateTo.getHeatFileName(),
58 translateTo.getHeatOrchestrationTemplate(), translateTo.getResourceId(),
59 translateTo.getContext());
60 if (resourceTranslatedId.isPresent()) {
61 DataModelUtil.addNodeTemplate(translateTo.getServiceTemplate(), resourceTranslatedId.get(),
66 private void handleNetworkRequirement(TranslateTo translateTo, NodeTemplate nodeTemplate) {
67 Object virtualNetworkRefs =
68 translateTo.getResource().getProperties().get("virtual_network_refs");
69 if (Objects.isNull(virtualNetworkRefs) || !(virtualNetworkRefs instanceof List)
70 || ((List) virtualNetworkRefs).size() == 0) {
73 List<String> acceptableResourceTypes = Arrays
74 .asList(HeatResourcesTypes.NEUTRON_NET_RESOURCE_TYPE.getHeatResource(),
75 HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_NETWORK_RESOURCE_TYPE.getHeatResource());
76 List virtualNetworkRefList = (List) virtualNetworkRefs;
77 if (virtualNetworkRefList.size() > 1) {
78 logger.warn("Heat resource: '" + translateTo.getResourceId() + "' with type: '"
79 + translateTo.getResource().getType()
80 + "' include 'virtual_network_refs' property with more than one network values,"
81 + " only the first network will be translated, "
82 + "all rest will be ignored in TOSCA translation.");
84 Object virtualNetworkRef = virtualNetworkRefList.get(0);
85 String networkResourceId =
86 HeatToToscaUtil.extractContrailGetResourceAttachedHeatResourceId(virtualNetworkRef);
87 if (Objects.nonNull(networkResourceId)) { // get_resource
88 Resource networkResource = HeatToToscaUtil
89 .getResource(translateTo.getHeatOrchestrationTemplate(), networkResourceId,
90 translateTo.getHeatFileName());
91 if (acceptableResourceTypes.contains(networkResource.getType())) {
92 Optional<String> resourceTranslatedId =
93 getResourceTranslatedId(translateTo.getHeatFileName(),
94 translateTo.getHeatOrchestrationTemplate(), networkResourceId,
95 translateTo.getContext());
96 if (resourceTranslatedId.isPresent()) {
97 addLinkReqFromPortToNetwork(nodeTemplate, resourceTranslatedId.get());
100 logger.warn("Heat resource: '" + translateTo.getResourceId() + "' with type: '"
101 + translateTo.getResource().getType()
102 + "' include 'virtual_network_refs' property which is connect"
103 + " to unsupported/incorrect resource with type '"
104 + networkResource.getType()
105 + "', therefore, this connection will be ignored in TOSCA translation.");
108 Optional<AttachedResourceId> attachedResourceId = HeatToToscaUtil
109 .extractAttachedResourceId(translateTo.getHeatFileName(),
110 translateTo.getHeatOrchestrationTemplate(), translateTo.getContext(),
112 if (attachedResourceId.isPresent() && attachedResourceId.get().isGetParam()) {
113 TranslatedHeatResource translatedSharedResourceId =
114 translateTo.getContext().getHeatSharedResourcesByParam()
115 .get(attachedResourceId.get().getEntityId());
116 if (Objects.nonNull(translatedSharedResourceId)
117 && !HeatToToscaUtil.isHeatFileNested(translateTo, translateTo.getHeatFileName())) {
118 addLinkReqFromPortToNetwork(nodeTemplate, translatedSharedResourceId.getTranslatedId());