diff options
50 files changed, 1552 insertions, 119 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/AssetsDataServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/AssetsDataServlet.java index 6e971f215d..b9956063d6 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/AssetsDataServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/externalapi/servlet/AssetsDataServlet.java @@ -243,8 +243,13 @@ public class AssetsDataServlet extends AbstractValidationsServlet { ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType); additionalParam.put(AuditingFieldsKeysEnum.AUDIT_DISTRIBUTION_CONSUMER_ID, instanceIdHeader); additionalParam.put(AuditingFieldsKeysEnum.AUDIT_DISTRIBUTION_RESOURCE_URL, requestURI); - additionalParam.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_TYPE, componentType.getValue()); additionalParam.put(AuditingFieldsKeysEnum.AUDIT_SERVICE_INSTANCE_ID, uuid); + if (componentType == null) { + log.debug("getMetaData: assetType parameter {} is not valid", assetType); + responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT); + return buildErrorResponse(responseFormat); + } + additionalParam.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_TYPE, componentType.getValue()); // Mandatory if (instanceIdHeader == null || instanceIdHeader.isEmpty()) { @@ -331,8 +336,15 @@ public class AssetsDataServlet extends AbstractValidationsServlet { EnumMap<AuditingFieldsKeysEnum, Object> additionalParam = new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class); additionalParam.put(AuditingFieldsKeysEnum.AUDIT_DISTRIBUTION_CONSUMER_ID, instanceIdHeader); additionalParam.put(AuditingFieldsKeysEnum.AUDIT_DISTRIBUTION_RESOURCE_URL, url); - additionalParam.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_TYPE, componentType.getValue()); additionalParam.put(AuditingFieldsKeysEnum.AUDIT_SERVICE_INSTANCE_ID, uuid); + + if (componentType == null) { + log.debug("getToscaModel: assetType parameter {} is not valid", assetType); + responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT); + return buildErrorResponse(responseFormat); + } + additionalParam.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_TYPE, componentType.getValue()); + if (instanceIdHeader == null || instanceIdHeader.isEmpty()) { log.debug("getToscaModel: Missing X-ECOMP-InstanceID header"); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java index 68adbd5ae3..22f6730eb1 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java @@ -20,11 +20,11 @@ package org.openecomp.sdc.be.tosca; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import com.google.gson.stream.JsonReader; -import fj.data.Either; +import java.io.StringReader; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; import org.openecomp.sdc.be.model.Component; @@ -41,10 +41,12 @@ import org.openecomp.sdc.be.tosca.model.ToscaProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.StringReader; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; + +import fj.data.Either; public class PropertyConvertor { private static PropertyConvertor instance; @@ -72,12 +74,8 @@ public class PropertyConvertor { // take only the properties of this resource props.stream().filter(p -> p.getOwnerId() == null || p.getOwnerId().equals(component.getUniqueId())).forEach(property -> { - ToscaProperty prop = convertProperty(dataTypes, property, false); - - if (prop != null) { - properties.put(property.getName(), prop); - } - }); + properties.put(property.getName(), convertProperty(dataTypes, property, false)); + }); if (!properties.isEmpty()) { toscaNodeType.setProperties(properties); } @@ -99,10 +97,9 @@ public class PropertyConvertor { prop.setEntry_schema(eschema); } log.trace("try to convert property {} from type {} with default value [{}]", property.getName(), property.getType(), property.getDefaultValue()); - prop.setDefaultp(convertToToscaObject(property.getType(), property.getDefaultValue(), innerType, dataTypes)); - - if (prop.getDefaultp() == null) { - return null; + Object convertedObj = convertToToscaObject(property.getType(), property.getDefaultValue(), innerType, dataTypes); + if (convertedObj != null) { + prop.setDefaultp(convertedObj); } prop.setType(property.getType()); prop.setDescription(property.getDescription()); @@ -111,6 +108,7 @@ public class PropertyConvertor { prop.setRequired(property.isRequired()); } return prop; + } public Object convertToToscaObject(String propertyType, String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { @@ -120,7 +118,6 @@ public class PropertyConvertor { if(StringUtils.isEmpty(value)){ return null; } - } try { ToscaMapValueConverter mapConverterInst = ToscaMapValueConverter.getInstance(); diff --git a/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.json b/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.json new file mode 100644 index 0000000000..143f62346d --- /dev/null +++ b/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.json @@ -0,0 +1,20 @@ +{ + "payloadName": "allottedResource.yml", + "contactId": "jh0003", + "name": "AllottedResource", + "description": "Allotted Resource base type all other allotted resources node types derive from", + "resourceIconPath": "defaulticon", + "categories": [ + { + "name": "Allotted Resource", + "subcategories": [ + { + "name": "Allotted Resource" + } + ] + } +], + "tags": [ + "AllottedResource" + ] +}
\ No newline at end of file diff --git a/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.yml b/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.yml new file mode 100644 index 0000000000..00d3bd243d --- /dev/null +++ b/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.yml @@ -0,0 +1,38 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0 +node_types: + org.openecomp.resource.vfc.AllottedResource: + derived_from: tosca.nodes.Root + description: ECOMP Allotted Resource base type all other allotted resources node types derive from + properties: + providing_service_uuid: + type: string + required: true + description: The depending service uuid in order to map the allotted resource to the specific service version + providing_service_invariant_uuid: + type: string + required: true + description: The depending service invariant uuid in order to map the allotted resource to the specific service version + providing_service_name: + type: string + required: true + description: The depending service name in order to map the allotted resource to the specific service version + role: + type: string + required: true + description: Unique label that defines the role that this allotted resource performs + min_instances: + type: integer + default: 1 + max_instances: + type: integer + default: 1 + target_network_role: + type: string + required: true + description: Target network role + requirements: + - service_dependency: + capability: org.openecomp.capabilities.AllottedResource + relationship: tosca.relationships.DependsOn + node: tosca.services.Root + diff --git a/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.zip b/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.zip Binary files differnew file mode 100644 index 0000000000..fd3f7e9d79 --- /dev/null +++ b/catalog-be/src/main/resources/import/tosca/normative-types/allottedResource/allottedResource.zip diff --git a/catalog-be/src/main/resources/scripts/import/tosca/importNormativeTypes.py b/catalog-be/src/main/resources/scripts/import/tosca/importNormativeTypes.py index d47c0b8073..1f523858b6 100644 --- a/catalog-be/src/main/resources/scripts/import/tosca/importNormativeTypes.py +++ b/catalog-be/src/main/resources/scripts/import/tosca/importNormativeTypes.py @@ -84,7 +84,7 @@ def usage(): def importNormativeTypes(beHost, bePort, adminUser, fileDir, updateversion): - normativeTypes = [ "root", "compute", "softwareComponent", "webServer", "webApplication", "DBMS", "database", "objectStorage", "blockStorage", "containerRuntime", "containerApplication", "loadBalancer", "port", "network"] + normativeTypes = [ "root", "compute", "softwareComponent", "webServer", "webApplication", "DBMS", "database", "objectStorage", "blockStorage", "containerRuntime", "containerApplication", "loadBalancer", "port", "network", "allottedResource"] #normativeTypes = [ "root" ] responseCodes = [200, 201] 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 664c5cc64a..18d2270442 100644 --- a/catalog-be/src/main/resources/scripts/import/tosca/importOnapTypes.py +++ b/catalog-be/src/main/resources/scripts/import/tosca/importOnapTypes.py @@ -26,12 +26,12 @@ def importOnapTypes(beHost, bePort, adminUser, fileDir, updateversion): "extZteCP", "extZteVDU", "extZteVL", + "NSD", + "VDU", "vduCompute", "vduCpd", "vduVirtualStorage", - "vnfVirtualLinkDesc", - "NSD", - "VDU" + "vnfVirtualLinkDesc" ] responseCodes = [200, 201] diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/PropertyConvertorTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/PropertyConvertorTest.java index a987e0243b..c77c0f10f3 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/PropertyConvertorTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/PropertyConvertorTest.java @@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -37,7 +38,9 @@ public class PropertyConvertorTest { @Test public void convertPropertyWhenValueAndDefaultNull() { - assertNull(PropertyConvertor.getInstance().convertProperty(dataTypes, property, false)); + ToscaProperty prop = PropertyConvertor.getInstance().convertProperty(dataTypes, property, false); + assertNotNull(prop); + assertNull(prop.getDefaultp()); } @Test @@ -63,7 +66,15 @@ public class PropertyConvertorTest { resource.setProperties(properties); Either<ToscaNodeType, ToscaError> result = PropertyConvertor.getInstance().convertProperties(resource, new ToscaNodeType(), dataTypes); assertTrue(result.isLeft()); - assertEquals(1, result.left().value().getProperties().size()); + assertEquals(2, result.left().value().getProperties().size()); + int cnt = 0; + for (Iterator<ToscaProperty> it = result.left().value().getProperties().values().iterator(); it.hasNext(); ) { + ToscaProperty prop = it.next(); + if (prop.getDefaultp() == null) { + cnt++; + } + } + assertEquals(1, cnt); } @Test @@ -82,6 +93,10 @@ public class PropertyConvertorTest { Either<ToscaNodeType, ToscaError> result = PropertyConvertor.getInstance().convertProperties(resource, new ToscaNodeType(), dataTypes); assertTrue(result.isLeft()); assertEquals(2, result.left().value().getProperties().size()); + for (Iterator<ToscaProperty> it = result.left().value().getProperties().values().iterator(); it.hasNext(); ) { + ToscaProperty prop = it.next(); + assertNotNull(prop.getDefaultp()); + } } @Test @@ -97,6 +112,10 @@ public class PropertyConvertorTest { resource.setProperties(properties); Either<ToscaNodeType, ToscaError> result = PropertyConvertor.getInstance().convertProperties(resource, new ToscaNodeType(), dataTypes); assertTrue(result.isLeft()); - assertNull(result.left().value().getProperties()); - } -}
\ No newline at end of file + assertEquals(2, result.left().value().getProperties().size()); + for (Iterator<ToscaProperty> it = result.left().value().getProperties().values().iterator(); it.hasNext(); ) { + ToscaProperty prop = it.next(); + assertNull(prop.getDefaultp()); + } + } +} diff --git a/common/openecomp-tosca-datatype/src/main/resources/globalTypes/openecomp-heat/data.yml b/common/openecomp-tosca-datatype/src/main/resources/globalTypes/openecomp-heat/data.yml index f320a9879b..c9dda19d5c 100644 --- a/common/openecomp-tosca-datatype/src/main/resources/globalTypes/openecomp-heat/data.yml +++ b/common/openecomp-tosca-datatype/src/main/resources/globalTypes/openecomp-heat/data.yml @@ -562,6 +562,12 @@ data_types: type: string status: SUPPORTED required: false + subnet_id: + type: string + description: Subnet in which to allocate the IP address for this port + required: false + status: SUPPORTED + org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties: derived_from: tosca.datatypes.Root diff --git a/docs/configuration.rst b/docs/configuration.rst index 085f9c667d..281f07d1a0 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -1,27 +1,1179 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 +============= Configuration ============= -.. note:: - * This section is used to describe the options a software component offers for configuration. +.. contents:: + :depth: 3 +.. + +Global Configuration +==================== + +environment.json +---------------- + +:: + + { + # Environment name + "name": "xxx", + + # Environment description + "description": "OpenSource-xxx", + + # Chef properties + "cookbook_versions": { + "Deploy-SDandC": "= 1.0.0" + }, + "json_class": "Chef::Environment", + "chef_type": "environment", + + "default_attributes": { + + # IPs used for docker configuration + "CS_VIP": "yyy", + "BE_VIP": "yyy", + "FE_VIP": "yyy", + "ES_VIP": "yyy", + "interfaces": { + "application": "eth0", + "private": "eth1" + }, + + # Configuration parameters used in portal properties + "ECompP": { + "ecomp_rest_url": "http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/auxapi", + "ueb_url_list": "10.0.11.1,10.0.11.1", + "app_secret": "XftIATw9Jr3VzAcPqt3NnJOu", + "app_key": "x9UfO7JsDn8BESVX", + "inbox_name": "ECOMP-PORTAL-INBOX", + "ecomp_redirect_url": "http://portal.api.simpledemo.openecomp.org:8989/ECOMPPORTAL/login.htm", + "app_topic_name": "ECOMP-PORTAL-OUTBOX-SDC1", + "decryption_key": "AGLDdG4D04BKm2IxIWEr8o==" + }, + + # Configuration parameters used by SDC to work with Dmaap + "UEB": { + "PublicKey": "iPIxkpAMI8qTcQj8", + "SecretKey": "Ehq3WyT4bkif4zwgEbvshGal", + "fqdn": ["10.0.11.1", "10.0.11.1"] + }, + + # IPs used for docker configuration + "Nodes": { + "CS": "yyy", + "BE": "yyy", + "FE": "yyy", + "ES": "yyy" + } + }, + "override_attributes": { + + # FE and BE listening ports + "FE": { + "http_port": "8181", + "https_port": "9443" + }, + "BE": { + "http_port": "8080", + "https_port": "8443" + }, + + # Elasticsearch configuration + "elasticsearch": { + "cluster_name": "SDC-ES-", + "ES_path_home": "/usr/share/elasticsearch", + "ES_path_data": "/usr/share/elasticsearch/data", + "num_of_replicas": "0", + "num_of_shards": "1" + }, + + # Cassandra configuration + "cassandra": { + "concurrent_reads": "32", + "num_tokens": "256", + "data_dir": "/var/lib/cassandra/data", + "hinted_handoff_enabled": "true", + "cassandra_user": "asdc_user", + "cassandra_password": "Aa1234%^!", + "concurrent_writes": "32", + "cluster_name": "SDC-CS-", + "multithreaded_compaction": "false", + "cache_dir": "/var/lib/cassandra/saved_caches", + "log_file": "/var/lib/cassandra/log/system.log", + "phi_convict_threshold": "8", + "commitlog_dir": "/var/lib/cassandra/commitlog" + } + } + } + +Backend Configurations +====================== + +BE-configuration.yaml +--------------------- + +:: + + # Request headers for identification of the user that made the request + identificationHeaderFields: + - HTTP_IV_USER + - HTTP_CSP_FIRSTNAME + - HTTP_CSP_LASTNAME + - HTTP_IV_REMOTE_ADDRESS + - HTTP_CSP_WSTYPE + + # Catalog backend hostname + beFqdn: <%= @host_ip %> + + # Catalog backend http port + beHttpPort: <%= @catalog_port %> + + # Catalog backend http context + beContext: /sdc/rest/config/get + + # Catalog backend protocol + beProtocol: http + + # Catalog backend ssl port + beSslPort: <%= @ssl_port %> + + # Catalog backend configuration vesrion + version: 1.0 + + # Catalog backend configuration release date + released: 2012-11-30 + + # Catalog tosca current conformance version + toscaConformanceLevel: 4.0 + + # Catalog minimum tosca conformance version + minToscaConformanceLevel: 3.0 + + # Titan configuration file location + titanCfgFile: /var/lib/jetty/config/catalog-be/titan.properties + + # Does titan holds the persistency data in memory + titanInMemoryGraph: false + + # The timeout for titan to lock on an object in a transaction + titanLockTimeout: 1800 + + # The interval to try and reconnect to titan DB when it is down during SDC startup + titanReconnectIntervalInSeconds: 3 + + # The read timeout towards Titan DB when health check is invoked + titanHealthCheckReadTimeout: 1 + + # The interval to try and reconnect to Elasticsearch when it is down during SDC startup + esReconnectIntervalInSeconds: 3 + + # The interval to try and reconnect to UEB health check when it is down during SDC startup + uebHealthCheckReconnectIntervalInSeconds: 15 + + # The read timeout towards UEB when helath check is invoked + uebHealthCheckReadTimeout: 4 + + # Protocols being used in SDC + protocols: + - http + - https + + # Default imports + # Under each import there is the file the data will be imported from + defaultImports: + - nodes: + file: nodes.yml + - datatypes: + file: data.yml + - capabilities: + file: capabilities.yml + - relationships: + file: relationships.yml + - groups: + file: groups.yml + - policies: + file: policies.yml + + # Users + # Deprecated. Will be removed in future releases + users: + tom: passwd + bob: passwd + + cassandraConfig: + # Cassandra hostname + cassandraHosts: <%= @cassandra_ip %> + + # Cassandra local data center name + localDataCenter: <%= @DC_NAME %> + + # The read timeout towards Cassandra when health check is invoked + reconnectTimeout : 30000 + + # Should an authentication be used when accessing Cassandra + authenticate: true + + # Username for accessing Cassandra + username: asdc_user + + # Password for accessing Cassnadra + password: {{cassandra_password}} + + # Does an ssl should be used + ssl: false + + # Location of .truststore file + truststorePath : /config/.truststore + + # The .truststore file password + truststorePassword : Aa123456 + + # Keyspaces configuration for Cassandra + keySpaces: + - { name: dox, replicationStrategy: NetworkTopologyStrategy, replicationInfo: ['<%= @DC_NAME %>','<%= @rep_factor %>']} + - { name: sdcaudit, replicationStrategy: NetworkTopologyStrategy, replicationInfo: ['<%= @DC_NAME %>','<%= @rep_factor %>']} + - { name: sdcartifact, replicationStrategy: NetworkTopologyStrategy, replicationInfo: ['<%= @DC_NAME %>','<%= @rep_factor %>']} + - { name: sdccomponent, replicationStrategy: NetworkTopologyStrategy, replicationInfo: ['<%= @DC_NAME %>','<%= @rep_factor %>']} + - { name: sdcrepository, replicationStrategy: NetworkTopologyStrategy, replicationInfo: ['<%= @DC_NAME %>','<%= @rep_factor %>']} + + # Application-specific settings of ES + elasticSearch: + + # Mapping of index prefix to time-based frame. For example, if below is configured: + # + # - indexPrefix: auditingevents + # creationPeriod: minute + # + # then ES object of type which is mapped to "auditingevents-*" template, and created on 2015-12-23 13:24:54, will enter "auditingevents-2015-12-23-13-24" index. + # Another object created on 2015-12-23 13:25:54, will enter "auditingevents-2015-12-23-13-25" index. + # If creationPeriod: month, both of the above will enter "auditingevents-2015-12" index. + # + # PLEASE NOTE: the timestamps are created in UTC/GMT timezone! This is needed so that timestamps will be correctly presented in Kibana. + # + # Legal values for creationPeriod - year, month, day, hour, minute, none (meaning no time-based behaviour). + # + # If no creationPeriod is configured for indexPrefix, default behavour is creationPeriod: month. + indicesTimeFrequency: + - indexPrefix: auditingevents + creationPeriod: month + - indexPrefix: monitoring_events + creationPeriod: month + + # Artifact types placeholder + artifactTypes: + - CHEF + - PUPPET + - SHELL + - YANG + - YANG_XML + - HEAT + - BPEL + - DG_XML + - MURANO_PKG + - WORKFLOW + - NETWORK_CALL_FLOW + - TOSCA_TEMPLATE + - TOSCA_CSAR + - AAI_SERVICE_MODEL + - AAI_VF_MODEL + - AAI_VF_MODULE_MODEL + - AAI_VF_INSTANCE_MODEL + - OTHER + - SNMP_POLL + - SNMP_TRAP + - GUIDE + - PLAN + + # License types placeholder + licenseTypes: + - User + - Installation + - CPU + + # Resource types placeholder + resourceTypes: &allResourceTypes + - VFC + - CP + - VL + - VF + - VFCMT + - Abstract + - CVFC + + #Deployment resource artifacts placeHolder + deploymentResourceArtifacts: + + # Deployment resource instance artifacts placeholders + # For each artifact the following properties exists: + # + # displayName - The display name of the artifact + # type - The type of the artifact + # description - The description of the artifact + # fileExtension - The file extension of the artifact file for uploading + deploymentResourceInstanceArtifacts: + heatEnv: + displayName: "HEAT ENV" + type: HEAT_ENV + description: "Auto-generated HEAT Environment deployment artifact" + fileExtension: "env" + VfHeatEnv: + displayName: "VF HEAT ENV" + type: HEAT_ENV + description: "VF Auto-generated HEAT Environment deployment artifact" + fileExtension: "env" + + # Tosca artifacts placeholders + # For each artifact there is a template and a scar. + # For each one the following properties exists: + # + # artifactName - The suffix of the artifact file + # displayName - The display name of the artifact + # type - The type of the artifact + # description - The description of the artifact + toscaArtifacts: + assetToscaTemplate: + artifactName: -template.yml + displayName: Tosca Template + type: TOSCA_TEMPLATE + description: TOSCA representation of the asset + assetToscaCsar: + artifactName: -csar.csar + displayName: Tosca Model + type: TOSCA_CSAR + description: TOSCA definition package of the asset + + # Resource category to exclude + excludeResourceCategory: + - Generic + + # Resource type to exclude + excludeResourceType: + - PNF + + # Informational resource artifacts placeHolder + # For each artifact the following properties exists: + # + # displayName - The display name of the artifact + # type - The type of the artifact + informationalResourceArtifacts: + features: + displayName: Features + type: OTHER + capacity: + displayName: Capacity + type: OTHER + vendorTestResult: + displayName: Vendor Test Result + type: OTHER + testScripts: + displayName: Test Scripts + type: OTHER + CloudQuestionnaire: + displayName: Cloud Questionnaire (completed) + type: OTHER + HEATTemplateFromVendor: + displayName: HEAT Template from Vendor + type: HEAT + resourceSecurityTemplate: + displayName: Resource Security Template + type: OTHER + + # Service category to exclude + excludeServiceCategory: + + # Informational service artifacts placeHolder + # For each artifact the following properties exists: + # + # displayName - The display name of the artifact + # type - The type of the artifact + informationalServiceArtifacts: + serviceArtifactPlan: + displayName: Service Artifact Plan + type: OTHER + summaryOfImpactsToECOMPElements: + displayName: Summary of impacts to ECOMP elements,OSSs, BSSs + type: OTHER + controlLoopFunctions: + displayName: Control Loop Functions + type: OTHER + dimensioningInfo: + displayName: Dimensioning Info + type: OTHER + affinityRules: + displayName: Affinity Rules + type: OTHER + operationalPolicies: + displayName: Operational Policies + type: OTHER + serviceSpecificPolicies: + displayName: Service-specific Policies + type: OTHER + engineeringRules: + displayName: Engineering Rules (ERD) + type: OTHER + distributionInstructions: + displayName: Distribution Instructions + type: OTHER + certificationTestResults: + displayName: TD Certification Test Results + type: OTHER + deploymentVotingRecord: + displayName: Deployment Voting Record + type: OTHER + serviceQuestionnaire: + displayName: Service Questionnaire + type: OTHER + serviceSecurityTemplate: + displayName: Service Security Template + type: OTHER + + # Service api artifacts placeHolder + # For each artifact the following properties exists: + # + # displayName - The display name of the artifact + # type - The type of the artifact + serviceApiArtifacts: + configuration: + displayName: Configuration + type: OTHER + instantiation: + displayName: Instantiation + type: OTHER + monitoring: + displayName: Monitoring + type: OTHER + reporting: + displayName: Reporting + type: OTHER + logging: + displayName: Logging + type: OTHER + testing: + displayName: Testing + type: OTHER + + # The maximum number of keys permited for additional information on service + additionalInformationMaxNumberOfKeys: 50 + + # Collect process statistics + systemMonitoring: + + # Should monitoring be enabled + enabled: false + + # In case of going through the FE server proxy the information to the BE + isProxy: false + + # What is the interval of the statistics collection + probeIntervalInSeconds: 15 + + defaultHeatArtifactTimeoutMinutes: 60 + + # Service deployment artifacts placeHolder + # For each artifact the following properties exists: + # + # acceptedTypes - File types that can be uploaded as each artifact + serviceDeploymentArtifacts: + YANG_XML: + acceptedTypes: + - xml + VNF_CATALOG: + acceptedTypes: + - xml + MODEL_INVENTORY_PROFILE: + acceptedTypes: + - xml + MODEL_QUERY_SPEC: + acceptedTypes: + - xml + UCPE_LAYER_2_CONFIGURATION: + acceptedTypes: + - xml + + #AAI Artifacts + AAI_SERVICE_MODEL: + acceptedTypes: + - xml + AAI_VF_MODULE_MODEL: + acceptedTypes: + - xml + AAI_VF_INSTANCE_MODEL: + acceptedTypes: + - xml + OTHER: + acceptedTypes: + + #PLAN + PLAN: + acceptedTypes: + - xml + + # Resource deployment artifacts placeHolder + # For each artifact the following properties exists: + # + # acceptedTypes - File types that can be uploaded as each artifact + # validForRespurceTypes - Resource types that support each artifact. + # If left empty it means all resource types are valid + resourceDeploymentArtifacts: + HEAT: + acceptedTypes: + - yaml + - yml + validForResourceTypes: *allResourceTypes + HEAT_VOL: + acceptedTypes: + - yaml + - yml + validForResourceTypes: *allResourceTypes + HEAT_NET: + acceptedTypes: + - yaml + - yml + validForResourceTypes: *allResourceTypes + HEAT_NESTED: + acceptedTypes: + - yaml + - yml + validForResourceTypes: *allResourceTypes + HEAT_ARTIFACT: + acceptedTypes: + validForResourceTypes: *allResourceTypes + YANG_XML: + acceptedTypes: + - xml + validForResourceTypes: *allResourceTypes + VNF_CATALOG: + acceptedTypes: + - xml + validForResourceTypes: *allResourceTypes + VF_LICENSE: + acceptedTypes: + - xml + validForResourceTypes: *allResourceTypes + VENDOR_LICENSE: + acceptedTypes: + - xml + validForResourceTypes: *allResourceTypes + MODEL_INVENTORY_PROFILE: + acceptedTypes: + - xml + validForResourceTypes: *allResourceTypes + MODEL_QUERY_SPEC: + acceptedTypes: + - xml + validForResourceTypes: *allResourceTypes + LIFECYCLE_OPERATIONS: + acceptedTypes: + - yaml + - yml + validForResourceTypes: + - VF + - VFC + VES_EVENTS: + acceptedTypes: + - yaml + - yml + validForResourceTypes: *allResourceTypes + PERFORMANCE_COUNTER: + acceptedTypes: + - csv + validForResourceTypes: *allResourceTypes + APPC_CONFIG: + acceptedTypes: + validForResourceTypes: + - VF + DCAE_TOSCA: + acceptedTypes: + - yml + - yaml + validForResourceTypes: + - VF + - VFCMT + DCAE_JSON: + acceptedTypes: + - json + validForResourceTypes: + - VF + - VFCMT + DCAE_POLICY: + acceptedTypes: + - emf + validForResourceTypes: + - VF + - VFCMT + DCAE_DOC: + acceptedTypes: + validForResourceTypes: + - VF + - VFCMT + DCAE_EVENT: + acceptedTypes: + validForResourceTypes: + - VF + - VFCMT + AAI_VF_MODEL: + acceptedTypes: + - xml + validForResourceTypes: + - VF + AAI_VF_MODULE_MODEL: + acceptedTypes: + - xml + validForResourceTypes: + - VF + OTHER: + acceptedTypes: + validForResourceTypes: *allResourceTypes + SNMP_POLL: + acceptedTypes: + validForResourceTypes: *allResourceTypes + SNMP_TRAP: + acceptedTypes: + validForResourceTypes: *allResourceTypes + + #PLAN + PLAN: + acceptedTypes: + - xml + validForResourceTypes: + - VF + - VFC + + # Resource instance deployment artifacts placeHolder + # For each artifact the following properties exists: + # + # acceptedTypes - File types that can be uploaded as each artifact + # validForRespurceTypes - Resource types that support each artifact. + # If left empty it means all resource types are valid + resourceInstanceDeploymentArtifacts: + HEAT_ENV: + acceptedTypes: + - env + VF_MODULES_METADATA: + acceptedTypes: + - json + VES_EVENTS: + acceptedTypes: + - yaml + - yml + PERFORMANCE_COUNTER: + acceptedTypes: + - csv + DCAE_INVENTORY_TOSCA: + acceptedTypes: + - yml + - yaml + DCAE_INVENTORY_JSON: + acceptedTypes: + - json + DCAE_INVENTORY_POLICY: + acceptedTypes: + - emf + DCAE_INVENTORY_DOC: + acceptedTypes: + DCAE_INVENTORY_BLUEPRINT: + acceptedTypes: + DCAE_INVENTORY_EVENT: + acceptedTypes: + SNMP_POLL: + acceptedTypes: + validForResourceTypes: *allResourceTypes + SNMP_TRAP: + acceptedTypes: + validForResourceTypes: *allResourceTypes + + #PLAN + PLAN: + acceptedTypes: + - xml + + # Resource informational artifacts placeHolder + # For each artifact the following properties exists: + # + # acceptedTypes - File types that can be uploaded as each artifact + # validForRespurceTypes - Resource types that support each artifact. + # If left empty it means all resource types are valid + resourceInformationalArtifacts: + CHEF: + acceptedTypes: + validForResourceTypes: *allResourceTypes + PUPPET: + acceptedTypes: + validForResourceTypes: *allResourceTypes + SHELL: + acceptedTypes: + validForResourceTypes: *allResourceTypes + YANG: + acceptedTypes: + validForResourceTypes: *allResourceTypes + YANG_XML: + acceptedTypes: + validForResourceTypes: *allResourceTypes + HEAT: + acceptedTypes: + validForResourceTypes: *allResourceTypes + BPEL: + acceptedTypes: + validForResourceTypes: *allResourceTypes + DG_XML: + acceptedTypes: + validForResourceTypes: *allResourceTypes + MURANO_PKG: + acceptedTypes: + validForResourceTypes: *allResourceTypes + OTHER: + acceptedTypes: + validForResourceTypes: + - VFC + - CVFC + - CP + - VL + - VF + - VFCMT + - Abstract + - PNF + SNMP_POLL: + acceptedTypes: + validForResourceTypes: *allResourceTypes + SNMP_TRAP: + acceptedTypes: + validForResourceTypes: *allResourceTypes + GUIDE: + acceptedTypes: + validForResourceTypes: + - VF + - VFC + - CVFC + + # Resource informational deployment artifact placeholder + resourceInformationalDeployedArtifacts: + + # Requirements needed to be fulfilled before certificattion + requirementsToFulfillBeforeCert: + + # Capabillities needed to be fulfilled before certificattion + capabilitiesToConsumeBeforeCert: + + # Urls that should not be logged + unLoggedUrls: + - /sdc2/rest/healthCheck + + # When component is being set as deleted those are the clean configurations + cleanComponentsConfiguration: + + # The interval to check for deleted components to clean + cleanIntervalInMinutes: 1440 + + # The components types to delete + componentsToClean: + - Resource + - Service + + # Deprecated. Will be removed in future releases + artifactsIndex: resources + + # Used to add header and footer to heatENV files generated by SDC + heatEnvArtifactHeader: "" + heatEnvArtifactFooter: "" + + onboarding: + + # Onboarding protocol + protocol: http + + # Onboarding backend hostname + host: <%= @host_ip %> + + # Onboarding backend http port + port: <%= @catalog_port %> + + # The url that being used when downloading CSARs + downloadCsarUri: "/onboarding-api/v1.0/vendor-software-products/packages" + + # Url for onboarding health check + healthCheckUri: "/onboarding-api/v1.0/healthcheck" + + + #GSS IDNS + # Switchover configuration is used for geo redundency to provide automatic failovers + switchoverDetector: + gBeFqdn: + gFeFqdn: + beVip: 1.2.3.4 + feVip: 1.2.3.4 + beResolveAttempts: 3 + feResolveAttempts: 3 + enabled: false + interval: 60 + changePriorityUser: ecompasdc + changePriorityPassword: ecompasdc123 + publishNetworkUrl: + publishNetworkBody: '{"note":"comment"}' + groups: + beSet: { changePriorityUrl: "", changePriorityBody: '{"name":"","uri":"","no_ad_redirection":false,"v4groups":{"failover_groups":["","","failover_policy":["FAILALL"]},"comment":"","intended_app_proto":"DNS"}'} + feSet: { changePriorityUrl: "", changePriorityBody: '{"name":"","uri":"","no_ad_redirection":false,"v4groups":{"failover_groups":["",""],"failover_policy":["FAILALL"]},"comment":"","intended_app_proto":"DNS"}'} + + # Cache for datatypes. Improving run times for data type search + applicationL1Cache: + datatypes: + enabled: true + firstRunDelay: 10 + pollIntervalInSec: 60 + + # Deprecated. Will be removed in future releases + applicationL2Cache: + enabled: false + catalogL1Cache: + enabled: false + resourcesSizeInCache: 300 + servicesSizeInCache: 200 + productsSizeInCache: 100 + queue: + syncIntervalInSecondes: 43200 + waitOnShutDownInMinutes: 10 + numberOfCacheWorkers: 4 + + # Validators for tosca properties + toscaValidators: + stringMaxLength: 2500 + + # Should audit be disabled + disableAudit: false + + # VF module validations properties + vfModuleProperties: + min_vf_module_instances: + forBaseModule: 1 + forNonBaseModule: 0 + max_vf_module_instances: + forBaseModule: 1 + forNonBaseModule: + initial_count: + forBaseModule: 1 + forNonBaseModule: 0 + vf_module_type: + forBaseModule: Base + forNonBaseModule: Expansion + + # For each generic node type defining it's coresponding class + genericAssetNodeTypes: + VFC: org.openecomp.resource.abstract.nodes.VFC + CVFC: org.openecomp.resource.abstract.nodes.VFC + VF : org.openecomp.resource.abstract.nodes.VF + PNF: org.openecomp.resource.abstract.nodes.PNF + Service: org.openecomp.resource.abstract.nodes.service + + +BE-distribution-engine-configuration.yaml +----------------------------------------- + +:: + + # UEB servers list + uebServers: + <% node['UEB']['fqdn'].each do |conn| -%> + - <%= conn %> + <% end -%> + + # UEB public key + uebPublicKey: <%= node['UEB']['PublicKey'] %> + + # UEB secret key + uebSecretKey: <%= node['UEB']['SecretKey'] %> + + # Topic name for receiving distribution notification + distributionNotifTopicName: SDC-DISTR-NOTIF-TOPIC + + # Topic name for distribution status + distributionStatusTopicName: SDC-DISTR-STATUS-TOPIC + + # Distibution initializtion retry interval time + initRetryIntervalSec: 5 + + # Distribution initializtion maximum interval time + initMaxIntervalSec: 60 + + # Deprecated. Will be removed in future releases + distribNotifServiceArtifactTypes: + info: + - MURANO-PKG + + # Deprecated. Will be removed in future releases + distribNotifResourceArtifactTypes: + lifecycle: + - HEAT + - DG-XML + + # Distribution environments + environments: + - <%= node.chef_environment %> + + distributionStatusTopic: + + # Distribution status polling interval + pollingIntervalSec: 60 + + # Distribution status fetch time + fetchTimeSec: 15 + + # Distribution status consumer group + consumerGroup: sdc-<%= node.chef_environment %> + + # Distribution status consumer id + consumerId: sdc-<%= node.chef_environment %>1 + + distributionNotificationTopic: + + # Minimum pool size for distribution notifications + minThreadPoolSize: 0 + + # Maximum pool size for distribution notifications + maxThreadPoolSize: 10 + + # Maximum waiting time after sending a notification + maxWaitingAfterSendingSeconds: 5 + + # Deprecated. Will be removed in future releases + createTopic: + partitionCount: 1 + replicationCount: 1 + + # STarting the distribution engine + startDistributionEngine: true + + #This is false by default, since ONAP Dmaap currently doesn't support https + # Does https should be used with Dmaap + useHttpsWithDmaap: false + + +BE-onboarding-configuration.yaml +-------------------------------- + +:: + + notifications: + + # Backend onboarding notifications polling interval in milliseconds + pollingIntervalMsec: 2000 + + # Backend onboarding notifications selection size + selectionSize: 100 + + # Backend onboarding norifications backend hostname + beHost: <%= @catalog_ip %> + + # Backend onboarding notifications backend http port + beHttpPort: <%= @catalog_port %> + + +BE-titan.properties +------------------- + +:: + + # Titan storage backend + storage.backend=cassandra + + # Titan storage hostname + storage.hostname=<%= @CASSANDRA_IP %> + + # Titan storage port] + storage.port=9160 + + # Titan storage username + storage.username=<%= @CASSANDRA_USR %> + + # Titan storage password + storage.password=<%= @CASSANDRA_PWD %> + + # Titan storage connection timeout + storage.connection-timeout=10000 + + # Titan cassandra keyspace name + storage.cassandra.keyspace=sdctitan + + # Is Titan cassandra ssl is enabled + storage.cassandra.ssl.enabled=false + + # Titan cassandra ssl truststore file location + storage.cassandra.ssl.truststore.location=/var/lib/jetty/config/.truststore + + # Titan cassandra ssl truststore file password + storage.cassandra.ssl.truststore.password=Aa123456 + + # Does titan should use cache + cache.db-cache = false + + # How long in milliseconds should the cache keep entries before flushing them + cache.db-cache-clean-wait = 20 + + # Default experation time in milliseconds for entries in the cache + cache.db-cache-time = 180000 + + # Size of titan database cache + cache.db-cache-size = 0.5 + + # Titan cassandra read consistency level + storage.cassandra.read-consistency-level=LOCAL_QUORUM + + # Titan cassandra write consistency level + storage.cassandra.write-consistency-level=LOCAL_QUORUM + + # Titan cassandra replication strategy class name + storage.cassandra.replication-strategy-class=org.apache.cassandra.locator.NetworkTopologyStrategy + + # Titan cassandra replication startegy options + storage.cassandra.replication-strategy-options=<%= @DC_NAME %>,<%= @rep_factor %> + + # Titan cassandra local data center name + storage.cassandra.astyanax.local-datacenter=<%= @DC_NAME %> + + # Number of times the system attempts to acquire a lock before giving up and throwing an exception + storage.lock.retries=5 + + # Number of milliseconds the system waits for a lock application to be acknowledged by the storage backend + storage.lock.wait-time=500 + - * Configuration is typically: provided for platform-component and sdk projects; - and referenced in developer and user guides. - - * This note must be removed after content has been added. +Frontend Configuration +====================== +FE-configuration.yaml +--------------------- +:: -Example ... + # Catalog frontend hostname + feFqdn: <%= @fe_host_ip %> + + # Catalog backend hostname + beHost: <%= @be_host_ip %> + + # Catalog backend http port + beHttpPort: <%= @catalog_port %> + + # Catalog backend http context + beContext: /sdc2/rest/v1/catalog/upload/resources + + # Catalog backend protocol + beProtocol: http + + # Catalog backend ssl port + beSslPort: <%= @ssl_port %> + + # Threadpool size for handling requests + threadpoolSize: 50 + + # Request processing timeout (seconds) + requestTimeout: 10 + + # Health check timeout in milliseconds + healthCheckSocketTimeoutInMs: 5000 + + # Health check inteval in seconds + healthCheckIntervalInSeconds: 5 + + onboarding: + + # Onboarding protocol + protocol: http + + # Onboarding frontend hostname + host: <%= @fe_host_ip %> + + # Onboarding frontend port + port: 8181 + + # Onboarding frontend health check url + healthCheckUri: "/onboarding/v1.0/healthcheck" + + # Request headers for identification of the user that made the request + identificationHeaderFields: + - + - &HTTP_IV_USER HTTP_IV_USER + - &iv-user iv-user + - + - &USER_ID USER_ID + - &user-id user-id + - + - &HTTP_CSP_ATTUID HTTP_CSP_ATTUID + - &csp-attuid csp-attuid + - + - &HTTP_CSP_WSTYPE HTTP_CSP_WSTYPE + - &csp-wstype csp-wstype + + # Optional request headers + optionalHeaderFields: + - + - &HTTP_CSP_FIRSTNAME HTTP_CSP_FIRSTNAME + - &csp-firstname csp-firstname + - + - &HTTP_CSP_LASTNAME HTTP_CSP_LASTNAME + - &csp-lastname csp-lastname + - + - &HTTP_IV_REMOTE_ADDRESS HTTP_IV_REMOTE_ADDRESS + - &iv-remote-address iv-remote-address + - + - &HTTP_CSP_EMAIL HTTP_CSP_EMAIL + - &csp-email csp-email + + # Frontend configuration version + version: 1.0 + + # Frontend configuration release date + released: 2012-11-30 + + # Connection parameters + connection: + url: jdbc:mysql://localhost:3306/db + poolSize: 17 + + # Protocols being used in SDC + protocols: + - http + - https + + # Collect process statistics + systemMonitoring: + + # Should monitoring be enabled + enabled: false + + # In case of going through the FE server proxy the information to the BE + isProxy: true + + # What is the interval of the statistics collection + probeIntervalInSeconds: 15 + + # Kibana hostname + kibanaHost: localhost + + # Kibana http port + kibanaPort: 5601 + + # Kibana usage protocol + kibanaProtocol: http -You can provide the following in ``basic.conf`` -``host=ADDRESS`` - The address of the host +FE-onboarding-configuration.yaml +-------------------------------- -``port=PORT`` - The port used for signaling +:: - Optional. Default: ``8080`` + notifications: + + # Frontend onboarding notifications polling interval in milliseconds + pollingIntervalMsec: 2000 + + # Frontend onboarding notifications selection size + selectionSize: 100 + + # Frontend onboarding norifications backend hostname + beHost: <%= @catalog_ip %> + + # Frontend onboarding notifications backend http port + beHttpPort: <%= @catalog_port %> diff --git a/docs/consumedapis.rst b/docs/consumedapis.rst index 099442d3a4..2379d75f70 100644 --- a/docs/consumedapis.rst +++ b/docs/consumedapis.rst @@ -1,7 +1,8 @@ .. This work is licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 +============= Consumed APIs ============= -SDC Project does not consume any APIs form other sources therfore this section is currently empty +SDC Project does not consume any APIs from other sources therefore this section is currently empty diff --git a/docs/logging.rst b/docs/logging.rst index a6cca5b707..9e82e15f84 100644 --- a/docs/logging.rst +++ b/docs/logging.rst @@ -5,16 +5,6 @@ Logging ======= -.. note:: - * This section is used to describe the informational or diagnostic messages emitted from - a software component and the methods or collecting them. - - * This section is typically: provided for a platform-component and sdk; and - referenced in developer and user guides - - * This note must be removed after content has been added. - - Where to Access Information --------------------------- diff --git a/docs/offeredapis.rst b/docs/offeredapis.rst index 349e7bad4f..e9decd1e5c 100644 --- a/docs/offeredapis.rst +++ b/docs/offeredapis.rst @@ -17,7 +17,7 @@ Overview Version information ------------------- -*Version* : 1.0.0 +*Version* : 1.1.0 URI scheme ---------- diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/TranslationContext.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/TranslationContext.java index a0034a3828..ddbcaf72b9 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/TranslationContext.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/TranslationContext.java @@ -25,14 +25,12 @@ import org.openecomp.config.api.ConfigurationManager; import org.openecomp.core.utilities.CommonMethods; import org.openecomp.core.utilities.file.FileContentHandler; import org.openecomp.sdc.common.errors.CoreException; -import org.openecomp.sdc.common.errors.ErrorCode; import org.openecomp.sdc.common.utils.SdcCommon; import org.openecomp.sdc.datatypes.configuration.ImplementationConfiguration; import org.openecomp.sdc.heat.datatypes.manifest.FileData; import org.openecomp.sdc.heat.datatypes.manifest.ManifestFile; import org.openecomp.sdc.heat.datatypes.model.Resource; import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate; -import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment; import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate; import org.openecomp.sdc.tosca.services.ToscaUtil; import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslatedHeatResource; @@ -42,6 +40,7 @@ import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolida import org.openecomp.sdc.translator.services.heattotosca.ConfigConstants; import org.openecomp.sdc.translator.services.heattotosca.Constants; import org.openecomp.sdc.translator.services.heattotosca.NameExtractor; +import org.openecomp.sdc.translator.services.heattotosca.errors.DuplicateResourceIdsInDifferentFilesErrorBuilder; import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator; import java.io.InputStream; @@ -385,10 +384,7 @@ public class TranslationContext { } if(nodeAbstractNodeTemplateIdMap.containsKey(originalNodeTemplateId)){ - throw new CoreException((new ErrorCode.ErrorCodeBuilder()) - .withMessage("Resource with id " - + originalNodeTemplateId + " occures more than once in different addOn files") - .build()); + throw new CoreException(new DuplicateResourceIdsInDifferentFilesErrorBuilder(originalNodeTemplateId).build()); } nodeAbstractNodeTemplateIdMap.put(originalNodeTemplateId, abstractNodeTemplateId); this.getUnifiedSubstitutionData().get(serviceTemplateFileName).setNodesRelatedAbstractNode( diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationDataUtil.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationDataUtil.java index b86038d175..5d1bb1c61e 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationDataUtil.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationDataUtil.java @@ -31,6 +31,7 @@ import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolida import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData; import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.RequirementAssignmentData; import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData; +import org.openecomp.sdc.translator.services.heattotosca.errors.DuplicateResourceIdsInDifferentFilesErrorBuilder; import java.util.ArrayList; import java.util.Collection; @@ -154,10 +155,7 @@ public class ConsolidationDataUtil { if(isNestedResourceIdOccuresInDifferentNestedFiles(context, nestedHeatFileName, nestedNodeTemplateId)){ - throw new CoreException((new ErrorCode.ErrorCodeBuilder()) - .withMessage("Resource with id " - + nestedNodeTemplateId + " occures more than once in different addOn " - + "files").build()); + throw new CoreException(new DuplicateResourceIdsInDifferentFilesErrorBuilder(nestedNodeTemplateId).build()); } ConsolidationData consolidationData = context.getConsolidationData(); diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationService.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationService.java index 16a6301968..d3f2a721c9 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationService.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationService.java @@ -24,6 +24,7 @@ import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolida import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData; import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.RequirementAssignmentData; import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData; +import org.openecomp.sdc.translator.services.heattotosca.errors.DuplicateResourceIdsInDifferentFilesErrorBuilder; import java.util.ArrayList; import java.util.Collection; @@ -637,20 +638,16 @@ public class ConsolidationService { NodeTemplate startingPortNodeTemplate = nodeTemplates.get(portNodeTemplateIdList.get(0)); if (Objects.isNull(startingPortNodeTemplate)) { - throw new CoreException((new ErrorCode.ErrorCodeBuilder()) - .withMessage("Resource with id " - + portNodeTemplateIdList.get(0) + " occures more than once in different addOn files") - .build()); + throw new CoreException( + new DuplicateResourceIdsInDifferentFilesErrorBuilder(portNodeTemplateIdList.get(0)).build()); } for (int i = 1; i < portNodeTemplateIdList.size(); i++) { NodeTemplate portNodeTemplate = nodeTemplates.get(portNodeTemplateIdList.get(i)); if (Objects.isNull(portNodeTemplate)) { - throw new CoreException((new ErrorCode.ErrorCodeBuilder()) - .withMessage("Resource with id " - + portNodeTemplateIdList.get(i) + " occures more than once in different addOn " - + "files").build()); + throw new CoreException( + new DuplicateResourceIdsInDifferentFilesErrorBuilder(portNodeTemplateIdList.get(i)).build()); } if (!isPropertySimilarBetweenNodeTemplates(propertyToCheck, portNodeTemplateIdList, nodeTemplates)) { @@ -695,9 +692,8 @@ public class ConsolidationService { for (int i = 1; i < entityNodeTemplateIds.size(); i++) { NodeTemplate currentNodeTemplate = idToNodeTemplate.get(entityNodeTemplateIds.get(i)); if (Objects.isNull(currentNodeTemplate)) { - throw new CoreException((new ErrorCode.ErrorCodeBuilder()) - .withMessage("Resource with id " - + entityNodeTemplateIds.get(i) + " occures more than once in different addOn files").build()); + throw new CoreException( + new DuplicateResourceIdsInDifferentFilesErrorBuilder(entityNodeTemplateIds.get(i)).build()); } if(propertyExistCondition != isPropertyExistInNodeTemplate(propertyToCheck, currentNodeTemplate)){ return false; diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/errors/DuplicateResourceIdsInDifferentFilesErrorBuilder.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/errors/DuplicateResourceIdsInDifferentFilesErrorBuilder.java new file mode 100644 index 0000000000..a75e8b391d --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/errors/DuplicateResourceIdsInDifferentFilesErrorBuilder.java @@ -0,0 +1,16 @@ +package org.openecomp.sdc.translator.services.heattotosca.errors; + +import org.openecomp.sdc.common.errors.BaseErrorBuilder; +import org.openecomp.sdc.common.errors.ErrorCategory; + +public final class DuplicateResourceIdsInDifferentFilesErrorBuilder extends BaseErrorBuilder { + + private static final String DUPLICATE_RESOURCE_ID_MSG = "Resource with id %s occurs more than once in " + + "different addOn files"; + + public DuplicateResourceIdsInDifferentFilesErrorBuilder(String resourceId) { + getErrorCodeBuilder().withId(TranslatorErrorCodes.DUPLICATE_RESOURCE_ID_IN_DIFFERENT_FILES) + .withCategory(ErrorCategory.APPLICATION) + .withMessage(String.format(DUPLICATE_RESOURCE_ID_MSG, resourceId)); + } +} diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/errors/TranslatorErrorCodes.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/errors/TranslatorErrorCodes.java index bfcf834ae1..5afb1ae3c2 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/errors/TranslatorErrorCodes.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/errors/TranslatorErrorCodes.java @@ -29,4 +29,5 @@ public class TranslatorErrorCodes { "REFERENCE_TO_UNSUPPORTED_RESOURCE"; public static final String NOT_IN_SYNC_NUMBER_OF_INTERFACES = "NOT_IN_SYNC_NUMBER_OF_INTERFACES"; public static final String INVALID_PROPERTY_VALUE = "INVALID_PROPERTY_VALUE"; + public static final String DUPLICATE_RESOURCE_ID_IN_DIFFERENT_FILES = "DUPLICATE_RESOURCE_ID_IN_DIFFERENT_FILES"; } diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/fulltest/UnifiedCompositionMixPatternFullTest.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/fulltest/UnifiedCompositionMixPatternFullTest.java index b1946b3f9b..9399b91ce1 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/fulltest/UnifiedCompositionMixPatternFullTest.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/fulltest/UnifiedCompositionMixPatternFullTest.java @@ -2,7 +2,10 @@ package org.openecomp.sdc.translator.services.heattotosca.impl.fulltest; import org.junit.Assert; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.openecomp.sdc.common.errors.CoreException; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseFullTranslationTest; @@ -19,6 +22,9 @@ public class UnifiedCompositionMixPatternFullTest extends BaseFullTranslationTes // do not delete this function. it prevents the superclass setup from running } + @Rule + public ExpectedException exception = ExpectedException.none(); + @Test public void testMixPatterns() throws IOException { inputFilesPath = @@ -52,16 +58,13 @@ public class UnifiedCompositionMixPatternFullTest extends BaseFullTranslationTes @Test public void testDuplicateResourceIdsInDiffAddOnFiles() throws IOException { + exception.expect(CoreException.class); + exception.expectMessage("Resource with id lb_0_int_oam_int_0_port occurs more " + + "than once in different addOn files"); + inputFilesPath = "/mock/services/heattotosca/fulltest/mixPatterns/duplicateResourceIdsInDiffAddOnFiles/in"; - - try { - testTranslationWithInit(); - }catch(Exception e){ - log.debug("",e); - Assert.assertEquals(e.getMessage(), "Resource with id lb_0_int_oam_int_0_port occures more " + - "than once in different addOn files"); - } + testTranslationWithInit(); } @Test @@ -85,7 +85,7 @@ <extentreports.version>3.0.3</extentreports.version> <!-- parser--> - <sdc-tosca-parser.version>1.1.34</sdc-tosca-parser.version> + <sdc-tosca-parser.version>1.1.32</sdc-tosca-parser.version> <!--JaCoCO --> <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> @@ -408,7 +408,7 @@ <artifact-generator-api.version>1710.0.0</artifact-generator-api.version> <artifact-generator-core.version>1710.0.0</artifact-generator-core.version> <dox-common-lib.version>1710.0.0</dox-common-lib.version> - <sdc-tosca-parser.version>1.1.14</sdc-tosca-parser.version> + <sdc-tosca-parser.version>1.1.32</sdc-tosca-parser.version> </properties> </profile> diff --git a/sdc-os-chef/pom.xml b/sdc-os-chef/pom.xml index 21deaf42a6..9fec52d23e 100644 --- a/sdc-os-chef/pom.xml +++ b/sdc-os-chef/pom.xml @@ -305,9 +305,11 @@ <apiVersion>1.23</apiVersion> <registry>nexus3.onap.org:10003</registry> <authConfig> - <username>docker</username> - <password>docker</password> - </authConfig> + <pull> + <username>docker</username> + <password>docker</password> + </pull> + </authConfig> <images> @@ -428,7 +430,6 @@ <id>push-images</id> <phase>deploy</phase> <goals> - <goal>build</goal> <goal>push</goal> </goals> <configuration> diff --git a/sdc-os-chef/scripts/docker_run.sh b/sdc-os-chef/scripts/docker_run.sh index 417db0994c..963b2fcf14 100755 --- a/sdc-os-chef/scripts/docker_run.sh +++ b/sdc-os-chef/scripts/docker_run.sh @@ -17,16 +17,16 @@ function cleanup { function dir_perms { - mkdir -p /data/logs/BE/ASDC/ASDC-BE - mkdir -p /data/logs/FE/ASDC/ASDC-FE + mkdir -p /data/logs/BE/SDC/SDC-BE + mkdir -p /data/logs/FE/SDC/SDC-FE chmod -R 777 /data/logs } function monitor_docker { echo monitor $1 Docker - -TIME_OUT=180 +sleep 5 +TIME_OUT=600 INTERVAL=20 TIME=0 while [ "$TIME" -lt "$TIME_OUT" ]; do @@ -201,9 +201,9 @@ echo -e "" /data/scripts/docker_health.sh -if [ $? -ne 0 ]; then - exit 1 -fi +#if [ $? -ne 0 ]; then +# exit 1 +#fi # sanityDocker echo "docker run sdc-frontend..." diff --git a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_5_jetty_Modules.rb b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_4_jetty_Modules.rb index 046e3c6919..046e3c6919 100644 --- a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_5_jetty_Modules.rb +++ b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_4_jetty_Modules.rb diff --git a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_elasticsearch.rb b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_5_setup_elasticsearch.rb index 39fc5af883..39fc5af883 100644 --- a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_elasticsearch.rb +++ b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_5_setup_elasticsearch.rb diff --git a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_7_setup_portal_properties.rb b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_portal_properties.rb index 8c57de6caf..8c57de6caf 100644 --- a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_7_setup_portal_properties.rb +++ b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_6_setup_portal_properties.rb diff --git a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_8_logback.rb b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_7_logback.rb index 2dfc4f1089..2dfc4f1089 100644 --- a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_8_logback.rb +++ b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_7_logback.rb diff --git a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_9_errors_config.rb b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_8_errors_config.rb index 684d730709..684d730709 100644 --- a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_9_errors_config.rb +++ b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_8_errors_config.rb diff --git a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_4_create_DMaaP_keys.rb b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_Number_create_DMaaP_keys.rb-NotUsed index 583dfff7b2..583dfff7b2 100644 --- a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_4_create_DMaaP_keys.rb +++ b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_Number_create_DMaaP_keys.rb-NotUsed diff --git a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_10_import_Normatives.rb b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_Number_import_Normatives.rb index 6e9b24133d..6e9b24133d 100644 --- a/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_10_import_Normatives.rb +++ b/sdc-os-chef/sdc-backend/chef-repo/cookbooks/sdc-catalog-be/recipes/BE_Number_import_Normatives.rb diff --git a/sdc-os-chef/sdc-backend/chef-solo/roles/catalog-be.json b/sdc-os-chef/sdc-backend/chef-solo/roles/catalog-be.json index a05a2830eb..220eee7c92 100644 --- a/sdc-os-chef/sdc-backend/chef-solo/roles/catalog-be.json +++ b/sdc-os-chef/sdc-backend/chef-solo/roles/catalog-be.json @@ -13,11 +13,11 @@ "recipe[sdc-catalog-be::BE_1_cleanup_jettydir]", "recipe[sdc-catalog-be::BE_2_setup_configuration]", "recipe[sdc-catalog-be::BE_3_locate_keystore]", - "recipe[sdc-catalog-be::BE_5_jetty_Modules]", - "recipe[sdc-catalog-be::BE_6_setup_elasticsearch]", - "recipe[sdc-catalog-be::BE_7_setup_portal_properties]", - "recipe[sdc-catalog-be::BE_8_logback]", - "recipe[sdc-catalog-be::BE_9_errors_config]" + "recipe[sdc-catalog-be::BE_4_jetty_Modules]", + "recipe[sdc-catalog-be::BE_5_setup_elasticsearch]", + "recipe[sdc-catalog-be::BE_6_setup_portal_properties]", + "recipe[sdc-catalog-be::BE_7_logback]", + "recipe[sdc-catalog-be::BE_8_errors_config]" ], "env_run_lists": { } diff --git a/sdc-os-chef/sdc-backend/startup.sh b/sdc-os-chef/sdc-backend/startup.sh index 87f4ae674d..8e5926cdc4 100644 --- a/sdc-os-chef/sdc-backend/startup.sh +++ b/sdc-os-chef/sdc-backend/startup.sh @@ -37,7 +37,9 @@ else chef-solo -c normatives.rb fi +echo "###### DOCKER STARTED #####" + while true; do sleep 2; done -echo "###### DOCKER STARTED #####" + diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vHSS.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vHSS.csar Binary files differnew file mode 100644 index 0000000000..ea5c1283be --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vHSS.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vMME.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vMME.csar Binary files differnew file mode 100644 index 0000000000..f921f46e06 --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vMME.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vPCRF_aligned_fixed.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vPCRF_aligned_fixed.csar Binary files differnew file mode 100644 index 0000000000..6f997bcf98 --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vPCRF_aligned_fixed.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vSPGW.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vSPGW.csar Binary files differnew file mode 100644 index 0000000000..8beae6e74a --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/Huawei_vSPGW.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/ZteEpcSpgwVf-csar.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/ZteEpcSpgwVf-csar.csar Binary files differnew file mode 100644 index 0000000000..0eacd74655 --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/ZteEpcSpgwVf-csar.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/cscf_si_fixed.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/cscf_si_fixed.csar Binary files differnew file mode 100644 index 0000000000..bc8397a86e --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/cscf_si_fixed.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/ntas.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/ntas.csar Binary files differnew file mode 100644 index 0000000000..6b6f7c4d8c --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/ntas.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/resource-ZteEpcMmeVf-csar_fix.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/resource-ZteEpcMmeVf-csar_fix.csar Binary files differnew file mode 100644 index 0000000000..bf0e775102 --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/resource-ZteEpcMmeVf-csar_fix.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vCSCF_aligned.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vCSCF_aligned.csar Binary files differindex ea977bea80..347b8bcced 100644 --- a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vCSCF_aligned.csar +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vCSCF_aligned.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vCSCF_v3.0.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vCSCF_v3.0.csar Binary files differnew file mode 100644 index 0000000000..1c52cca12d --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vCSCF_v3.0.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vSBC_aligned.csar b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vSBC_aligned.csar Binary files differnew file mode 100644 index 0000000000..ee60eed872 --- /dev/null +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/files/default/Files/VNFs/vSBC_aligned.csar diff --git a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/recipes/sanityTests_3_sanity_execution.rb b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/recipes/sanityTests_3_sanity_execution.rb index 690559a74d..c4323c233f 100644 --- a/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/recipes/sanityTests_3_sanity_execution.rb +++ b/sdc-os-chef/sdc-sanity/chef-repo/cookbooks/sdc-sanity/recipes/sanityTests_3_sanity_execution.rb @@ -6,7 +6,7 @@ cwd "#{tests_base}" code <<-EOH cd "#{tests_base}" jar_file=`ls test-apis*-jar-with-dependencies.jar` - nohup ./startTest.sh $jar_file #{ci_test_suite} & + ./startTest.sh $jar_file #{ci_test_suite} > #{tests_base}/target/startTest.out 2>&1 echo "return code from startTest.sh = [$?]" EOH timeout 72000 diff --git a/sdc-os-chef/sdc-sanity/startup.sh b/sdc-os-chef/sdc-sanity/startup.sh index d4316c383f..e4edfc67e6 100644 --- a/sdc-os-chef/sdc-sanity/startup.sh +++ b/sdc-os-chef/sdc-sanity/startup.sh @@ -14,7 +14,7 @@ rc=$? # exit 0 #fi -while true; do sleep 2; done +#while true; do sleep 2; done ##/docker-entrypoint.sh diff --git a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/api/ComponentBaseTest.java b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/api/ComponentBaseTest.java index 6b0dc56357..01fad09d0d 100644 --- a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/api/ComponentBaseTest.java +++ b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/api/ComponentBaseTest.java @@ -28,6 +28,7 @@ import com.thinkaurelius.titan.core.TitanFactory; import com.thinkaurelius.titan.core.TitanGraph; import com.thinkaurelius.titan.core.TitanVertex; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutableTriple; import org.apache.log4j.Logger; @@ -48,6 +49,7 @@ import org.openecomp.sdc.ci.tests.utils.Utils; import org.openecomp.sdc.ci.tests.utils.cassandra.CassandraUtils; import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils; import org.openecomp.sdc.ci.tests.utils.general.ElementFactory; +import org.openecomp.sdc.ci.tests.utils.general.FileHandling; import org.openecomp.sdc.ci.tests.utils.rest.*; import org.slf4j.LoggerFactory; import org.testng.ITestContext; @@ -186,6 +188,10 @@ public abstract class ComponentBaseTest { performClean(); shutdownTitanLogic(); + String basePath = FileHandling.getBasePath(); + String csarDir = FileHandling.getCreateDirByName("outputCsar"); + FileUtils.cleanDirectory(new File(csarDir)); + } diff --git a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/sanity/Onboard.java b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/sanity/Onboard.java index 44e386ada6..4db35a2ce5 100644 --- a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/sanity/Onboard.java +++ b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/sanity/Onboard.java @@ -24,8 +24,10 @@ package org.openecomp.sdc.ci.tests.sanity; +import org.apache.http.HttpResponse; import org.junit.Rule; import org.junit.rules.TestName; +import org.openecomp.sdc.be.datatypes.enums.AssetTypeEnum; import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.Service; @@ -39,9 +41,14 @@ import org.openecomp.sdc.ci.tests.datatypes.VendorSoftwareProductObject; import org.openecomp.sdc.ci.tests.datatypes.enums.LifeCycleStatesEnum; import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum; import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse; +import org.openecomp.sdc.ci.tests.utils.CsarToscaTester; import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils; import org.openecomp.sdc.ci.tests.utils.general.ElementFactory; import org.openecomp.sdc.ci.tests.utils.general.OnboardingUtillViaApis; +import org.openecomp.sdc.ci.tests.utils.rest.AssetRestUtils; +import org.openecomp.sdc.tosca.parser.api.ISdcCsarHelper; +import org.openecomp.sdc.tosca.parser.exceptions.SdcToscaParserException; +import org.openecomp.sdc.tosca.parser.impl.SdcToscaParserFactory; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Optional; import org.testng.annotations.Parameters; @@ -52,9 +59,10 @@ import com.clearspring.analytics.util.Pair; import fj.data.Either; - - - +import java.io.File; +import java.io.InputStream; +import java.util.List; +import java.util.Map; public class Onboard extends ComponentBaseTest { @@ -68,6 +76,8 @@ public class Onboard extends ComponentBaseTest { } protected String makeDistributionValue; + protected ISdcCsarHelper fdntCsarHelper; + protected SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); @@ -115,12 +125,30 @@ public class Onboard extends ComponentBaseTest { ExtentTestActions.log(Status.INFO, String.format("Certify Service")); service = (Service) AtomicOperationUtils.changeComponentState(service, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft(); + // ExtentTestActions.log(Status.INFO, String.format("Distribute Service")); // AtomicOperationUtils.distributeService(service, true); - - ExtentTestActions.log(Status.INFO, String.format("The onboarding %s test is passed ! ", vnfFile)); - } + try{ +// HttpResponse assetResponse = AssetRestUtils.getComponentToscaModel(AssetTypeEnum.SERVICES, service.getUUID()); +// InputStream inputStream = assetResponse.getEntity().getContent(); + File csarFile = AssetRestUtils.getToscaModelCsarFile(AssetTypeEnum.SERVICES, service.getUUID()); + + ExtentTestActions.log(Status.INFO, "Tosca parser is going to convert service csar file to ISdcCsarHelper object..."); + fdntCsarHelper = factory.getSdcCsarHelper(csarFile.getAbsolutePath()); + CsarToscaTester.processCsar(fdntCsarHelper); + ExtentTestActions.log(Status.INFO, String.format("Tosca parser successfully parsed service CSAR")); + ExtentTestActions.log(Status.INFO, String.format("The onboarding %s test is passed ! ", vnfFile)); + + }catch(Exception e){ + ExtentTestActions.log(Status.ERROR, "Tosca parser FAILED to convert service csar file to ISdcCsarHelper object..."); + ExtentTestActions.log(Status.FAIL, e); + + } + + + + } } diff --git a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/CsarToscaTester.java b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/CsarToscaTester.java new file mode 100644 index 0000000000..afdfa43d94 --- /dev/null +++ b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/CsarToscaTester.java @@ -0,0 +1,137 @@ +package org.openecomp.sdc.ci.tests.utils; + +import org.openecomp.sdc.tosca.parser.api.ISdcCsarHelper; +import org.openecomp.sdc.tosca.parser.exceptions.SdcToscaParserException; +import org.openecomp.sdc.tosca.parser.impl.SdcToscaParserFactory; +import org.openecomp.sdc.tosca.parser.impl.SdcTypes; +import org.openecomp.sdc.toscaparser.api.Group; +import org.openecomp.sdc.toscaparser.api.NodeTemplate; +import org.openecomp.sdc.toscaparser.api.elements.Metadata; +import org.openecomp.sdc.toscaparser.api.parameters.Input; +import org.openecomp.sdc.toscaparser.api.utils.ThreadLocalsHolder; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class CsarToscaTester { + public static void main(String[] args) throws Exception { + System.out.println("CsarToscaParser - path to CSAR's Directory is " + Arrays.toString(args)); + SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); + + File folder = new File(args[0]); + File[] listOfFiles = folder.listFiles(); + Date now = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("d-MM-y-HH_mm_ss"); + String time = dateFormat.format(now); + String csarsDir = args[1] + "/csar-reports-" + time; + File dir = new File(csarsDir); + dir.mkdir(); + + + for (File file : listOfFiles) { + if (file.isFile()) { + System.out.println("File " + file.getAbsolutePath()); + String name = file.getName(); + String currentCsarDir = csarsDir+"/"+name+"-"+time; + dir = new File(currentCsarDir); + dir.mkdir(); + try { + processCsar(factory, file); + } catch (SdcToscaParserException e){ + System.out.println("SdcToscaParserException caught. Code: "+e.getCode()+", message: "+ e.getMessage()); + } + List<String> notAnalyzedReport = ThreadLocalsHolder.getCollector().getNotAnalyzedExceptionsReport(); + System.out.println("NOT ANALYZED during CSAR parsing are: " + (notAnalyzedReport != null ? notAnalyzedReport.toString() : "none")); + List<String> warningsReport = ThreadLocalsHolder.getCollector().getWarningsReport(); + //System.out.println("WARNINGS during CSAR parsing are: " + (warningsReport != null ? warningsReport.toString() : "none")); + List<String> criticalsReport = ThreadLocalsHolder.getCollector().getCriticalsReport(); + System.out.println("CRITICALS during CSAR parsing are: " + (criticalsReport != null ? criticalsReport.toString() : "none")); + + try { + generateReport(time, name, currentCsarDir, criticalsReport, "critical"); + generateReport(time, name, currentCsarDir, warningsReport, "warning"); + generateReport(time, name, currentCsarDir, notAnalyzedReport, "notAnalyzed"); + + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + } + } + + public static void processCsar(SdcToscaParserFactory factory, File file) throws SdcToscaParserException { + ISdcCsarHelper sdcCsarHelper = factory.getSdcCsarHelper(file.getAbsolutePath()); + processCsarImpl(sdcCsarHelper); + + } + + public static void processCsar(ISdcCsarHelper sdcCsarHelper) throws SdcToscaParserException { + processCsarImpl(sdcCsarHelper); + + } + + private static void processCsarImpl(ISdcCsarHelper sdcCsarHelper) { + + //Service level + System.out.println("Invoking sdc-tosca methods on this CSAR...."); + String conformanceLevel = sdcCsarHelper.getConformanceLevel(); + System.out.println("getConformanceLevel() - conformance level is "+conformanceLevel); + String serviceSubstitutionMappingsTypeName = sdcCsarHelper.getServiceSubstitutionMappingsTypeName(); + System.out.println("serviceSubstitutionMappingsTypeName() - subst mappings type of service is "+serviceSubstitutionMappingsTypeName); + List<Input> serviceInputs = sdcCsarHelper.getServiceInputs(); + System.out.println("getServiceInputs() - service inputs are "+serviceInputs); + Metadata serviceMetadata = sdcCsarHelper.getServiceMetadata(); + System.out.println("getServiceMetadata() - service metadata is "+serviceMetadata); + Map<String, Object> serviceMetadataProperties = sdcCsarHelper.getServiceMetadataProperties(); + System.out.println("getServiceMetadataProperties() - service metadata properties is "+serviceMetadataProperties); + List<NodeTemplate> allottedResources = sdcCsarHelper.getAllottedResources(); + System.out.println("getAllottedResources() - service allotted resources are "+allottedResources); + List<NodeTemplate> serviceVfList = sdcCsarHelper.getServiceVfList(); + System.out.println("getServiceVfList() - VF list is "+serviceVfList); + List<NodeTemplate> serviceNodeTemplateBySdcType = sdcCsarHelper.getServiceNodeTemplateBySdcType(SdcTypes.VF); + System.out.println("getServiceNodeTemplateBySdcType() - VF list is "+serviceNodeTemplateBySdcType); + List<NodeTemplate> serviceNodeTemplates = sdcCsarHelper.getServiceNodeTemplates(); + System.out.println("getServiceNodeTemplates() - all node templates list of service is "+serviceNodeTemplates); + + serviceVfList.forEach(x -> { + String nodeTemplateCustomizationUuid = sdcCsarHelper.getNodeTemplateCustomizationUuid(x); + System.out.println("getNodeTemplateCustomizationUuid() - VF ID is "+nodeTemplateCustomizationUuid); + String typeOfNodeTemplate = sdcCsarHelper.getTypeOfNodeTemplate(x); + System.out.println("getTypeOfNodeTemplate() - VF tosca type is "+typeOfNodeTemplate); + List<Group> vfModulesByVf = sdcCsarHelper.getVfModulesByVf(nodeTemplateCustomizationUuid); + System.out.println("getVfModulesByVf() - VF modules list is "+vfModulesByVf); + vfModulesByVf.forEach(y -> { + List<NodeTemplate> membersOfVfModule = sdcCsarHelper.getMembersOfVfModule(x, y); + System.out.println("getMembersOfVfModule() - members of VfModule are "+membersOfVfModule); + }); + List<NodeTemplate> vfcListByVf = sdcCsarHelper.getVfcListByVf(nodeTemplateCustomizationUuid); + System.out.println("getVfcListByVf() - VFC list is "+vfcListByVf); + vfcListByVf.forEach(z -> { + List<NodeTemplate> nodeTemplateBySdcType = sdcCsarHelper.getNodeTemplateBySdcType(z, SdcTypes.CP); + System.out.println("getNodeTemplateBySdcType() - CP children node templates of this VFC are "+nodeTemplateBySdcType); + Map<String, Map<String, Object>> cpPropertiesFromVfcAsObject = sdcCsarHelper.getCpPropertiesFromVfcAsObject(z); + System.out.println("getCpPropertiesFromVfcAsObject() - consolidated CP properties for this VFC are "+cpPropertiesFromVfcAsObject); + boolean hasTopology = sdcCsarHelper.hasTopology(z); + System.out.println("hasTopology() - this VFC is "+(hasTopology ? "nested" : "not nested")); + }); + }); + } + + private static void generateReport(String time, String name, String currentCsarDir, List<String> criticalsReport, String type) + throws IOException { + FileWriter fw; + fw = new FileWriter(new File(currentCsarDir + "/" + criticalsReport.size() + "-"+type+"-" + name +"-"+time + ".txt")); + for (String exception : criticalsReport) { + fw.write(exception); + fw.write("\r\n"); + } + fw.close(); + } +} diff --git a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/general/FileHandling.java b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/general/FileHandling.java index c8f9ee4139..2c5d985aa5 100644 --- a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/general/FileHandling.java +++ b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/general/FileHandling.java @@ -390,6 +390,15 @@ public class FileHandling { // // } // } + + public static String getCreateDirByName(String dirName) { + File dir = new File(dirName); + dir.mkdir(); + if(!dir.exists()) { + } + + return dir.getPath(); + } public static boolean isFileDownloaded(String downloadPath, String fileName) { boolean flag = false; diff --git a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/rest/AssetRestUtils.java b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/rest/AssetRestUtils.java index 13a56417e8..7bcf33801a 100644 --- a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/rest/AssetRestUtils.java +++ b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/utils/rest/AssetRestUtils.java @@ -26,10 +26,7 @@ import static org.testng.AssertJUnit.assertTrue; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; import org.apache.http.HttpEntity; @@ -62,6 +59,7 @@ import org.openecomp.sdc.ci.tests.datatypes.http.HttpRequest; import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse; import org.openecomp.sdc.ci.tests.utils.Utils; import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils; +import org.openecomp.sdc.ci.tests.utils.general.FileHandling; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -105,7 +103,9 @@ public class AssetRestUtils extends BaseRestUtils { String url = String.format(Urls.GET_TOSCA_MODEL, config.getCatalogBeHost(), config.getCatalogBePort(), assetType.getValue(), uuid); HttpGet httpGet = new HttpGet(url); - File myFile = new File("tmpCSAR"); + + String csarDir = FileHandling.getCreateDirByName("outputCsar"); + File myFile = new File(csarDir+ File.separator + "tmpCSAR" + getShortUUID()+".csar"); httpGet.addHeader(HttpHeaderEnum.X_ECOMP_INSTANCE_ID.getValue(), "ci"); @@ -123,7 +123,9 @@ public class AssetRestUtils extends BaseRestUtils { } return myFile; } - + + + public static RestResponse getRestResponseComponentToscaModel(AssetTypeEnum assetType, String uuid) throws IOException { Config config = Utils.getConfig(); @@ -622,5 +624,8 @@ public class AssetRestUtils extends BaseRestUtils { } return null; } + private static String getShortUUID() { + return UUID.randomUUID().toString().split("-")[0]; + } } diff --git a/test-apis-ci/src/main/resources/ci/testSuites/onap.xml b/test-apis-ci/src/main/resources/ci/testSuites/onap.xml index c075f10b11..1d5bc4b1bf 100644 --- a/test-apis-ci/src/main/resources/ci/testSuites/onap.xml +++ b/test-apis-ci/src/main/resources/ci/testSuites/onap.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> -<suite name="externalApis" configfailurepolicy="continue" verbose="2" parallel="methods" thread-count="2" data-provider-thread-count="2"> +<suite name="externalApis" configfailurepolicy="continue" verbose="2" parallel="methods" thread-count="1" data-provider-thread-count="1"> <test name="ExternalApis"> <classes> |