summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main
diff options
context:
space:
mode:
authorandre.schmid <andre.schmid@est.tech>2020-05-20 14:24:40 +0100
committerOfir Sonsino <ofir.sonsino@intl.att.com>2020-05-28 07:57:32 +0000
commit9e43b160bde937c32151c8ce5a3d07701bd31924 (patch)
treed5268e69d262c43736d7215af355bc63817a8fef /catalog-be/src/main
parentd8f14691952677771e74e688d7a1dc20e14b036b (diff)
Fix interface types creation
Interface types creation logic was not interpreting some allowed TOSCA entries, that, when declared, were breaking the interface type creation. Every entry under the interface type was being considered as an interface operation, but it is possible to have "derived_from", "version", "metadata" and "description". Also it is not considering the Interface Type entries "inputs", "operations" and "notifications". Another thing is that TOSCA 1.3 changes the way operations should be declared, deprecating the previous way. Now there should be an entry "operations" with the operations entries under it, instead of having the operations entries direct under the interface type. The change allows both types, following the TOSCA rule: if operations entry is not present, then the deprecated way is considered. Change-Id: I13218bda60b29d19b9c5565cbfd63ae3250a78bf Issue-ID: SDC-3075 Signed-off-by: andre.schmid <andre.schmid@est.tech>
Diffstat (limited to 'catalog-be/src/main')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceLifecycleTypeImportManager.java84
-rw-r--r--catalog-be/src/main/resources/import/tosca/interface-lifecycle-types/interfaceLifecycleTypes.yml29
2 files changed, 91 insertions, 22 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceLifecycleTypeImportManager.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceLifecycleTypeImportManager.java
index f6a2e5bd3e..f1b4442e18 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceLifecycleTypeImportManager.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceLifecycleTypeImportManager.java
@@ -21,23 +21,28 @@
package org.openecomp.sdc.be.components.impl;
import fj.data.Either;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+import javax.annotation.Resource;
+import org.apache.commons.collections.MapUtils;
import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.InterfaceDefinition;
import org.openecomp.sdc.be.model.Operation;
import org.openecomp.sdc.be.model.operations.api.IInterfaceLifecycleOperation;
import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
+import org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum;
import org.openecomp.sdc.common.log.wrappers.Logger;
import org.openecomp.sdc.exception.ResponseFormat;
import org.springframework.stereotype.Component;
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
@Component("interfaceLifecycleTypeImportManager")
public class InterfaceLifecycleTypeImportManager {
@@ -53,7 +58,7 @@ public class InterfaceLifecycleTypeImportManager {
public Either<List<InterfaceDefinition>, ResponseFormat> createLifecycleTypes(String interfaceLifecycleTypesYml) {
- Either<List<InterfaceDefinition>, ActionStatus> interfaces = createLifecyclyTypeFromYml(interfaceLifecycleTypesYml);
+ Either<List<InterfaceDefinition>, ActionStatus> interfaces = createInterfaceTypeFromYml(interfaceLifecycleTypesYml);
if (interfaces.isRight()) {
ActionStatus status = interfaces.right().value();
ResponseFormat responseFormat = componentsUtils.getResponseFormatByGroupType(status, null);
@@ -63,8 +68,8 @@ public class InterfaceLifecycleTypeImportManager {
}
- private Either<List<InterfaceDefinition>, ActionStatus> createLifecyclyTypeFromYml(String interfaceLifecycleTypesYml) {
- return commonImportManager.createElementTypesFromYml(interfaceLifecycleTypesYml, this::createLifecycleType);
+ private Either<List<InterfaceDefinition>, ActionStatus> createInterfaceTypeFromYml(final String interfaceTypesYml) {
+ return commonImportManager.createElementTypesFromYml(interfaceTypesYml, this::createInterfaceDefinition);
}
@@ -97,20 +102,59 @@ public class InterfaceLifecycleTypeImportManager {
return eitherResult;
}
- private InterfaceDefinition createLifecycleType(String interfaceDefinition, Map<String, Object> toscaJson) {
- InterfaceDefinition interfaceDef = new InterfaceDefinition();
+ private InterfaceDefinition createInterfaceDefinition(final String interfaceDefinition,
+ final Map<String, Object> toscaJson) {
+ final InterfaceDefinition interfaceDef = new InterfaceDefinition();
interfaceDef.setType(interfaceDefinition);
+ final Object descriptionObj = toscaJson.get(ToscaTagNamesEnum.DESCRIPTION.getElementName());
+ if (descriptionObj instanceof String) {
+ interfaceDef.setDescription((String) descriptionObj);
+ }
+ final Object derivedFromObj = toscaJson.get(ToscaTagNamesEnum.DERIVED_FROM.getElementName());
+ if (derivedFromObj instanceof String) {
+ interfaceDef.setDerivedFrom((String) derivedFromObj);
+ }
+ final Object versionObj = toscaJson.get(ToscaTagNamesEnum.VERSION.getElementName());
+ if (versionObj instanceof String) {
+ interfaceDef.setVersion((String) versionObj);
+ }
- Map<String, Operation> operations = new HashMap<>();
-
- for (Map.Entry<String, Object> entry : toscaJson.entrySet()) {
- Operation operation = new Operation();
- Map<String, Object> opProp = (Map<String, Object>) entry.getValue();
+ final Object metadataObj = toscaJson.get(ToscaTagNamesEnum.METADATA.getElementName());
+ if (metadataObj instanceof Map) {
+ interfaceDef.setToscaPresentationValue(JsonPresentationFields.METADATA, metadataObj);
+ }
- operation.setDescription((String) opProp.get("description"));
- operations.put(entry.getKey(), operation);
+ final Map<String, Object> operationsMap;
+ if (toscaJson.containsKey(ToscaTagNamesEnum.OPERATIONS.getElementName())) {
+ operationsMap = (Map<String, Object>) toscaJson.get(ToscaTagNamesEnum.OPERATIONS.getElementName());
+ } else {
+ final List<String> entitySchemaEntryList = Arrays
+ .asList(ToscaTagNamesEnum.DERIVED_FROM.getElementName(),
+ ToscaTagNamesEnum.DESCRIPTION.getElementName(),
+ ToscaTagNamesEnum.VERSION.getElementName(),
+ ToscaTagNamesEnum.METADATA.getElementName(),
+ ToscaTagNamesEnum.INPUTS.getElementName(),
+ ToscaTagNamesEnum.NOTIFICATIONS.getElementName());
+ operationsMap = toscaJson.entrySet().stream()
+ .filter(interfaceEntry -> !entitySchemaEntryList.contains(interfaceEntry.getKey()))
+ .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
}
- interfaceDef.setOperationsMap(operations);
+ interfaceDef.setOperationsMap(handleOperations(operationsMap));
return interfaceDef;
}
+
+ private Map<String, Operation> handleOperations(final Map<String, Object> operationsToscaEntry) {
+ if (MapUtils.isEmpty(operationsToscaEntry)) {
+ return Collections.emptyMap();
+ }
+ return operationsToscaEntry.entrySet().stream()
+ .collect(Collectors.toMap(Entry::getKey,
+ operationEntry -> createOperation((Map<String, Object>) operationEntry.getValue())));
+ }
+
+ private Operation createOperation(final Map<String, Object> toscaOperationMap) {
+ final Operation operation = new Operation();
+ operation.setDescription((String) toscaOperationMap.get(ToscaTagNamesEnum.DESCRIPTION.getElementName()));
+ return operation;
+ }
}
diff --git a/catalog-be/src/main/resources/import/tosca/interface-lifecycle-types/interfaceLifecycleTypes.yml b/catalog-be/src/main/resources/import/tosca/interface-lifecycle-types/interfaceLifecycleTypes.yml
index 35d67bfef4..9cc6c8c3a8 100644
--- a/catalog-be/src/main/resources/import/tosca/interface-lifecycle-types/interfaceLifecycleTypes.yml
+++ b/catalog-be/src/main/resources/import/tosca/interface-lifecycle-types/interfaceLifecycleTypes.yml
@@ -1,4 +1,9 @@
+tosca.interfaces.Root:
+ derived_from: tosca.entity.Root
+ description: The TOSCA root Interface Type all other TOSCA Interface Types derive from
+
tosca.interfaces.nfv.vnf.lifecycle.Nfv:
+ derived_from: tosca.interfaces.Root
instantiate:
description: Invoked upon receipt of an Instantiate VNF request
instantiate_start:
@@ -53,7 +58,9 @@ tosca.interfaces.nfv.vnf.lifecycle.Nfv:
description: Invoked before scale_to_level
scale_to_level_end:
description: Invoked after scale_to_level
+
tosca.interfaces.node.lifecycle.Standard:
+ derived_from: tosca.interfaces.Root
create:
description: Standard lifecycle create operation.
configure:
@@ -65,10 +72,28 @@ tosca.interfaces.node.lifecycle.Standard:
delete:
description: Standard lifecycle delete operation.
+tosca.interfaces.relationship.Configure:
+ derived_from: tosca.interfaces.Root
+ pre_configure_source:
+ description: Operation to pre-configure the source endpoint.
+ pre_configure_target:
+ description: Operation to pre-configure the target endpoint.
+ post_configure_source:
+ description: Operation to post-configure the source endpoint.
+ post_configure_target:
+ description: Operation to post-configure the target endpoint.
+ add_target:
+ description: Operation to notify the source node of a target node being added via a relationship.
+ add_source:
+ description: Operation to notify the target node of a source node which is now available via a relationship.
+ target_changed:
+ description: Operation to notify source some property or attribute of the target changed
+ remove_target:
+ description: Operation to remove a target node.
# NFV interface types
tosca.interfaces.nfv.Vnflcm:
- #derived_from: tosca.interfaces.Root
- #description: This interface encompasses a set of TOSCA operations corresponding to the VNF LCM operations defined in ETSI GS NFV-IFA 007 as well as to preamble and postamble procedures to the execution of the VNF LCM operations.
+ derived_from: tosca.interfaces.Root
+ description: This interface encompasses a set of TOSCA operations corresponding to the VNF LCM operations defined in ETSI GS NFV-IFA 007 as well as to preamble and postamble procedures to the execution of the VNF LCM operations.
instantiate:
description: Invoked upon receipt of an Instantiate VNF request
# inputs: