diff options
Diffstat (limited to 'catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java')
9 files changed, 359 insertions, 51 deletions
diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/builder/NsdCsarManifestBuilder.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/builder/NsdCsarManifestBuilder.java index 6dc120290c..ed3a7fc4ee 100644 --- a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/builder/NsdCsarManifestBuilder.java +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/builder/NsdCsarManifestBuilder.java @@ -22,39 +22,35 @@ package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.builder; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Collection; -import java.util.HashSet; import java.util.LinkedHashSet; +import java.util.Set; +import java.util.TreeSet; /** * Builder for the manifest (.mf) file in a NSD CSAR */ public class NsdCsarManifestBuilder { - private static final String METADATA = "metadata"; - private static final String SOURCE = "Source"; + static final String METADATA = "metadata"; + static final String SOURCE = "Source"; + static final String COMPATIBLE_SPECIFICATION_VERSIONS = "compatible_specification_versions"; private static final String NSD_DESIGNER = "nsd_designer"; private static final String NSD_FILE_STRUCTURE_VERSION = "nsd_file_structure_version"; - private static final String NSD_RELEASE_DATE_TIME = "nsd_release_date_time"; + static final String NSD_RELEASE_DATE_TIME = "nsd_release_date_time"; private static final String NSD_NAME = "nsd_name"; private static final String NSD_INVARIANT_ID = "nsd_invariant_id"; - private static final String ATTRIBUTE_SEPARATOR = ": "; + static final String ATTRIBUTE_SEPARATOR = ": "; private static final String NEW_LINE = "\n"; private static final DateTimeFormatter RFC_3339_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"); - private final StringBuilder builder; - private final StringBuilder metadataBuilder; - private final StringBuilder sourceBuilder; private final MetadataHeader metadataHeader; - private final HashSet<String> sources; + private final Set<String> sources; + private final Set<String> compatibleSpecificationVersions; public NsdCsarManifestBuilder() { - builder = new StringBuilder(); - metadataBuilder = new StringBuilder(); - sourceBuilder = new StringBuilder(); metadataHeader = new MetadataHeader(); sources = new LinkedHashSet<>(); - metadataBuilder.append(METADATA).append(ATTRIBUTE_SEPARATOR) - .append(NEW_LINE); + compatibleSpecificationVersions = new TreeSet<>(); } /** @@ -122,25 +118,49 @@ public class NsdCsarManifestBuilder { return this; } + public NsdCsarManifestBuilder withCompatibleSpecificationVersion(final String version) { + this.compatibleSpecificationVersions.add(version); + return this; + } + /** * Builds a string representing the manifest content based on provided values. * * @return a string representing the manifest content */ public String build() { + final StringBuilder metadataBuilder = createMetadataBuilder(); appendEntry(metadataBuilder, NSD_DESIGNER, metadataHeader.designer); appendEntry(metadataBuilder, NSD_INVARIANT_ID, metadataHeader.invariantId); appendEntry(metadataBuilder, NSD_NAME, metadataHeader.nsdName); appendEntry(metadataBuilder, NSD_RELEASE_DATE_TIME, metadataHeader.nsdReleaseDateTime); appendEntry(metadataBuilder, NSD_FILE_STRUCTURE_VERSION, metadataHeader.fileStructureVersion); + final StringBuilder sourceBuilder = new StringBuilder(); sources.forEach(source -> appendEntry(sourceBuilder, SOURCE, source)); + final StringBuilder compatibleSpecificationVersionsBuilder = new StringBuilder(); + if (!compatibleSpecificationVersions.isEmpty()) { + compatibleSpecificationVersionsBuilder.append(COMPATIBLE_SPECIFICATION_VERSIONS) + .append(ATTRIBUTE_SEPARATOR) + .append(String.join(",", compatibleSpecificationVersions)) + .append(NEW_LINE); + } + + final StringBuilder builder = new StringBuilder(); + builder.append(metadataBuilder) + .append(compatibleSpecificationVersionsBuilder) .append(NEW_LINE) .append(sourceBuilder); return builder.toString(); } + private StringBuilder createMetadataBuilder() { + final StringBuilder metadataBuilder = new StringBuilder(); + metadataBuilder.append(METADATA).append(ATTRIBUTE_SEPARATOR).append(NEW_LINE); + return metadataBuilder; + } + private String getNowDateTime() { return ZonedDateTime.now().format(RFC_3339_DATE_TIME_FORMATTER); } diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/factory/EtsiNfvNsdCsarGeneratorFactory.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/factory/EtsiNfvNsdCsarGeneratorFactory.java new file mode 100644 index 0000000000..c1c792e443 --- /dev/null +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/factory/EtsiNfvNsdCsarGeneratorFactory.java @@ -0,0 +1,55 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.factory; + +import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.EtsiNfvNsdCsarGenerator; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.EtsiNfvNsdCsarGeneratorImpl; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.VnfDescriptorGenerator; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.NsDescriptorConfig; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.EtsiVersion; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.stereotype.Component; + +@Component +public class EtsiNfvNsdCsarGeneratorFactory { + + private final VnfDescriptorGenerator vnfDescriptorGenerator; + private final NsDescriptorGeneratorFactory nsDescriptorGeneratorFactory; + private final ArtifactCassandraDao artifactCassandraDao; + private final ObjectProvider<EtsiNfvNsdCsarGeneratorImpl> etsiNfvNsdCsarGeneratorObjectProvider; + + public EtsiNfvNsdCsarGeneratorFactory(final VnfDescriptorGenerator vnfDescriptorGenerator, + final NsDescriptorGeneratorFactory nsDescriptorGeneratorFactory, + final ArtifactCassandraDao artifactCassandraDao, + final ObjectProvider<EtsiNfvNsdCsarGeneratorImpl> etsiNfvNsdCsarGeneratorObjectProvider) { + this.vnfDescriptorGenerator = vnfDescriptorGenerator; + this.nsDescriptorGeneratorFactory = nsDescriptorGeneratorFactory; + this.artifactCassandraDao = artifactCassandraDao; + this.etsiNfvNsdCsarGeneratorObjectProvider = etsiNfvNsdCsarGeneratorObjectProvider; + } + + public EtsiNfvNsdCsarGenerator create(final EtsiVersion version) { + final NsDescriptorConfig nsDescriptorConfig = new NsDescriptorConfig(version); + return etsiNfvNsdCsarGeneratorObjectProvider + .getObject(nsDescriptorConfig, vnfDescriptorGenerator, nsDescriptorGeneratorFactory, artifactCassandraDao); + } + +} diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/factory/NsDescriptorGeneratorFactory.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/factory/NsDescriptorGeneratorFactory.java new file mode 100644 index 0000000000..5563078964 --- /dev/null +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/factory/NsDescriptorGeneratorFactory.java @@ -0,0 +1,49 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.factory; + +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.NsDescriptorGenerator; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.NsDescriptorGeneratorImpl; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.tosca.yaml.ToscaTemplateYamlGenerator; +import org.openecomp.sdc.be.tosca.ToscaExportHandler; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.stereotype.Component; + +@Component +public class NsDescriptorGeneratorFactory { + + private final ToscaExportHandler toscaExportHandler; + private final ObjectProvider<ToscaTemplateYamlGenerator> toscaTemplateYamlGeneratorProvider; + private final ObjectProvider<NsDescriptorGeneratorImpl> nsDescriptorGeneratorProvider; + + public NsDescriptorGeneratorFactory(final ToscaExportHandler toscaExportHandler, + final ObjectProvider<ToscaTemplateYamlGenerator> toscaTemplateYamlGeneratorProvider, + final ObjectProvider<NsDescriptorGeneratorImpl> nsDescriptorGeneratorProvider) { + this.toscaExportHandler = toscaExportHandler; + this.toscaTemplateYamlGeneratorProvider = toscaTemplateYamlGeneratorProvider; + this.nsDescriptorGeneratorProvider = nsDescriptorGeneratorProvider; + } + + public NsDescriptorGenerator create() { + return nsDescriptorGeneratorProvider + .getObject(toscaExportHandler, toscaTemplateYamlGeneratorProvider); + } + +} diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsCsarEntryGenerator.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsCsarEntryGenerator.java index 217b334f1a..ff20a3e70b 100644 --- a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsCsarEntryGenerator.java +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsCsarEntryGenerator.java @@ -28,6 +28,8 @@ import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; import org.openecomp.sdc.be.model.Component; import org.openecomp.sdc.be.plugins.CsarEntryGenerator; import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.exception.NsdException; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.factory.EtsiNfvNsdCsarGeneratorFactory; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.EtsiVersion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,11 +42,12 @@ public class EtsiNfvNsCsarEntryGenerator implements CsarEntryGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(EtsiNfvNsCsarEntryGenerator.class); static final String ETSI_NS_COMPONENT_CATEGORY = "ETSI NFV Network Service"; static final String NSD_FILE_PATH_FORMAT = "Artifacts/%s/%s.csar"; + static final String ETSI_VERSION_METADATA = "ETSI Version"; - private final EtsiNfvNsdCsarGenerator etsiNfvNsdCsarGenerator; + private final EtsiNfvNsdCsarGeneratorFactory etsiNfvNsdCsarGeneratorFactory; - public EtsiNfvNsCsarEntryGenerator(final EtsiNfvNsdCsarGenerator etsiNfvNsdCsarGenerator) { - this.etsiNfvNsdCsarGenerator = etsiNfvNsdCsarGenerator; + public EtsiNfvNsCsarEntryGenerator(final EtsiNfvNsdCsarGeneratorFactory etsiNfvNsdCsarGeneratorFactory) { + this.etsiNfvNsdCsarGeneratorFactory = etsiNfvNsdCsarGeneratorFactory; } /** @@ -72,6 +75,9 @@ public class EtsiNfvNsCsarEntryGenerator implements CsarEntryGenerator { final byte[] nsdCsar; try { + final EtsiVersion etsiVersion = getComponentEtsiVersion(component); + final EtsiNfvNsdCsarGenerator etsiNfvNsdCsarGenerator = + etsiNfvNsdCsarGeneratorFactory.create(etsiVersion); nsdCsar = etsiNfvNsdCsarGenerator.generateNsdCsar(component); } catch (final NsdException e) { LOGGER.error("Could not create NSD CSAR entry for component '{}'" @@ -86,6 +92,11 @@ public class EtsiNfvNsCsarEntryGenerator implements CsarEntryGenerator { return createEntry(component.getNormalizedName(), nsdCsar); } + private EtsiVersion getComponentEtsiVersion(Component component) { + final String etsiVersion = component.getCategorySpecificMetadata().get(ETSI_VERSION_METADATA); + return EtsiVersion.convertOrNull(etsiVersion); + } + private Map<String, byte[]> createEntry(final String csarName, final byte[] nsdCsar) { final Map<String, byte[]> entryMap = new HashMap<>(); final String entryKey = String.format(NSD_FILE_PATH_FORMAT, ETSI_PACKAGE, csarName); diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsdCsarGeneratorImpl.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsdCsarGeneratorImpl.java index 64356ca7aa..efc6ade92d 100644 --- a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsdCsarGeneratorImpl.java +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/EtsiNfvNsdCsarGeneratorImpl.java @@ -24,8 +24,6 @@ import static org.openecomp.sdc.common.api.ArtifactTypeEnum.ONBOARDED_PACKAGE; import fj.data.Either; import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -50,19 +48,26 @@ import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.builder.NsdCsarManifestBuilder; import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.builder.NsdToscaMetadataBuilder; import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.exception.NsdException; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.factory.NsDescriptorGeneratorFactory; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.EtsiVersion; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.NsDescriptorConfig; +import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config.NsDescriptorVersionComparator; import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.model.Nsd; import org.openecomp.sdc.be.plugins.etsi.nfv.nsd.model.VnfDescriptor; import org.openecomp.sdc.be.resources.data.DAOArtifactData; import org.openecomp.sdc.be.tosca.utils.OperationArtifactUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.core.io.ClassPathResource; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; /** * Implementation of a ETSI NFV NSD CSAR generator */ @org.springframework.stereotype.Component("etsiNfvNsdCsarGenerator") +@Scope(BeanDefinition.SCOPE_PROTOTYPE) public class EtsiNfvNsdCsarGeneratorImpl implements EtsiNfvNsdCsarGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(EtsiNfvNsdCsarGeneratorImpl.class); @@ -76,14 +81,17 @@ public class EtsiNfvNsdCsarGeneratorImpl implements EtsiNfvNsdCsarGenerator { private static final String TOSCA_META_PATH = "TOSCA-Metadata/TOSCA.meta"; private final VnfDescriptorGenerator vnfDescriptorGenerator; - private final NsDescriptorGenerator nsDescriptorGeneratorImpl; + private final NsDescriptorGeneratorFactory nsDescriptorGeneratorFactory; private final ArtifactCassandraDao artifactCassandraDao; + private final NsDescriptorConfig nsDescriptorConfig; - public EtsiNfvNsdCsarGeneratorImpl(final VnfDescriptorGenerator vnfDescriptorGenerator, - final NsDescriptorGenerator nsDescriptorGenerator, + public EtsiNfvNsdCsarGeneratorImpl(final NsDescriptorConfig nsDescriptorConfig, + final VnfDescriptorGenerator vnfDescriptorGenerator, + final NsDescriptorGeneratorFactory nsDescriptorGeneratorFactory, final ArtifactCassandraDao artifactCassandraDao) { + this.nsDescriptorConfig = nsDescriptorConfig; this.vnfDescriptorGenerator = vnfDescriptorGenerator; - this.nsDescriptorGeneratorImpl = nsDescriptorGenerator; + this.nsDescriptorGeneratorFactory = nsDescriptorGeneratorFactory; this.artifactCassandraDao = artifactCassandraDao; } @@ -106,17 +114,18 @@ public class EtsiNfvNsdCsarGeneratorImpl implements EtsiNfvNsdCsarGenerator { vnfDescriptorList.forEach(vnfPackage -> nsdCsarFiles.putAll(vnfPackage.getDefinitionFiles())); final String nsdFileName = getNsdFileName(component); + final EtsiVersion etsiVersion = nsDescriptorConfig.getNsVersion(); final Nsd nsd = generateNsd(component, vnfDescriptorList); nsdCsarFiles.put(getNsdPath(nsdFileName), nsd.getContents()); nsdCsarFiles.put(TOSCA_META_PATH, buildToscaMetaContent(nsdFileName).getBytes()); - addEtsiSolNsdTypes(nsdCsarFiles); + addEtsiSolNsdTypes(etsiVersion, nsdCsarFiles); for (final String referencedFile : nsd.getArtifactReferences()) { getReferencedArtifact(component, referencedFile).ifPresent( artifactDefinition -> nsdCsarFiles.put(referencedFile, artifactDefinition.getPayloadData()) ); } nsdCsarFiles - .put(getManifestPath(nsdFileName), getManifestFileContent(nsd, nsdCsarFiles.keySet()).getBytes()); + .put(getManifestPath(nsdFileName), getManifestFileContent(nsd, etsiVersion, nsdCsarFiles.keySet()).getBytes()); final byte[] csar = buildCsarPackage(nsdCsarFiles); LOGGER.debug("Successfully generated NSD CSAR package"); @@ -221,33 +230,40 @@ public class EtsiNfvNsdCsarGeneratorImpl implements EtsiNfvNsdCsarGenerator { .findFirst(); } - private void addEtsiSolNsdTypes(final Map<String, byte[]> nsdCsarFileMap) { - final Path baseFolderPath = Paths.get("etsi-nfv-types"); - String nsdTypesFilename = "etsi_nfv_sol001_nsd_2_7_1_types.yaml"; + private void addEtsiSolNsdTypes(final EtsiVersion etsiVersion, + final Map<String, byte[]> nsdCsarFileMap) { + final EtsiVersion currentVersion = etsiVersion == null ? + EtsiVersion.getDefaultVersion() : etsiVersion; + + final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { - final Resource resource = - new ClassPathResource(Paths.get(baseFolderPath.toString(), nsdTypesFilename).toString()); - nsdCsarFileMap.put(DEFINITION + "/" + nsdTypesFilename, - IOUtils.toByteArray(resource.getInputStream())); - } catch (final IOException exception) { - LOGGER.error("Error adding {} to NSD CSAR", nsdTypesFilename, exception); + final Resource[] resources = + resolver.getResources(String.format("classpath:etsi-nfv-types/%s/*.*", currentVersion.getVersion())); + if (resources.length > 0) { + for (final Resource resource : resources) { + addToCsarFileMap(resource, nsdCsarFileMap); + } + } + } catch (final IOException e) { + LOGGER.error("Could not find types files for the version '{}'", currentVersion.getVersion(), e); } + } - String commonTypesFilename = "etsi_nfv_sol001_common_types.yaml"; + private void addToCsarFileMap(final Resource resource, final Map<String, byte[]> nsdCsarFileMap) { try { - final Resource resource = - new ClassPathResource(Paths.get(baseFolderPath.toString(), commonTypesFilename).toString()); - nsdCsarFileMap.put(DEFINITION + "/" + commonTypesFilename, + nsdCsarFileMap.put(DEFINITION + "/" + resource.getFilename(), IOUtils.toByteArray(resource.getInputStream())); } catch (final IOException exception) { - LOGGER.error("Error adding {} to NSD CSAR", commonTypesFilename, exception); + LOGGER.error("Error adding '{}' to NSD CSAR", resource.getFilename(), exception); } } private Nsd generateNsd(final Component component, final List<VnfDescriptor> vnfDescriptorList) throws NsdException { - return nsDescriptorGeneratorImpl.generate(component, vnfDescriptorList) + final NsDescriptorGenerator nsDescriptorGenerator = + nsDescriptorGeneratorFactory.create(); + return nsDescriptorGenerator.generate(component, vnfDescriptorList) .orElseThrow(() -> new NsdException(String .format("Could not generate the Network Service Descriptor for component %s", component.getName())) @@ -269,7 +285,7 @@ public class EtsiNfvNsdCsarGeneratorImpl implements EtsiNfvNsdCsarGenerator { if (artifactDefinition.getPayloadData() == null) { final Optional<byte[]> artifactPayload = loadArtifactPayload(artifactDefinition.getEsId()); - if (!artifactPayload.isPresent()) { + if (artifactPayload.isEmpty()) { throw new NsdException(String.format("Could not load artifact '%s' payload", filePath)); } artifactDefinition.setPayload(artifactPayload.get()); @@ -307,7 +323,9 @@ public class EtsiNfvNsdCsarGeneratorImpl implements EtsiNfvNsdCsarGenerator { return toscaMetadata; } - private String getManifestFileContent(final Nsd nsd, final Set<String> files) { + private String getManifestFileContent(final Nsd nsd, + final EtsiVersion nsdVersion, + final Set<String> files) { LOGGER.debug("Creating NS manifest file content"); final NsdCsarManifestBuilder nsdCsarManifestBuilder = new NsdCsarManifestBuilder(); @@ -318,6 +336,12 @@ public class EtsiNfvNsdCsarGeneratorImpl implements EtsiNfvNsdCsarGenerator { .withFileStructureVersion(nsd.getVersion()) .withSources(files); + final NsDescriptorVersionComparator nsdVersionComparator = new NsDescriptorVersionComparator(); + + if (nsdVersion != null && nsdVersionComparator.compare(nsdVersion, EtsiVersion.VERSION_3_3_1) >= 0) { + nsdCsarManifestBuilder.withCompatibleSpecificationVersion(nsdVersion.getVersion()); + } + final String manifest = nsdCsarManifestBuilder.build(); LOGGER.debug("Successfully created NS CSAR manifest file content:\n {}", manifest); return manifest; diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/NsDescriptorGeneratorImpl.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/NsDescriptorGeneratorImpl.java index 271fc196bf..2a2e2b008a 100644 --- a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/NsDescriptorGeneratorImpl.java +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/NsDescriptorGeneratorImpl.java @@ -19,7 +19,6 @@ package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import fj.data.Either; import java.util.ArrayList; @@ -54,19 +53,16 @@ import org.openecomp.sdc.be.tosca.model.ToscaTopolgyTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; @org.springframework.stereotype.Component("nsDescriptorGenerator") +@Scope(BeanDefinition.SCOPE_PROTOTYPE) public class NsDescriptorGeneratorImpl implements NsDescriptorGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(NsDescriptorGeneratorImpl.class); private static final String TOSCA_VERSION = "tosca_simple_yaml_1_1"; private static final String NS_TOSCA_TYPE = "tosca.nodes.nfv.NS"; - private static final List<Map<String, Map<String, String>>> DEFAULT_IMPORTS_ETSI_SOL_NSD = - ImmutableList.of( - ImmutableMap.of("etsi_nfv_sol001_nsd_2_7_1_types", - ImmutableMap.of("file", "etsi_nfv_sol001_nsd_2_7_1_types.yaml") - ) - ); private static final List<Map<String, Map<String, String>>> DEFAULT_IMPORTS = ConfigurationManager .getConfigurationManager().getConfiguration().getDefaultImports(); private static final List<String> PROPERTIES_TO_EXCLUDE_FROM_ETSI_SOL_NSD_NS_NODE_TYPE = Arrays @@ -308,7 +304,11 @@ public class NsDescriptorGeneratorImpl implements NsDescriptorGenerator { private void setDefaultImportsForEtsiSolNsNsd(final ToscaTemplate template, final List<VnfDescriptor> vnfDescriptorList) { - final List<Map<String, Map<String, String>>> importEntryMap = new ArrayList<>(DEFAULT_IMPORTS_ETSI_SOL_NSD); + final List<Map<String, Map<String, String>>> importEntryMap = new ArrayList<>(); + final Map<String, Map<String, String>> defaultImportEntryMap = generateDefaultImportEntry(); + if (MapUtils.isNotEmpty(defaultImportEntryMap)) { + importEntryMap.add(defaultImportEntryMap); + } if (CollectionUtils.isNotEmpty(vnfDescriptorList)) { for (final VnfDescriptor vnfDescriptor : vnfDescriptorList) { final Map<String, String> vnfImportChildEntry = new HashMap<>(); @@ -322,6 +322,12 @@ public class NsDescriptorGeneratorImpl implements NsDescriptorGenerator { template.setImports(importEntryMap); } + private Map<String, Map<String, String>> generateDefaultImportEntry() { + return ImmutableMap.of("etsi_nfv_sol001_nsd_types", + ImmutableMap.of("file", "etsi_nfv_sol001_nsd_types.yaml") + ); + } + private ToscaNodeType createEtsiSolNsNodeType(final ToscaNodeType nsNodeType) { final ToscaNodeType toscaNodeType = new ToscaNodeType(); toscaNodeType.setDerived_from(NS_TOSCA_TYPE); diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/EtsiVersion.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/EtsiVersion.java new file mode 100644 index 0000000000..d447dc428d --- /dev/null +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/EtsiVersion.java @@ -0,0 +1,58 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang.StringUtils; + +/** + * Network Service Descriptor known versions + */ +@Getter +@AllArgsConstructor +public enum EtsiVersion { + VERSION_2_5_1("2.5.1"), + VERSION_2_7_1("2.7.1"), + VERSION_3_3_1("3.3.1"); + + private final String version; + + public static EtsiVersion convertOrNull(final String etsiVersion) { + if (StringUtils.isEmpty(etsiVersion)) { + return null; + } + if (VERSION_2_5_1.getVersion().equals(etsiVersion)) { + return VERSION_2_5_1; + } + if (VERSION_2_7_1.getVersion().equals(etsiVersion)) { + return VERSION_2_7_1; + } + if (VERSION_3_3_1.getVersion().equals(etsiVersion)) { + return VERSION_3_3_1; + } + + return null; + } + + public static EtsiVersion getDefaultVersion() { + return VERSION_2_5_1; + } +} diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/NsDescriptorConfig.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/NsDescriptorConfig.java new file mode 100644 index 0000000000..d17b48d158 --- /dev/null +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/NsDescriptorConfig.java @@ -0,0 +1,35 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config; + +import lombok.Getter; + +/** + * Configuration parameters for the Network Service Descriptor generation + */ +@Getter +public class NsDescriptorConfig { + + final EtsiVersion nsVersion; + + public NsDescriptorConfig(final EtsiVersion etsiVersion) { + this.nsVersion = etsiVersion; + } +} diff --git a/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/NsDescriptorVersionComparator.java b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/NsDescriptorVersionComparator.java new file mode 100644 index 0000000000..40e499c8c7 --- /dev/null +++ b/catalog-be-plugins/etsi-nfv-nsd-csar-plugin/src/main/java/org/openecomp/sdc/be/plugins/etsi/nfv/nsd/generator/config/NsDescriptorVersionComparator.java @@ -0,0 +1,50 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.be.plugins.etsi.nfv.nsd.generator.config; + +import java.util.Comparator; + +public class NsDescriptorVersionComparator implements Comparator<EtsiVersion> { + + @Override + public int compare(final EtsiVersion o1, final EtsiVersion o2) { + final String[] v1 = o1.getVersion().split("\\."); + final String[] v2 = o2.getVersion().split("\\."); + if (Integer.parseInt(v1[0]) > Integer.parseInt(v2[0])) { + return 1; + } else if (Integer.parseInt(v1[0]) < Integer.parseInt(v2[0])) { + return -1; + } + + if (Integer.parseInt(v1[1]) > Integer.parseInt(v2[1])) { + return 1; + } else if (Integer.parseInt(v1[1]) < Integer.parseInt(v2[1])) { + return -1; + } + + if (Integer.parseInt(v1[2]) > Integer.parseInt(v2[2])) { + return 1; + } else if (Integer.parseInt(v1[2]) < Integer.parseInt(v2[2])) { + return -1; + } + + return 0; + } +} |