diff options
14 files changed, 1078 insertions, 169 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ProductServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ProductServlet.java index 681195643e..209f38d8a4 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ProductServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ProductServlet.java @@ -39,7 +39,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.openecomp.sdc.be.components.impl.ProductBusinessLogic; -import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.model.Product; @@ -51,14 +50,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jcabi.aspects.Loggable; + +import fj.data.Either; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; -import fj.data.Either; - @Loggable(prepend = true, value = Loggable.DEBUG, trim = false) @Path("/v1/catalog") @Api(value = "Product Catalog", description = "Product Servlet") diff --git a/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.json b/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.json new file mode 100644 index 0000000000..5d721d4abc --- /dev/null +++ b/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.json @@ -0,0 +1,15 @@ +{ + "payloadName": "VDU.yml", + "contactId": "jh0003", + "name": "VDU", + "description": "VDU", + "resourceIconPath": "compute", + "resourceType": "VFC", + "categories": [{ + "name": "Generic", + "subcategories": [{ + "name": "Infrastructure" + }] + }], + "tags": ["VDU"] +}
\ No newline at end of file diff --git a/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.yml b/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.yml new file mode 100644 index 0000000000..541126f7e3 --- /dev/null +++ b/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.yml @@ -0,0 +1,22 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0 +node_types: + tosca.nodes.nfv.VDU: + derived_from: tosca.nodes.SoftwareComponent + capabilities: +#Not found in any spec +# high_availability: +# type: nfv.capabilities.HA + Virtualbinding: + type: tosca.capabilities.nfv.VirtualBindable +# monitoring_parameter: +# type: nfv.capabilities.Metric + requirements: +#Not found in any spec +# - high_availability: +# capability: nfv.capabilities.HA +# relationship: nfv.relationships.HA +# occurrences: [ 0, 1 ] + - host: + capability: tosca.capabilities.Container + node: tosca.nodes.Compute + relationship: tosca.relationships.HostedOn diff --git a/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.zip b/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.zip Binary files differnew file mode 100644 index 0000000000..9010bf0544 --- /dev/null +++ b/catalog-be/src/main/resources/import/tosca/onap-types/VDU/VDU.zip diff --git a/catalog-be/src/main/resources/import/tosca/onap-types/vduCpd/vduCpd.yml b/catalog-be/src/main/resources/import/tosca/onap-types/vduCpd/vduCpd.yml index e5d79fcacf..673e923182 100644 --- a/catalog-be/src/main/resources/import/tosca/onap-types/vduCpd/vduCpd.yml +++ b/catalog-be/src/main/resources/import/tosca/onap-types/vduCpd/vduCpd.yml @@ -1,3 +1,4 @@ +#NOT SPEC COMPLAINT!!!!!!!!!!!!!!!!!!!!!! tosca_definitions_version: tosca_simple_yaml_1_0_0 node_types: tosca.nodes.nfv.VduCpd: diff --git a/catalog-be/src/main/resources/scripts/import/tosca/importOnapTypes.py b/catalog-be/src/main/resources/scripts/import/tosca/importOnapTypes.py index 31c11c74bc..664c5cc64a 100644 --- a/catalog-be/src/main/resources/scripts/import/tosca/importOnapTypes.py +++ b/catalog-be/src/main/resources/scripts/import/tosca/importOnapTypes.py @@ -30,7 +30,8 @@ def importOnapTypes(beHost, bePort, adminUser, fileDir, updateversion): "vduCpd", "vduVirtualStorage", "vnfVirtualLinkDesc", - "NSD" + "NSD", + "VDU" ] responseCodes = [200, 201] diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ComponentQuestionnaireHealer.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ComponentQuestionnaireHealer.java index d061556e4c..4dadb97f71 100644 --- a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ComponentQuestionnaireHealer.java +++ b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ComponentQuestionnaireHealer.java @@ -19,6 +19,7 @@ import org.openecomp.sdc.versioning.dao.types.Version; import java.util.Collection; import java.util.Map; +import java.util.Objects; public class ComponentQuestionnaireHealer implements Healer { @@ -59,8 +60,10 @@ public class ComponentQuestionnaireHealer implements Healer { Collection<ComponentEntity> componentEntities = componentDao.list(new ComponentEntity(vspId, version, null)); componentEntities.forEach(componentEntity -> { - String questionnaire = componentDao.getQuestionnaireData(vspId, version, componentEntity - .getId()).getQuestionnaireData(); + ComponentEntity componentQuestionnaireData = + componentDao.getQuestionnaireData(vspId, version, componentEntity.getId()); + String questionnaire = Objects.isNull(componentQuestionnaireData) ? null + : componentQuestionnaireData.getQuestionnaireData(); if (questionnaire != null) { JsonParser jsonParser = new JsonParser(); @@ -97,7 +100,6 @@ public class ComponentQuestionnaireHealer implements Healer { * Move Disk Atributes from genral/image/ to genral/disk in component questionnaire itself * @param json * @param diskAttrName - * @param diskJsonObject * @return */ private void processDiskAttribute(JsonObject json, String diskAttrName) { diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/SubEntitiesQuestionnaireHealer.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/SubEntitiesQuestionnaireHealer.java index 130405be1d..9355eb076f 100644 --- a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/SubEntitiesQuestionnaireHealer.java +++ b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/SubEntitiesQuestionnaireHealer.java @@ -55,6 +55,9 @@ public class SubEntitiesQuestionnaireHealer implements Healer { private static NicDao nicDao = NicDaoFactory.getInstance().createInterface(); private static NetworkDao networkDao = NetworkDaoFactory.getInstance().createInterface(); + private static String emptyString = ""; + private static String emptyJson = "{}"; + @Override public Object heal(Map<String, Object> healingParams) throws Exception { @@ -90,8 +93,7 @@ public class SubEntitiesQuestionnaireHealer implements Healer { for (Object entity : compositionEntities) { CompositionEntity compositionEntity = (CompositionEntity) entity; - if (Objects.isNull(compositionEntity.getQuestionnaireData()) || - "".equals(compositionEntity.getQuestionnaireData())) { + if (isQuestionnaireNeedsToGetHealed(compositionEntity)) { compositionEntity.setVersion(newVersion); updateNullQuestionnaire(compositionEntity, type); } @@ -100,6 +102,12 @@ public class SubEntitiesQuestionnaireHealer implements Healer { mdcDataDebugMessage.debugExitMessage(null); } + private boolean isQuestionnaireNeedsToGetHealed(CompositionEntity compositionEntity) { + return Objects.isNull(compositionEntity.getQuestionnaireData()) + || emptyString.equals(compositionEntity.getQuestionnaireData()) + || emptyJson.equals(compositionEntity.getQuestionnaireData()); + } + private void updateNullQuestionnaire(CompositionEntity entity, CompositionEntityType type) { diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ValidationStructureHealer.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ValidationStructureHealer.java index 58ba3b7c35..4bf7e18091 100644 --- a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ValidationStructureHealer.java +++ b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ValidationStructureHealer.java @@ -48,6 +48,11 @@ public class ValidationStructureHealer implements Healer { UploadDataEntity orchestrationTemplate = orchestrationTemplateDao.getOrchestrationTemplate(vspId, version); + if(Objects.isNull(orchestrationTemplate.getValidationData()) + || !JsonUtil.isValidJson(orchestrationTemplate.getValidationData())){ + return Optional.empty(); + } + OldValidationStructureTree oldValidationStructureTree; try{ oldValidationStructureTree = diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/VlmVersionHealer.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/VlmVersionHealer.java index 4accd790ab..085923b8a0 100644 --- a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/VlmVersionHealer.java +++ b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/VlmVersionHealer.java @@ -1,5 +1,6 @@ package org.openecomp.sdc.healing.healers; +import org.apache.commons.collections4.CollectionUtils; import org.openecomp.sdc.common.utils.SdcCommon; import org.openecomp.sdc.healing.interfaces.Healer; import org.openecomp.sdc.logging.api.Logger; @@ -15,6 +16,7 @@ import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao; import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDaoFactory; import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails; import org.openecomp.sdc.versioning.dao.types.Version; +import org.openecomp.sdc.versioning.types.VersionInfo; import java.util.ArrayList; import java.util.List; @@ -60,7 +62,7 @@ public class VlmVersionHealer implements Healer { VendorLicenseModelEntity vlm = vendorLicenseModel.getVendorLicenseModel(); String vlmId = vlm.getId(); - Version vlmVersion = vlm.getVersion(); + Version vlmVersion = getLatestFinalVlmVersion(vendorLicenseModel.getVersionInfo()); List<LicenseAgreementEntity> laList = new ArrayList<>( @@ -68,12 +70,19 @@ public class VlmVersionHealer implements Healer { vspDetails.setVlmVersion(vlmVersion); - vspDetails.setLicenseAgreement(laList.get(0).getId()); - vspDetails.setFeatureGroups(new ArrayList<>(laList.get(0).getFeatureGroupIds())); - vspInfoDao.update(vspDetails); + if(CollectionUtils.isNotEmpty(laList)) { + vspDetails.setLicenseAgreement(laList.get(0).getId()); + vspDetails.setFeatureGroups(new ArrayList<>(laList.get(0).getFeatureGroupIds())); + } + vspInfoDao.update(vspDetails); return vspDetails; } + + private Version getLatestFinalVlmVersion(VersionInfo versionInfo){ + return versionInfo.getActiveVersion().isFinal() ? versionInfo.getActiveVersion() + : versionInfo.getLatestFinalVersion(); + } } diff --git a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/main/java/org/openecomp/sdc/enrichment/impl/tosca/PortMirroringEnricher.java b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/main/java/org/openecomp/sdc/enrichment/impl/tosca/PortMirroringEnricher.java index 2fe1416ffc..705773d1fc 100644 --- a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/main/java/org/openecomp/sdc/enrichment/impl/tosca/PortMirroringEnricher.java +++ b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/main/java/org/openecomp/sdc/enrichment/impl/tosca/PortMirroringEnricher.java @@ -9,27 +9,34 @@ import org.apache.commons.collections4.MapUtils; import org.openecomp.sdc.datatypes.error.ErrorMessage; import org.openecomp.sdc.enrichment.impl.tosca.model.PortMirroringConnectionPointDescription; import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage; +import org.openecomp.sdc.tosca.datatypes.ToscaElementTypes; import org.openecomp.sdc.tosca.datatypes.ToscaNodeType; import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel; import org.openecomp.sdc.tosca.datatypes.model.CapabilityAssignment; import org.openecomp.sdc.tosca.datatypes.model.Import; import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate; +import org.openecomp.sdc.tosca.datatypes.model.NodeType; import org.openecomp.sdc.tosca.datatypes.model.PropertyDefinition; import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment; import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate; import org.openecomp.sdc.tosca.services.DataModelUtil; +import org.openecomp.sdc.tosca.services.ToscaAnalyzerService; import org.openecomp.sdc.tosca.services.ToscaConstants; import org.openecomp.sdc.tosca.services.ToscaUtil; +import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl; import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil; import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; public class PortMirroringEnricher { @@ -186,40 +193,40 @@ public class PortMirroringEnricher { addPortMirroringSubstitutionMappingCapability(serviceTemplate, externalPortNodeTemplateId); } - handleExternalPortProperties(externalNodeTemplate.getValue()); + handleExternalPortProperties(externalNodeTemplate.getValue(), serviceTemplate, toscaServiceModel); } addGlobalTypeImport(serviceTemplate); } } } - private void handleExternalPortProperties(NodeTemplate portNodeTemplate) { + private void handleExternalPortProperties(NodeTemplate portNodeTemplate, + ServiceTemplate serviceTemplate, + ToscaServiceModel toscaServiceModel){ - ServiceTemplate serviceTemplate = globalTypesServiceTemplate.get("openecomp/nodes.yml"); + ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl(); String externalPortType = portNodeTemplate.getType(); Map<String, PropertyDefinition> globalTypesportProperties = new HashMap<>(); - globalTypesportProperties.putAll( - serviceTemplate.getNode_types().get("org.openecomp.resource.cp.nodes.network.Port") - .getProperties()); - globalTypesportProperties - .putAll(serviceTemplate.getNode_types().get(externalPortType).getProperties()); + NodeType flatNodeType = + (NodeType) toscaAnalyzerService.getFlatEntity(ToscaElementTypes.NODE_TYPE, externalPortType, serviceTemplate, toscaServiceModel); + globalTypesportProperties.putAll(flatNodeType.getProperties()); Map<String, Object> properties = portNodeTemplate.getProperties(); Map<String, Object> filteredProperties = new HashMap<>(); - if (MapUtils.isEmpty(properties)) { + if(MapUtils.isEmpty(properties)){ return; } - for (Map.Entry<String, Object> propertyEntry : properties.entrySet()) { - if (globalTypesportProperties.containsKey(propertyEntry.getKey())) { + for(Map.Entry<String, Object> propertyEntry: properties.entrySet()){ + if(globalTypesportProperties.containsKey(propertyEntry.getKey())){ filteredProperties.put(propertyEntry.getKey(), propertyEntry.getValue()); } } - if (!MapUtils.isEmpty(filteredProperties)) { + if(!MapUtils.isEmpty(filteredProperties)) { portNodeTemplate.setProperties(filteredProperties); - } else { + }else{ portNodeTemplate.setProperties(null); } @@ -284,14 +291,15 @@ public class PortMirroringEnricher { private boolean isPortNodeTemplate(String nodeType) { //Check if node corresponds to a concrete port node - if (Objects.nonNull(nodeType)) { - if (nodeType.equals(ToscaNodeType.NEUTRON_PORT) - || nodeType.equals(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE) - || nodeType.equals(ToscaNodeType.CONTRAIL_PORT)) { - return true; - } - } - return false; + Set<String> portNodeTypes = getPortNodeTypes(); + return Objects.nonNull(nodeType) + && portNodeTypes.contains(nodeType); + } + + private Set<String> getPortNodeTypes(){ + return new HashSet<>(Arrays.asList(ToscaNodeType.NEUTRON_PORT, + ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE, + ToscaNodeType.CONTRAIL_PORT)); } private boolean isSubstitutableNodeTemplate(NodeTemplate nodeTemplate) { diff --git a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/test/resources/mock/toscaGlobalServiceTemplates/openecomp/nodes.yml b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/test/resources/mock/toscaGlobalServiceTemplates/openecomp/nodes.yml index 83516a22ba..810bf304c1 100644 --- a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/test/resources/mock/toscaGlobalServiceTemplates/openecomp/nodes.yml +++ b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/src/test/resources/mock/toscaGlobalServiceTemplates/openecomp/nodes.yml @@ -1,308 +1,316 @@ +# +# 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. +# + tosca_definitions_version: tosca_simple_openecomp_1_0 + metadata: filename: openecomp/nodes.yml version: '1.0' + imports: - openecomp_index: file: _index.yml + node_types: - org.openecomp.resource.vl.nodes.network.VL: + + org.openecomp.resource.vl.nodes.network.Network: derived_from: tosca.nodes.network.Network properties: vendor: type: string required: false - status: SUPPORTED vl_name: type: string required: false - status: SUPPORTED capabilities: end_point: type: tosca.capabilities.Endpoint - occurrences: - - 1 - - UNBOUNDED + org.openecomp.resource.abstract.nodes.AbstractSubstitute: derived_from: tosca.nodes.Root properties: service_template_filter: - type: org.openecomp.datatypes.substitution.SubstitutionFiltering description: Substitution Filter - required: true + type: org.openecomp.datatypes.substitution.SubstitutionFiltering status: SUPPORTED + required: true + org.openecomp.resource.vl.extVL: - derived_from: org.openecomp.resource.vl.nodes.network.VL + derived_from: org.openecomp.resource.vl.nodes.network.Network description: VF Tenant oam protected network properties: network_type: - type: string description: OPENECOMP supported network types. + type: string required: true - status: SUPPORTED network_role: - type: string description: | Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network + type: string required: true - status: SUPPORTED network_scope: - type: string description: | Uniquely identifies the network scope. Valid values for the network scope includes: VF - VF-level network. Intra-VF network which connects the VFCs (VMs) inside the VF. SERVICE - Service-level network. Intra-Service network which connects the VFs within the service GLOBAL - Global network which can be shared by multiple services - required: true - status: SUPPORTED + type: string constraints: - valid_values: - VF - SERVICE - GLOBAL network_technology: - type: string description: OPENECOMP supported network technology + type: string required: true - status: SUPPORTED network_ecomp_naming: type: org.openecomp.datatypes.EcompNaming required: true - status: SUPPORTED network_homing: type: org.openecomp.datatypes.EcompHoming required: true - status: SUPPORTED network_assignments: type: org.openecomp.datatypes.network.NetworkAssignments required: true - status: SUPPORTED provider_network: type: org.openecomp.datatypes.network.ProviderNetwork required: true - status: SUPPORTED network_flows: type: org.openecomp.datatypes.network.NetworkFlows required: false - status: SUPPORTED + + org.openecomp.resource.vfc.nodes.Compute: derived_from: tosca.nodes.Compute capabilities: disk.ephemeral.size: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED instance: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED memory: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.iops: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED cpu.delta: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.capacity: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.latency: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.usage: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED cpu_util: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.allocation: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.latency: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED cpu: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.root.size: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED vcpus: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.iops: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.usage: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.read.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.allocation: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED memory.usage: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.device.capacity: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED memory.resident: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED disk.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED + org.openecomp.resource.abstract.nodes.DFAbstractSubstitute: derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute properties: license_feature_group_ref: - type: string description: refrence to license feature group - required: true + type: string status: SUPPORTED + required: true requirements: - deployment_flavor: capability: org.openecomp.capabilities.attachment.DeploymentFlavor @@ -311,191 +319,222 @@ node_types: occurrences: - 1 - UNBOUNDED + + org.openecomp.resource.abstract.nodes.ComplexVFC: + derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute + org.openecomp.resource.abstract.nodes.VFC: derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute properties: high_availablity: - type: string description: high_availablity - required: false + type: string status: SUPPORTED + required: false vm_image_name: - type: string description: Master image_name volume id - required: true + type: string status: SUPPORTED + required: true vm_flavor_name: - type: string description: Master image_name volume id - required: true + type: string status: SUPPORTED + required: true nfc_naming_code: - type: string description: nfc code for instance naming + type: string + status: SUPPORTED required: false + nfc_code: + type: string + description: nfc code status: SUPPORTED - vm_type_tag: + required: false + nfc_function: type: string - description: vm type based on naming Convention + description: nfc function + status: SUPPORTED required: false + vm_type_tag: + description: vm type based on naming Convention + type: string status: SUPPORTED + required: false vfc_naming: - type: org.openecomp.datatypes.Naming description: vfc naming - required: false - default: false + type: org.openecomp.datatypes.Naming status: SUPPORTED + default: false + required: false min_instances: - type: integer description: Minimum number of VFC Instances - required: false - default: 0 + type: integer status: SUPPORTED + default: 0 + required: false constraints: - greater_or_equal: 0 max_instances: - type: integer description: Maximum number of VFC Instances - required: false + type: integer status: SUPPORTED + required: false constraints: - greater_or_equal: 1 + org.openecomp.resource.vl.ELine: - derived_from: org.openecomp.resource.vl.nodes.network.VL + derived_from: org.openecomp.resource.vl.nodes.network.Network capabilities: linkable: type: tosca.capabilities.network.Linkable occurrences: - 0 - 2 + org.openecomp.resource.cp.nodes.network.SubInterface: derived_from: tosca.nodes.network.Port + org.openecomp.resource.vl.internalVL: - derived_from: org.openecomp.resource.vl.nodes.network.VL + derived_from: org.openecomp.resource.vl.nodes.network.Network description: The AT&T internal (VF-level) Virtual Link - org.openecomp.resource.cp.nodes.network.CP: - derived_from: tosca.nodes.network.Port + + org.openecomp.resource.cp.nodes.network.Port: + derived_from: tosca.nodes.network.Port properties: network_role_tag: - type: string description: Must correlate to the set of defined “network-role�? tag identifiers from the associated HEAT template + type: string required: true - status: SUPPORTED mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements description: identifies MAC address assignments to the CP + type: org.openecomp.datatypes.network.MacRequirements required: false - status: SUPPORTED vlan_requirements: - type: list description: identifies vlan address assignments to the CP - required: false - status: SUPPORTED + type: list entry_schema: type: org.openecomp.datatypes.network.VlanRequirements + required: false ip_requirements: - type: list description: identifies IP requirements to the CP - required: true - status: SUPPORTED + type: list entry_schema: type: org.openecomp.datatypes.network.IpRequirements + required: true + network_role: + description: identical to VL network_role + type: string + required: false + order: + description: The order of the CP on the compute instance (e.g. eth2). + type: integer + required: false + exCP_naming: + description: CP Name + type: org.openecomp.datatypes.Naming + required: false + subnetpoolid: + description: subnet pool id + type: string + required: false capabilities: network.incoming.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED network.outgoing.bytes: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED network.outgoing.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED network.outpoing.packets: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED network.incoming.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED network.incoming.bytes: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED network.outgoing.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED network.incoming.packets: - type: org.openecomp.capabilities.metric.Ceilometer description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + type: org.openecomp.capabilities.metric.Ceilometer occurrences: - 1 - UNBOUNDED + org.openecomp.resource.nodes.DeploymentFlavor: derived_from: tosca.nodes.Root capabilities: deployment_flavor: - type: org.openecomp.capabilities.attachment.DeploymentFlavor description: Allowed deployment flavors of an abstract node + type: org.openecomp.capabilities.attachment.DeploymentFlavor occurrences: - 1 - UNBOUNDED + org.openecomp.resource.cp.extCP: derived_from: tosca.nodes.Root description: The AT&T Connection Point base type all other CP derive from properties: network_role: - type: string description: identical to VL network_role + type: string required: true - status: SUPPORTED order: - type: integer description: The order of the CP on the compute instance (e.g. eth2). + type: integer required: true - status: SUPPORTED network_role_tag: - type: string description: Must correlate to the set of defined “network-role�? tag identifiers from the associated HEAT template + type: string required: true - status: SUPPORTED mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements description: identifies MAC address assignments to the CP + type: org.openecomp.datatypes.network.MacRequirements required: false - status: SUPPORTED vlan_requirements: - type: list description: identifies vlan address assignments to the CP - required: false - status: SUPPORTED + type: list entry_schema: type: org.openecomp.datatypes.network.VlanRequirements + required: false ip_requirements: - type: list description: identifies IP requirements to the CP - required: true - status: SUPPORTED + type: list entry_schema: type: org.openecomp.datatypes.network.IpRequirements + required: true + capabilities: + internal_connectionPoint: + type: tosca.capabilities.Node + valid_source_types: + - tosca.nodes.network.Port requirements: - virtualLink: capability: tosca.capabilities.network.Linkable @@ -505,15 +544,802 @@ node_types: relationship: tosca.relationships.network.BindsTo - external_virtualLink: capability: tosca.capabilities.network.Linkable - node: org.openecomp.resource.vl.nodes.network.VL + node: org.openecomp.resource.vl.nodes.network.Network relationship: tosca.relationships.network.LinksTo + + org.openecomp.resource.vfc.nodes.volume: + derived_from: tosca.nodes.BlockStorage + + ### Node types related to Deployment Flavors + org.openecomp.resource.abstract.nodes.VnfConfiguration: + derived_from: tosca.nodes.Root + description: a container for the available flavors + properties: + allowed_flavors: + description: a collection of all available flavor valuesets + type: map + entry_schema: + type: org.openecomp.datatypes.flavors.DeploymentFlavor + + org.openecomp.resource.abstract.nodes.MultiFlavorVFC: + derived_from: org.openecomp.resource.abstract.nodes.VFC + description: Multi flavored VFC node + properties: + images: + type: map + entry_schema: + type: org.openecomp.datatypes.ImageInfo + required: false + + ## New node types for Port Mirroring + org.openecomp.nodes.ServiceProxy: + derived_from: tosca.nodes.Root + + org.openecomp.nodes.PortMirroringConfiguration: + derived_from: tosca.nodes.Root + requirements: + - source: + capability: org.openecomp.capabilities.PortMirroring + occurrences: + - 1 + - UNBOUNDED + - collector: + capability: org.openecomp.capabilities.PortMirroring + occurrences: + - 1 + - 1 + + org.openecomp.resource.cp.v2.extCP: + derived_from: org.openecomp.resource.cp.nodes.network.Port + description: The SDC External Connection Point base type capabilities: - internal_connectionPoint: - type: tosca.capabilities.Node - valid_source_types: - - tosca.nodes.network.Port + port_mirroring: + type: org.openecomp.capabilities.PortMirroring + + org.openecomp.resource.cp.v2.extNeutronCP: + derived_from: org.openecomp.resource.cp.v2.extCP + properties: + port_security_enabled: + type: boolean + description: Flag to enable/disable port security on the network + required: false + status: SUPPORTED + device_id: + type: string + description: Device ID of this port + required: false + status: SUPPORTED + qos_policy: + type: string + description: The name or ID of QoS policy to attach to this network + required: false + status: SUPPORTED + allowed_address_pairs: + type: list + description: Additional MAC/IP address pairs allowed to pass through the port + required: false + status: SUPPORTED + entry_schema: + type: org.openecomp.datatypes.heat.network.AddressPair + binding:vnic_type: + type: string + description: The vnic type to be bound on the neutron port + required: false + status: SUPPORTED + constraints: + - valid_values: + - macvtap + - direct + - normal + value_specs: + type: map + description: Extra parameters to include in the request + required: false + default: { + } + status: SUPPORTED + entry_schema: + type: string + device_owner: + type: string + description: Name of the network owning the port + required: false + status: SUPPORTED + network: + type: string + description: Network this port belongs to + required: false + status: SUPPORTED + replacement_policy: + type: string + description: Policy on how to respond to a stack-update for this resource + required: false + default: AUTO + status: SUPPORTED + constraints: + - valid_values: + - REPLACE_ALWAYS + - AUTO + security_groups: + type: list + description: List of security group names or IDs + required: false + status: SUPPORTED + entry_schema: + type: string + fixed_ips: + type: list + description: Desired IPs for this port + required: false + status: SUPPORTED + entry_schema: + type: org.openecomp.datatypes.heat.neutron.port.FixedIps + mac_address: + type: string + description: MAC address to give to this port + required: false + status: SUPPORTED + admin_state_up: + type: boolean + description: A boolean value specifying the administrative status of the network + required: false + default: true + status: SUPPORTED + name: + type: string + description: A symbolic name for this port + required: false + status: SUPPORTED + attributes: + tenant_id: + type: string + description: Tenant owning the port + status: SUPPORTED + network_id: + type: string + description: Unique identifier for the network owning the port + status: SUPPORTED + qos_policy_id: + type: string + description: The QoS policy ID attached to this network + status: SUPPORTED + show: + type: string + description: Detailed information about resource + status: SUPPORTED + subnets: + type: list + description: Subnets of this network + status: SUPPORTED + entry_schema: + type: string + status: + type: string + description: The status of the network + status: SUPPORTED + capabilities: + attachment: + type: tosca.capabilities.Attachment occurrences: - 1 - UNBOUNDED - org.openecomp.resource.vfc.nodes.volume: - derived_from: tosca.nodes.BlockStorage + binding: + type: tosca.capabilities.network.Bindable + valid_source_types: + - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface + occurrences: + - 0 + - UNBOUNDED + + org.openecomp.resource.cp.v2.extContrailCP: + derived_from: org.openecomp.resource.cp.v2.extCP + properties: + static_routes: + type: list + description: An ordered list of static routes to be added to this interface + required: false + status: SUPPORTED + entry_schema: + type: org.openecomp.datatypes.heat.network.contrail.port.StaticRoute + virtual_network: + type: string + description: Virtual Network for this interface + required: true + status: SUPPORTED + static_route: + type: boolean + description: Static route enabled + required: false + default: false + status: SUPPORTED + allowed_address_pairs: + type: list + description: List of allowed address pair for this interface + required: false + status: SUPPORTED + entry_schema: + type: org.openecomp.datatypes.heat.network.contrail.AddressPair + shared_ip: + type: boolean + description: Shared ip enabled + required: false + default: false + status: SUPPORTED + ip_address: + type: string + description: IP for this interface + required: false + status: SUPPORTED + interface_type: + type: string + description: Interface type + required: true + status: SUPPORTED + constraints: + - valid_values: + - management + - left + - right + - other + attributes: + fq_name: + type: string + description: fq_name + status: SUPPORTED + tosca.nodes.nfv.NS.vEPC_NS: + derived_from: tosca.nodes.nfv.NS + properties: + vendor: + default: ChinaMobile + required: false + type: string + csarVersion: + default: v1.0 + required: false + type: string + name: + default: vEPC_NS + required: false + type: string + csarProvider: + default: ChinaMobile + required: false + type: string + id: + default: vEPC_NS + required: false + type: string + version: + default: v1.0 + required: false + type: string + csarType: + default: NSAR + required: false + type: string + requirements: + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + occurrences: + - 0 + - UNBOUNDED + + tosca.nodes.nfv.NS.vIMS_NS: + derived_from: tosca.nodes.nfv.NS + properties: + vendor: + default: ChinaMobile + required: false + type: string + csarVersion: + default: v1.0 + required: false + type: string + name: + default: vIMS_NS + required: false + type: string + csarProvider: + default: ChinaMobile + required: false + type: string + id: + default: vIMS_NS + required: false + type: string + version: + default: v1.0 + required: false + type: string + csarType: + default: NSAR + required: false + type: string + requirements: + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + occurrences: + - 0 + - UNBOUNDED + + tosca.nodes.nfv.NS: + derived_from: tosca.nodes.Root + properties: + vendor: + required: false + type: string + name: + required: false + type: string + id: + required: false + type: string + version: + required: false + type: string + requirements: + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + occurrences: + - 0 + - UNBOUNDED + + tosca.nodes.nfv.VDU.Compute: + attributes: + private_address: + type: string + public_address: + type: string + networks: + type: string + ports: + type: string + capabilities: + scalable: + type: tosca.capabilities.Scalable + virtual_compute: + type: tosca.capabilities.nfv.VirtualCompute + endpoint: + type: tosca.capabilities.Endpoint.Admin + os: + type: tosca.capabilities.OperatingSystem + virtual_binding: + type: tosca.capabilities.nfv.VirtualBindable + host: + type: tosca.capabilities.Container + binding: + type: tosca.capabilities.network.Bindable + monitoring_parameter: + type: tosca.capabilities.nfv.Metric + derived_from: tosca.nodes.Root + properties: + configurable_properties: + entry_schema: + type: tosca.datatypes.nfv.VnfcConfigurableProperties + type: map + name: + type: string + nfvi_constraints: + entry_schema: + type: string + required: false + type: list + descrption: + type: string + boot_order: + entry_schema: + type: string + required: false + type: list + requirements: + - local_storage: + capability: tosca.capabilities.Attachment + occurrences: + - 0 + - UNBOUNDED + - virtual_storage: + capability: tosca.capabilities.nfv.VirtualStorage + occurrences: + - 0 + - UNBOUNDED + + tosca.nodes.nfv.VDU.VirtualStorage: + capabilities: + virtual_storage: + type: tosca.capabilities.nfv.VirtualStorage + derived_from: tosca.nodes.Root + properties: + id: + type: string + size_of_storage: + type: string + rdma_enabled: + required: false + type: boolean + type_of_storage: + type: string + + tosca.nodes.nfv.VduCpd: + derived_from: tosca.nodes.Root + properties: + virtual_network_interface_requirements: + entry_schema: + type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements + required: false + type: list + role: + constraints: + - valid_values: + - root + - leaf + required: false + type: string + bitrate_requirement: + required: false + type: integer + description: + required: false + type: string + layer_protocol: + constraints: + - valid_values: + - ethernet + - mpls + - odu2 + - ipv4 + - ipv6 + - pseudo_wire + type: string + address_data: + entry_schema: + type: tosca.datatype.nfv.AddressData + required: false + type: list + requirements: + - virtual_binding: + capability: tosca.capabilities.nfv.VirtualBindable + occurrences: + - 0 + - UNBOUNDED + - virtual_link: + capability: tosca.capabilities.nfv.VirtualBindable + occurrences: + - 0 + - UNBOUNDED + tosca.nodes.nfv.ext.ImageFile: + capabilities: + guest_os: + type: tosca.capabilities.nfv.ext.GuestOs + image_fle: + type: tosca.capabilities.nfv.ext.ImageFile + derived_from: tosca.nodes.Root + properties: + file_url: + required: false + type: string + container_type: + required: false + type: string + name: + required: false + type: string + disk_format: + required: false + type: string + version: + required: false + type: string + tosca.nodes.nfv.ext.LocalStorage: + capabilities: + local_attachment: + type: tosca.capabilities.nfv.ext.LocalAttachment + derived_from: tosca.nodes.Root + properties: + size: + required: false + type: string + disk_type: + required: false + type: string + tosca.nodes.nfv.ext.zte.CP: + capabilities: + forwarder: + type: tosca.capabilities.nfv.Forwarder + derived_from: tosca.nodes.Root + properties: + guest_os_mtu: + required: false + type: integer + bandwidth: + required: false + type: integer + interface_name: + required: false + type: string + allowed_address_pairs: + entry_schema: + type: tosca.datatypes.nfv.ext.AddressPairs + required: false + type: list + ip_address: + required: false + type: string + bond: + required: false + type: string + proxiedVNFs: + entry_schema: + type: string + required: false + type: list + sfc_encapsulation: + required: false + type: string + floating_ip_address: + required: false + type: tosca.datatypes.nfv.ext.FloatingIP + service_ip_address: + required: false + type: string + mac_address: + required: false + type: string + proxiedVNFtype: + required: false + type: string + macbond: + required: false + type: string + vnic_type: + required: false + type: string + direction: + required: false + type: string + order: + required: false + type: integer + requirements: + - forwarder: + capability: tosca.capabilities.nfv.Forwarder + occurrences: + - 0 + - UNBOUNDED + - virtualbinding: + capability: tosca.capabilities.nfv.VirtualBindable + occurrences: + - 0 + - UNBOUNDED + - virtualLink: + capability: tosca.capabilities.nfv.VirtualBindable + occurrences: + - 0 + - UNBOUNDED + tosca.nodes.nfv.ext.zte.VDU: + capabilities: + scalable: + type: tosca.capabilities.Scalable + monitoring_parameter: + type: tosca.capabilities.nfv.Metric + nfv_compute: + type: tosca.capabilities.nfv.ext.Compute.Container.Architecture + virtualbinding: + type: tosca.capabilities.nfv.VirtualBindable + derived_from: tosca.nodes.Root + properties: + manual_scale_select_vim: + required: false + type: boolean + vdu_type: + required: false + type: string + watchdog: + required: false + type: tosca.datatypes.nfv.ext.zte.WatchDog + name: + required: false + type: string + local_affinity_antiaffinity_rule: + required: false + type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule + support_scaling: + required: false + type: boolean + storage_policy: + required: false + type: string + key_vdu: + required: false + type: boolean + location_info: + required: false + type: tosca.datatypes.nfv.ext.LocationInfo + inject_data_list: + entry_schema: + type: tosca.datatypes.nfv.ext.InjectData + required: false + type: list + requirements: + - guest_os: + capability: tosca.capabilities.nfv.ext.GuestOs + occurrences: + - 0 + - UNBOUNDED + - local_storage: + capability: tosca.capabilities.nfv.ext.LocalAttachment + occurrences: + - 0 + - UNBOUNDED + - volume_storage: + capability: tosca.capabilities.Attachment + occurrences: + - 0 + - UNBOUNDED + - dependency: + capability: tosca.capabilities.Node + occurrences: + - 0 + - UNBOUNDED + tosca.nodes.nfv.ext.zte.VL: + capabilities: + virtual_linkable: + type: tosca.capabilities.nfv.VirtualLinkable + derived_from: tosca.nodes.Root + properties: + segmentation_id: + required: false + type: string + network_name: + required: false + type: string + is_predefined: + required: false + type: boolean + mtu: + required: false + type: integer + dns_nameservers: + entry_schema: + type: string + required: false + type: list + physical_network: + required: false + type: string + dhcp_enabled: + required: false + type: boolean + network_id: + required: false + type: string + host_routes: + entry_schema: + type: tosca.datatypes.nfv.ext.HostRouteInfo + required: false + type: list + ip_version: + required: false + type: integer + vendor: + required: false + type: string + name: + required: false + type: string + start_ip: + required: false + type: string + vlan_transparent: + required: false + type: boolean + cidr: + required: false + type: string + gateway_ip: + required: false + type: string + network_type: + required: false + type: string + end_ip: + required: false + type: string + location_info: + required: false + type: tosca.datatypes.nfv.ext.LocationInfo + tosca.nodes.nfv.ext.zte.VNF: + capabilities: + forwarder: + type: tosca.capabilities.nfv.Forwarder + derived_from: tosca.nodes.Root + properties: + request_reclassification: + required: false + type: boolean + domain_type: + required: false + type: string + nsh_aware: + required: false + type: boolean + plugin_info: + required: false + type: string + adjust_vnf_capacity: + required: false + type: boolean + vnfd_version: + required: false + type: string + vmnumber_overquota_alarm: + required: false + type: boolean + custom_properties: + entry_schema: + type: string + required: false + type: map + version: + required: false + type: string + cross_dc: + required: false + type: boolean + script_info: + required: false + type: string + vendor: + required: false + type: string + is_shared: + required: false + type: boolean + name: + required: false + type: string + vnf_extend_type: + required: false + type: string + id: + required: false + type: string + vnf_type: + required: false + type: string + is_sfc_proxy: + required: false + type: boolean + requirements: + - forwarder: + capability: tosca.capabilities.nfv.Forwarder + occurrences: + - 0 + - UNBOUNDED + - virtualLink: + capability: tosca.capabilities.nfv.VirtualLinkable + occurrences: + - 0 + - UNBOUNDED + + tosca.nodes.nfv.VnfVirtualLinkDesc: + capabilities: + monitoring_parameters: + type: tosca.capabilities.nfv.Metric + virtual_linkable: + type: tosca.capabilities.nfv.VirtualLinkable + derived_from: tosca.nodes.Root + properties: + vl_flavours: + entry_schema: + type: string + type: map + description: + required: false + type: string + test_access: + entry_schema: + type: string + required: false + type: list + connectivity_type: + type: tosca.datatypes.nfv.ConnectivityType
\ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java index 4c38bd94a7..640777e993 100644 --- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java +++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/filedatastructuremodule/CandidateServiceImpl.java @@ -340,7 +340,8 @@ public class CandidateServiceImpl implements CandidateService { Optional<String> jsonFileDataStructure = orchestrationTemplateCandidateDataDao.getStructure(vspId, version); - if (jsonFileDataStructure.isPresent()) { + if (jsonFileDataStructure.isPresent() + && JsonUtil.isValidJson(jsonFileDataStructure.get())) { mdcDataDebugMessage.debugExitMessage("VSP Id", vspId); return Optional .of(JsonUtil.json2Object(jsonFileDataStructure.get(), FilesDataStructure.class)); diff --git a/openecomp-ui/resources/scss/modules/_licenseModelLimits.scss b/openecomp-ui/resources/scss/modules/_licenseModelLimits.scss index 32fd128f2e..16b6af7cf9 100644 --- a/openecomp-ui/resources/scss/modules/_licenseModelLimits.scss +++ b/openecomp-ui/resources/scss/modules/_licenseModelLimits.scss @@ -38,23 +38,30 @@ .list-editor-item-view-content { padding-left: 0; } - .svg-icon-wrapper.trashO { - margin-bottom: 0; + + .svg-icon { + margin-top: 10px; margin-right: 50px; - .svg-icon { - fill: $gray; - height: 16px; - width: 16px; - &:hover { - fill: $dark-gray; - } - } + fill: $gray; + &:hover { + fill: $dark-gray; + } } + &.selectable { &:hover { + .list-editor-item-view-field { + .text.description, .text-name { + &:after { + background-color: darken($tlv-light-gray, 4%); + } + } + + } background-color: darken($tlv-light-gray, 4%); cursor: pointer; } + } &:hover { border-color: transparent; @@ -65,20 +72,20 @@ display: flex; align-items: center; white-space: nowrap; - + &.limit-name { .text.name { @extend .body-1-semibold; color: $blue; text-transform: uppercase; - padding: 0px 10px; + margin-left : 45px; } border-right: 1px solid $light-gray; margin-right: 22px; flex: 0.4; display: flex; - justify-content: center; + justify-content: left; } &.limit-description { @@ -90,10 +97,15 @@ max-width: 300px; } + .text.description, .text.name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + &:after { + background: $tlv-light-gray; + } + } } |