2 * Copyright © 2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
19 import org.openecomp.sdc.common.errors.CoreException;
20 import org.openecomp.sdc.heat.datatypes.HeatBoolean;
21 import org.openecomp.sdc.heat.datatypes.model.Resource;
22 import org.openecomp.sdc.tosca.datatypes.ToscaFunctions;
23 import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
24 import org.onap.sdc.tosca.datatypes.model.ParameterDefinition;
25 import org.onap.sdc.tosca.datatypes.model.PropertyType;
26 import org.openecomp.sdc.tosca.services.DataModelUtil;
27 import org.openecomp.sdc.tosca.services.ToscaConstants;
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.services.heattotosca.HeatToToscaUtil;
31 import org.openecomp.sdc.translator.services.heattotosca.ResourceTranslationFactory;
32 import org.openecomp.sdc.translator.services.heattotosca.errors.MissingMandatoryPropertyErrorBuilder;
33 import org.openecomp.sdc.translator.services.heattotosca.mapping.TranslatorHeatToToscaPropertyConverter;
35 import java.util.HashMap;
37 import java.util.Optional;
39 public class ResourceTranslationNeutronSubnetImpl extends ResourceTranslationBase {
42 public void translate(TranslateTo translateTo) {
43 Optional<AttachedResourceId> subnetNetwork = getAttachedNetworkResource(translateTo);
45 if (!subnetNetwork.isPresent() || !subnetNetwork.get().isGetResource()) {
49 Resource networkResource = HeatToToscaUtil
50 .getResource(translateTo.getHeatOrchestrationTemplate(),
51 (String) subnetNetwork.get().getEntityId(), translateTo.getHeatFileName());
52 Optional<String> translatedNetworkId = ResourceTranslationFactory.getInstance(networkResource)
53 .translateResource(translateTo.getHeatFileName(), translateTo.getServiceTemplate(),
54 translateTo.getHeatOrchestrationTemplate(), networkResource,
55 (String) subnetNetwork.get().getEntityId(), translateTo.getContext());
56 if (translatedNetworkId.isPresent()) {
57 NodeTemplate networkNodeTemplate = DataModelUtil
58 .getNodeTemplate(translateTo.getServiceTemplate(), translatedNetworkId.get());
60 Map<String, Map<String, Object>> subNetMap =
61 (Map<String, Map<String, Object>>) networkNodeTemplate.getProperties().get("subnets");
62 if (subNetMap == null) {
63 subNetMap = new HashMap<>();
64 networkNodeTemplate.getProperties().put("subnets", subNetMap);
65 TranslatorHeatToToscaPropertyConverter
66 .setSimpleProperty(translateTo.getServiceTemplate(),translateTo.getTranslatedId(),
67 translateTo.getResource().getProperties(),
68 translateTo.getHeatFileName(), translateTo.getResource().getType(),
69 translateTo.getHeatOrchestrationTemplate(), translateTo.getContext(),
70 networkNodeTemplate.getProperties(), "enable_dhcp",
71 ToscaConstants.DHCP_ENABLED_PROPERTY_NAME, networkNodeTemplate); //dhcp_enabled
72 TranslatorHeatToToscaPropertyConverter
73 .setSimpleProperty(translateTo.getServiceTemplate(),translateTo.getTranslatedId(),
74 translateTo.getResource().getProperties(),
75 translateTo.getHeatFileName(), translateTo.getResource().getType(),
76 translateTo.getHeatOrchestrationTemplate(), translateTo.getContext(),
77 networkNodeTemplate.getProperties(), "ip_version", null, networkNodeTemplate);
78 handleDhcpProperty(translateTo, networkNodeTemplate);
81 Map<String, Object> properties;
82 properties = TranslatorHeatToToscaPropertyConverter
83 .getToscaPropertiesSimpleConversion(translateTo.getServiceTemplate(),translateTo.
84 getResourceId(),translateTo.getResource().getProperties(), null,
85 translateTo.getHeatFileName(), translateTo.getHeatOrchestrationTemplate(),
86 translateTo.getResource().getType(), networkNodeTemplate, translateTo.getContext());
88 subNetMap.put(translateTo.getResourceId(), properties);
93 protected String generateTranslatedId(TranslateTo translateTo) {
94 Optional<AttachedResourceId> subnetNetwork = getAttachedNetworkResource(translateTo);
96 if (!subnetNetwork.isPresent() || !subnetNetwork.get().isGetResource()) {
97 logger.warn("Heat resource: '" + translateTo.getResourceId() + "' with type: '"
98 + translateTo.getResource().getType()
99 + "' include 'network_id/'network'' property without 'get_resource' function, therefore"
100 + " this resource will be ignored in TOSCA translation.");
103 return (String) subnetNetwork.get().getTranslatedId();
106 private void handleDhcpProperty(TranslateTo translateTo, NodeTemplate networkNodeTemplate) {
108 networkNodeTemplate.getProperties().get(ToscaConstants.DHCP_ENABLED_PROPERTY_NAME);
109 if (dhcpEnabled instanceof Map) {
110 Object dhcpEnabledParameterName =
111 ((Map) dhcpEnabled).get(ToscaFunctions.GET_INPUT.getDisplayName());
112 if (dhcpEnabledParameterName != null) {
113 ParameterDefinition dhcpParameterDefinition = null;
114 if (translateTo.getServiceTemplate().getTopology_template().getInputs() != null) {
115 dhcpParameterDefinition =
116 translateTo.getServiceTemplate().getTopology_template().getInputs()
117 .get(dhcpEnabledParameterName);
119 if (dhcpParameterDefinition == null) {
120 logger.warn("Missing input parameter " + dhcpEnabledParameterName);
122 Object defaultVal = dhcpParameterDefinition.get_default();
123 if (defaultVal != null) {
125 Boolean booleanValue = HeatBoolean.eval(defaultVal);
126 dhcpParameterDefinition.set_default(booleanValue);
127 } catch (CoreException coreException) {
128 dhcpParameterDefinition.set_default(true);
129 logger.warn("Parameter '" + dhcpEnabledParameterName + "' used for "
130 + ToscaConstants.DHCP_ENABLED_PROPERTY_NAME
131 + " boolean property, but it's value is not a valid boolean value, therefore "
132 + ToscaConstants.DHCP_ENABLED_PROPERTY_NAME
133 + " property will be set with default value of 'true'.", coreException);
135 dhcpParameterDefinition.setType(PropertyType.BOOLEAN.getDisplayName());
142 private Optional<AttachedResourceId> getAttachedNetworkResource(TranslateTo translateTo) {
143 Optional<AttachedResourceId> subnetNetwork;
144 Optional<AttachedResourceId> attachedNetworkId =
145 HeatToToscaUtil.extractAttachedResourceId(translateTo, "network_id");
146 if (!attachedNetworkId.isPresent()) {
147 Optional<AttachedResourceId> attachedNetwork =
148 HeatToToscaUtil.extractAttachedResourceId(translateTo, "network");
149 if (!attachedNetwork.isPresent()) {
150 throw new CoreException(
151 new MissingMandatoryPropertyErrorBuilder("network_id/'network'").build());
153 subnetNetwork = attachedNetwork;
156 subnetNetwork = attachedNetworkId;
158 return subnetNetwork;