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.resourcetranslation;
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.ToscaCapabilityType;
26 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
27 import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
28 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
29 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
30 import org.openecomp.sdc.tosca.services.DataModelUtil;
31 import org.openecomp.sdc.tosca.services.ToscaConstants;
32 import org.openecomp.sdc.translator.datatypes.heattotosca.AttachedResourceId;
33 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
34 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslatedHeatResource;
35 import org.openecomp.sdc.translator.services.heattotosca.ConsolidationDataUtil;
36 import org.openecomp.sdc.translator.services.heattotosca.Constants;
37 import org.openecomp.sdc.translator.services.heattotosca.ConsolidationEntityType;
38 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
39 import org.openecomp.sdc.translator.services.heattotosca.ResourceTranslationFactory;
40 import org.openecomp.sdc.translator.services.heattotosca.helper.ResourceTranslationNeutronPortHelper;
41 import org.openecomp.sdc.translator.services.heattotosca.mapping.TranslatorHeatToToscaPropertyConverter;
43 import java.util.ArrayList;
44 import java.util.Arrays;
45 import java.util.Collections;
46 import java.util.List;
48 import java.util.Objects;
49 import java.util.Optional;
52 public class ResourceTranslationNeutronPortImpl extends ResourceTranslationBase {
55 public void translate(TranslateTo translateTo) {
58 mdcDataDebugMessage.debugEntryMessage(null, null);
60 NodeTemplate nodeTemplate = new NodeTemplate();
61 nodeTemplate.setType(ToscaNodeType.NEUTRON_PORT);
62 nodeTemplate.setProperties(TranslatorHeatToToscaPropertyConverter
63 .getToscaPropertiesSimpleConversion(translateTo.getServiceTemplate(), translateTo.
64 getResourceId(), translateTo.getResource().getProperties(),
65 nodeTemplate.getProperties(), translateTo.getHeatFileName(),
66 translateTo.getHeatOrchestrationTemplate(), translateTo.getResource().getType(),
67 nodeTemplate, translateTo.getContext()));
68 new ResourceTranslationNeutronPortHelper().setAdditionalProperties(nodeTemplate
70 handleNetworkRequirement(translateTo, nodeTemplate);
71 String resourceTranslatedId = handleSecurityRulesRequirement(translateTo);
73 .addNodeTemplate(translateTo.getServiceTemplate(), resourceTranslatedId, nodeTemplate);
75 mdcDataDebugMessage.debugExitMessage(null, null);
78 private String handleSecurityRulesRequirement(TranslateTo translateTo) {
81 mdcDataDebugMessage.debugEntryMessage(null, null);
83 String resourceTranslatedId = translateTo.getTranslatedId();
84 Map<String, Object> properties = translateTo.getResource().getProperties();
85 Optional<Object> securityGroups =
86 Optional.ofNullable(properties.get(Constants.SECURITY_GROUPS_PROPERTY_NAME));
87 if (securityGroups.isPresent() && securityGroups.get() instanceof List) {
88 List securityGroupsList = (List) securityGroups.get();
89 securityGroupsList.forEach(resourceValue -> {
90 Optional<AttachedResourceId> securityGroupResourceId = HeatToToscaUtil
91 .extractAttachedResourceId(translateTo.getHeatFileName(),
92 translateTo.getHeatOrchestrationTemplate(), translateTo.getContext(),
94 securityGroupResourceId.ifPresent(
95 attachedResourceId -> handleSecurityGroupResourceId(translateTo, resourceTranslatedId,
100 mdcDataDebugMessage.debugExitMessage(null, null);
101 return resourceTranslatedId;
104 private void handleSecurityGroupResourceId(TranslateTo translateTo, String resourceTranslatedId,
105 AttachedResourceId securityGroupResourceId) {
108 mdcDataDebugMessage.debugEntryMessage(null, null);
110 List<String> supportedSecurityGroupsTypes = Collections
111 .singletonList(HeatResourcesTypes.NEUTRON_SECURITY_GROUP_RESOURCE_TYPE.getHeatResource());
112 if (securityGroupResourceId.isGetResource()) {
113 handleGetResource(translateTo, resourceTranslatedId, securityGroupResourceId,
114 supportedSecurityGroupsTypes);
115 } else if (securityGroupResourceId.isGetParam()) {
116 handleGetParam(translateTo, resourceTranslatedId, securityGroupResourceId,
117 supportedSecurityGroupsTypes);
120 mdcDataDebugMessage.debugExitMessage(null, null);
123 private void handleGetParam(TranslateTo translateTo, String resourceTranslatedId,
124 AttachedResourceId securityGroupResourceId,
125 List<String> supportedSecurityGroupsTypes) {
126 mdcDataDebugMessage.debugEntryMessage(null, null);
128 if (!(securityGroupResourceId.getEntityId() instanceof String)) {
129 mdcDataDebugMessage.debugExitMessage(null, null);
132 TranslatedHeatResource translatedSharedResourceId =
133 translateTo.getContext().getHeatSharedResourcesByParam()
134 .get(securityGroupResourceId.getEntityId());
135 if (Objects.nonNull(translatedSharedResourceId)
136 && !HeatToToscaUtil.isHeatFileNested(translateTo, translateTo.getHeatFileName())) {
137 if (validateResourceTypeSupportedForReqCreation(translateTo, supportedSecurityGroupsTypes,
138 translatedSharedResourceId.getHeatResource(), "security_groups")) {
139 mdcDataDebugMessage.debugExitMessage(null, null);
142 final NodeTemplate securityGroupNodeTemplate = DataModelUtil
143 .getNodeTemplate(translateTo.getServiceTemplate(),
144 translatedSharedResourceId.getTranslatedId());
145 RequirementAssignment requirement = new RequirementAssignment();
146 requirement.setCapability(ToscaCapabilityType.NATIVE_ATTACHMENT);
147 requirement.setNode(resourceTranslatedId);
148 requirement.setRelationship(ToscaRelationshipType.ATTACHES_TO);
150 .addRequirementAssignment(securityGroupNodeTemplate, ToscaConstants.PORT_REQUIREMENT_ID,
153 ConsolidationDataUtil
154 .updateNodesConnectedIn(translateTo, translatedSharedResourceId.getTranslatedId(),
155 ConsolidationEntityType.PORT, translateTo.getResourceId(),
156 ToscaConstants.PORT_REQUIREMENT_ID, requirement);
159 mdcDataDebugMessage.debugExitMessage(null, null);
162 private void handleGetResource(TranslateTo translateTo, String resourceTranslatedId,
163 AttachedResourceId securityGroupResourceId,
164 List<String> supportedSecurityGroupsTypes) {
167 mdcDataDebugMessage.debugEntryMessage(null, null);
169 String resourceId = (String) securityGroupResourceId.getEntityId();
170 Resource securityGroupResource = HeatToToscaUtil
171 .getResource(translateTo.getHeatOrchestrationTemplate(), resourceId,
172 translateTo.getHeatFileName());
173 Optional<String> securityGroupTranslatedId =
174 ResourceTranslationFactory.getInstance(securityGroupResource)
175 .translateResource(translateTo.getHeatFileName(), translateTo.getServiceTemplate(),
176 translateTo.getHeatOrchestrationTemplate(), securityGroupResource, resourceId,
177 translateTo.getContext());
178 if (securityGroupTranslatedId.isPresent()) {
179 if (validateResourceTypeSupportedForReqCreation(translateTo, supportedSecurityGroupsTypes,
180 securityGroupResource, "security_groups")) {
181 mdcDataDebugMessage.debugExitMessage(null, null);
184 final NodeTemplate securityGroupNodeTemplate = DataModelUtil
185 .getNodeTemplate(translateTo.getServiceTemplate(), securityGroupTranslatedId.get());
186 RequirementAssignment requirement = new RequirementAssignment();
187 requirement.setCapability(ToscaCapabilityType.NATIVE_ATTACHMENT);
188 requirement.setNode(resourceTranslatedId);
189 requirement.setRelationship(ToscaRelationshipType.ATTACHES_TO);
191 .addRequirementAssignment(securityGroupNodeTemplate, ToscaConstants.PORT_REQUIREMENT_ID,
194 ConsolidationDataUtil.updateNodesConnectedIn(translateTo, securityGroupTranslatedId.get(),
195 ConsolidationEntityType.PORT, translateTo.getResourceId(),
196 ToscaConstants.PORT_REQUIREMENT_ID, requirement);
199 mdcDataDebugMessage.debugExitMessage(null, null);
202 private void handleNetworkRequirement(TranslateTo translateTo, NodeTemplate nodeTemplate) {
205 mdcDataDebugMessage.debugEntryMessage(null, null);
207 Optional<AttachedResourceId> networkResourceId =
208 HeatToToscaUtil.extractAttachedResourceId(translateTo, "network");
209 if (networkResourceId.isPresent()) {
210 AttachedResourceId attachedResourceId = networkResourceId.get();
211 addRequirementAssignmentForNetworkResource(translateTo, nodeTemplate, attachedResourceId);
213 networkResourceId = HeatToToscaUtil.extractAttachedResourceId(translateTo, "network_id");
214 if (networkResourceId.isPresent()) {
215 AttachedResourceId attachedResourceId = networkResourceId.get();
216 addRequirementAssignmentForNetworkResource(translateTo, nodeTemplate, attachedResourceId);
220 mdcDataDebugMessage.debugExitMessage(null, null);
223 private void addRequirementAssignmentForNetworkResource(TranslateTo translateTo,
224 NodeTemplate nodeTemplate,
225 AttachedResourceId attachedResourceId) {
228 mdcDataDebugMessage.debugEntryMessage(null, null);
230 String networkTranslatedId;
231 List<String> supportedNetworkTypes =
232 Arrays.asList(HeatResourcesTypes.NEUTRON_NET_RESOURCE_TYPE.getHeatResource(),
233 HeatResourcesTypes.CONTRAIL_VIRTUAL_NETWORK_RESOURCE_TYPE.getHeatResource(),
234 HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_NETWORK_RESOURCE_TYPE.getHeatResource());
235 if (attachedResourceId.isGetResource()) {
236 Resource networkHeatResource = translateTo.getHeatOrchestrationTemplate().getResources()
237 .get(attachedResourceId.getEntityId());
238 if (validateResourceTypeSupportedForReqCreation(translateTo, supportedNetworkTypes,
239 networkHeatResource, "network'\\'network_id")) {
242 networkTranslatedId = (String) attachedResourceId.getTranslatedId();
243 RequirementAssignment requirementAssignment = HeatToToscaUtil.addLinkReqFromPortToNetwork(
244 nodeTemplate, networkTranslatedId);
246 ConsolidationDataUtil.updateNodesConnectedOut(translateTo, networkTranslatedId,
247 ConsolidationEntityType.PORT, ToscaConstants.LINK_REQUIREMENT_ID, requirementAssignment);
249 } else if (attachedResourceId.isGetParam()
250 && attachedResourceId.getEntityId() instanceof String) {
251 TranslatedHeatResource translatedSharedResourceId =
252 translateTo.getContext().getHeatSharedResourcesByParam()
253 .get(attachedResourceId.getEntityId());
254 if (Objects.nonNull(translatedSharedResourceId)
255 && !HeatToToscaUtil.isHeatFileNested(translateTo, translateTo.getHeatFileName())) {
256 if (validateResourceTypeSupportedForReqCreation(translateTo, supportedNetworkTypes,
257 translatedSharedResourceId.getHeatResource(), "network'\\'network_id")) {
260 RequirementAssignment requirementAssignment = HeatToToscaUtil.addLinkReqFromPortToNetwork(
261 nodeTemplate, translatedSharedResourceId.getTranslatedId());
263 ConsolidationDataUtil.updateNodesConnectedOut(translateTo,
264 translatedSharedResourceId.getTranslatedId(), ConsolidationEntityType.PORT,
265 ToscaConstants.LINK_REQUIREMENT_ID, requirementAssignment);
269 mdcDataDebugMessage.debugExitMessage(null, null);
273 private boolean validateResourceTypeSupportedForReqCreation(TranslateTo translateTo,
274 List<String> supportedTypes,
275 Resource heatResource,
276 final String propertyName) {
279 mdcDataDebugMessage.debugEntryMessage(null, null);
281 if (!isResourceTypeSupported(heatResource, supportedTypes)) {
283 "'" + propertyName + "' property of port resource('" + translateTo.getResourceId()
284 + "') is pointing to a resource of type '" + heatResource.getType() + "' "
285 + "which is not supported for this requirement. "
286 + "Supported types are: " + supportedTypes.toString());
288 mdcDataDebugMessage.debugExitMessage(null, null);
291 mdcDataDebugMessage.debugExitMessage(null, null);