aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/SecurityRulesToPortResourceConnection.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/SecurityRulesToPortResourceConnection.java')
-rw-r--r--openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/SecurityRulesToPortResourceConnection.java203
1 files changed, 203 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/SecurityRulesToPortResourceConnection.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/SecurityRulesToPortResourceConnection.java
new file mode 100644
index 0000000000..3c6fef7ffb
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/SecurityRulesToPortResourceConnection.java
@@ -0,0 +1,203 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.translator.services.heattotosca.impl;
+
+
+import org.openecomp.sdc.heat.datatypes.manifest.FileData;
+import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
+import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
+import org.openecomp.sdc.heat.datatypes.model.Resource;
+import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType;
+import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
+import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
+import org.openecomp.sdc.tosca.datatypes.model.CapabilityDefinition;
+import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
+import org.openecomp.sdc.tosca.datatypes.model.NodeType;
+import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
+import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.openecomp.sdc.tosca.services.DataModelUtil;
+import org.openecomp.sdc.tosca.services.ToscaConstants;
+import org.openecomp.sdc.translator.datatypes.heattotosca.AttachedResourceId;
+import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
+import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslatedHeatResource;
+import org.openecomp.sdc.translator.services.heattotosca.Constants;
+import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
+import org.openecomp.sdc.translator.services.heattotosca.ResourceTranslationFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Predicate;
+
+
+class SecurityRulesToPortResourceConnection extends BaseResourceConnection<CapabilityDefinition> {
+ SecurityRulesToPortResourceConnection(ResourceTranslationNestedImpl resourceTranslationNested,
+ TranslateTo translateTo, FileData nestedFileData,
+ NodeTemplate substitutionNodeTemplate, NodeType nodeType) {
+ super(resourceTranslationNested, translateTo, nestedFileData, substitutionNodeTemplate,
+ nodeType);
+ }
+
+ @Override
+ protected boolean isDesiredNodeTemplateType(NodeTemplate nodeTemplate) {
+ return nodeTemplate.getType().equals(ToscaNodeType.NEUTRON_PORT.getDisplayName());
+ }
+
+ @Override
+ protected List<Predicate<CapabilityDefinition>> getPredicatesListForConnectionPoints() {
+ ArrayList<Predicate<CapabilityDefinition>> predicates = new ArrayList<>();
+ predicates.add(cap -> cap.getType().equals(ToscaCapabilityType.ATTACHMENT.getDisplayName()));
+ return predicates;
+ }
+
+ @Override
+ protected Optional<List<String>> getConnectorParamName(
+ String heatResourceId,Resource heatResource,
+ HeatOrchestrationTemplate nestedHeatOrchestrationTemplate) {
+ Object securityGroups =
+ heatResource.getProperties().get(Constants.SECURITY_GROUPS_PROPERTY_NAME);
+ List<String> paramsList = new ArrayList<>();
+ if (securityGroups instanceof List) {
+ ((List) securityGroups).forEach(group -> {
+ Optional<AttachedResourceId> attachedResourceId = HeatToToscaUtil
+ .extractAttachedResourceId(nestedFileData.getFile(), nestedHeatOrchestrationTemplate,
+ translateTo.getContext(), group);
+ if (attachedResourceId.isPresent()) {
+ paramsList.add((String) attachedResourceId.get().getEntityId());
+ }
+ });
+ return Optional.of(paramsList);
+ }
+ return Optional.empty();
+ }
+
+ @Override
+ protected String getDesiredResourceType() {
+ return HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource();
+ }
+
+ @Override
+ protected List<Map<String, CapabilityDefinition>> getAllConnectionPoints() {
+ List<Map<String, CapabilityDefinition>> exposedRequirementsList = new ArrayList<>();
+ List<Predicate<CapabilityDefinition>> predicates = getPredicatesListForConnectionPoints();
+ Map<String, CapabilityDefinition> capabilities = this.nodeType.getCapabilities();
+ if (capabilities == null) {
+ return exposedRequirementsList;
+ }
+ capabilities.entrySet()
+ .stream()
+ .filter(entry -> predicates
+ .stream()
+ .anyMatch(p -> p.test(entry.getValue())))
+ .forEach(entry -> {
+ Map<String, CapabilityDefinition> exposedRequirementsMap = new HashMap<>();
+ exposedRequirementsMap.put(entry.getKey(), entry.getValue());
+ exposedRequirementsList.add(exposedRequirementsMap);
+ });
+
+ return exposedRequirementsList;
+ }
+
+ @Override
+ void addRequirementToConnectResources(Map.Entry<String, CapabilityDefinition> entry,
+ List<String> paramNames) {
+ paramNames.forEach(p -> {
+ Optional<AttachedResourceId> attachedResourceId =
+ HeatToToscaUtil.extractAttachedResourceId(translateTo, p);
+ String securityRulesNodeId;
+ if (!attachedResourceId.isPresent()) {
+ return;
+ }
+ Map.Entry<String, RequirementDefinition> requirementDefinition =
+ createRequirementDefinition(entry.getKey());
+ AttachedResourceId securityGroupAttachedId = attachedResourceId.get();
+ if (securityGroupAttachedId.isGetResource()) {
+ String securityGroupResourceId = (String) attachedResourceId.get().getEntityId();
+ Resource securityGroupResource = HeatToToscaUtil
+ .getResource(translateTo.getHeatOrchestrationTemplate(), securityGroupResourceId,
+ translateTo.getHeatFileName());
+ Optional<String> translatedSecurityRuleId =
+ ResourceTranslationFactory.getInstance(securityGroupResource)
+ .translateResource(translateTo.getHeatFileName(), translateTo.getServiceTemplate(),
+ translateTo.getHeatOrchestrationTemplate(), securityGroupResource,
+ securityGroupResourceId, translateTo.getContext());
+ if (translatedSecurityRuleId.isPresent()) {
+ NodeTemplate securityRuleNodeTemplate = DataModelUtil
+ .getNodeTemplate(translateTo.getServiceTemplate(), translatedSecurityRuleId.get());
+ createRequirementAssignment(requirementDefinition, translateTo.getTranslatedId(),
+ securityRuleNodeTemplate);
+ } else {
+ logger.warn(
+ securityGroupResource.getType() + "connection to " + securityGroupResource.getType()
+ + " is not supported/invalid, therefore this connection "
+ + "will be ignored in the TOSCA translation");
+ }
+ } else if (securityGroupAttachedId.isGetParam()) {
+ TranslatedHeatResource shareResource =
+ translateTo.getContext().getHeatSharedResourcesByParam()
+ .get(securityGroupAttachedId.getEntityId());
+ if (Objects.nonNull(shareResource)
+ && !HeatToToscaUtil.isHeatFileNested(translateTo, translateTo.getHeatFileName())) {
+ NodeTemplate sharedNodeTemplate = DataModelUtil
+ .getNodeTemplate(translateTo.getServiceTemplate(), shareResource.getTranslatedId());
+ createRequirementAssignment(requirementDefinition, translateTo.getTranslatedId(),
+ sharedNodeTemplate);
+ }
+ }
+ });
+ }
+
+ @Override
+ protected String getTranslatedResourceIdFromSubstitutionMapping(
+ ServiceTemplate nestedServiceTemplate, Map.Entry<String, CapabilityDefinition> entry) {
+ List<String> substitutionMapping =
+ nestedServiceTemplate.getTopology_template().getSubstitution_mappings().getCapabilities()
+ .get(entry.getKey());
+ return substitutionMapping.get(0);
+ }
+
+ private Map.Entry<String, RequirementDefinition> createRequirementDefinition(String key) {
+ RequirementDefinition definition = new RequirementDefinition();
+ definition.setCapability(key);
+ definition.setRelationship(ToscaRelationshipType.ATTACHES_TO.getDisplayName());
+ return new Map.Entry<String, RequirementDefinition>() {
+ @Override
+ public String getKey() {
+ return ToscaConstants.PORT_REQUIREMENT_ID;
+ }
+
+ @Override
+ public RequirementDefinition getValue() {
+ return definition;
+ }
+
+ @Override
+ public RequirementDefinition setValue(RequirementDefinition value) {
+ return null;
+ }
+ };
+ }
+
+
+}