diff options
author | dermot123 <dermot.melia@est.tech> | 2019-04-08 16:31:20 +0000 |
---|---|---|
committer | Oren Kleks <orenkle@amdocs.com> | 2019-04-10 06:46:55 +0000 |
commit | d9c0322b76c48e5f78158cb1a44da7aac9beb2a2 (patch) | |
tree | 2eb1428d007e0840c9ca406ecc8874787c14855a /openecomp-be/lib/openecomp-sdc-vendor-software-product-lib | |
parent | 18750938b1513ee32d4d68f0871ec90efdf3ddfd (diff) |
Supporting PNFD (SOL001) mapping to Internal AID model
This maps the PNF descriptor containing etsi defined types
according to SOL001 v2.5.1 to openecomp internal model. The
transformation is done in the "Create VSP" stage. As the main
PNF type gets mapped to the outer container in internal ecomp
model, it is possible to have no "resource instances" when
importing the PNF model into the catalog. The code was updated
to allow this for PNFs.
Change-Id: I961e91746ca638d858dd468e6c82aeb57993f7a3
Issue-ID: SDC-1976
Issue-ID: SDC-2160
Signed-off-by: dermot123 <dermot.melia@est.tech>
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-vendor-software-product-lib')
2 files changed, 89 insertions, 20 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java index d5dab46533..a6b58167f9 100644 --- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java +++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java @@ -21,6 +21,7 @@ package org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi; import org.openecomp.core.utilities.file.FileContentHandler; +import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; import org.openecomp.sdc.tosca.csar.Manifest; import java.io.IOException; @@ -42,4 +43,25 @@ public interface ETSIService { * @param manifest */ void moveNonManoFileToArtifactFolder(FileContentHandler handler, Manifest manifest); + + /** + * Retrieves the manifest file from the CSAR + * @param handler contains csar artifacts + * @throws IOException when TOSCA.meta file or manifest file is invalid + */ + Manifest getManifest(FileContentHandler handler) throws IOException; + + /** + * Determmines the type of resource that the CSAR represents + * @param handler contains csar artifacts + * @throws IOException when TOSCA.meta file or manifest file is invalid + */ + ResourceTypeEnum getResourceType(FileContentHandler handler) throws IOException; + + /** + * Determmines the type of resource that the CSAR represents + * @param manifest contains manifest content + * @throws IOException when TOSCA.meta file or manifest file is invalid + */ + ResourceTypeEnum getResourceType(Manifest manifest) throws IOException; } diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java index 6dac3c8f60..1b74b0094f 100644 --- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java +++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java @@ -23,7 +23,11 @@ package org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi; import org.apache.commons.io.IOUtils; import org.onap.sdc.tosca.parser.utils.YamlToObjectConverter; import org.openecomp.core.utilities.file.FileContentHandler; - +import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; +import org.openecomp.sdc.tosca.csar.Manifest; +import org.openecomp.sdc.tosca.csar.OnboardingToscaMetadata; +import org.openecomp.sdc.tosca.csar.SOL004ManifestOnboarding; +import org.openecomp.sdc.tosca.csar.ToscaMetadata; import java.io.IOException; import java.io.InputStream; @@ -31,12 +35,10 @@ import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; -import org.openecomp.sdc.tosca.csar.Manifest; -import org.openecomp.sdc.tosca.csar.OnboardingToscaMetadata; -import org.openecomp.sdc.tosca.csar.ToscaMetadata; - -import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CHANGE_LOG; +import static org.openecomp.sdc.tosca.csar.CSARConstants.MAIN_SERVICE_TEMPLATE_MF_FILE_NAME; +import static org.openecomp.sdc.tosca.csar.CSARConstants.MANIFEST_PNF_METADATA; import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_DEFINITIONS; +import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CHANGE_LOG; import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_MANIFEST; import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ORIG_PATH_FILE_NAME; import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_PATH_FILE_NAME; @@ -47,7 +49,7 @@ public class ETSIServiceImpl implements ETSIService { public ETSIServiceImpl() throws IOException { InputStream io = getClass().getClassLoader().getResourceAsStream("nonManoConfig.yaml"); - if(io == null){ + if (io == null) { throw new IOException("Non Mano configuration not found"); } String data = IOUtils.toString(io, StandardCharsets.UTF_8); @@ -74,14 +76,6 @@ public class ETSIServiceImpl implements ETSIService { } } - private InputStream getMetadata(FileContentHandler contentHandler) throws IOException{ - if(contentHandler.containsFile(TOSCA_META_PATH_FILE_NAME)){ - return contentHandler.getFileContent(TOSCA_META_PATH_FILE_NAME); - }else if(contentHandler.containsFile(TOSCA_META_ORIG_PATH_FILE_NAME)){ - return contentHandler.getFileContent(TOSCA_META_ORIG_PATH_FILE_NAME); - } - throw new IOException("TOSCA.meta file does not exist"); - } private void updateNonManoLocation(FileContentHandler handler, String nonManoKey, List<String> sources) { Map<String, byte[]> files = handler.getFiles(); @@ -92,7 +86,7 @@ public class ETSIServiceImpl implements ETSIService { } } - private void updateLocation(String key, String nonManoKey, Map<String, byte[]> files){ + private void updateLocation(String key, String nonManoKey, Map<String, byte[]> files) { if (nonManoKey == null || nonManoKey.isEmpty()) { return; } @@ -107,14 +101,11 @@ public class ETSIServiceImpl implements ETSIService { } } - private String getFileName(String key) { return key.substring(key.lastIndexOf('/') + 1); } - private boolean hasMetaMandatoryEntries(InputStream metadataInputStream) throws IOException { - - ToscaMetadata toscaMetadata = OnboardingToscaMetadata.parseToscaMetadataFile(metadataInputStream); + private boolean hasMetaMandatoryEntries(ToscaMetadata toscaMetadata) { Map<String, String> metaDataEntries = toscaMetadata.getMetaEntries(); return metaDataEntries.containsKey(TOSCA_META_ENTRY_DEFINITIONS) && metaDataEntries.containsKey(TOSCA_META_ETSI_ENTRY_MANIFEST) && metaDataEntries.containsKey(TOSCA_META_ETSI_ENTRY_CHANGE_LOG); @@ -123,4 +114,60 @@ public class ETSIServiceImpl implements ETSIService { private boolean isMetaFilePresent(Map<String, byte[]> handler) { return handler.containsKey(TOSCA_META_PATH_FILE_NAME) || handler.containsKey(TOSCA_META_ORIG_PATH_FILE_NAME); } + + public ResourceTypeEnum getResourceType(FileContentHandler handler) throws IOException { + ToscaMetadata metadata = getMetadata(handler); + Manifest manifest = getManifest(handler, metadata.getMetaEntries().get(TOSCA_META_ETSI_ENTRY_MANIFEST)); + return getResourceType(manifest); + } + + public ResourceTypeEnum getResourceType(Manifest manifest) { + // Valid manifest should contain whether vnf or pnf related metadata data exclusively in SOL004 standard, + // validation of manifest done during package upload stage + if (manifest != null && !manifest.getMetadata().isEmpty() + && MANIFEST_PNF_METADATA.stream().anyMatch(e -> manifest.getMetadata().containsKey(e))) { + return ResourceTypeEnum.PNF; + } + // VNF is default resource type + return ResourceTypeEnum.VF; + } + + public Manifest getManifest(FileContentHandler handler) throws IOException { + ToscaMetadata metadata = getMetadata(handler); + return getManifest(handler, metadata.getMetaEntries().get(TOSCA_META_ETSI_ENTRY_MANIFEST)); + } + + private Manifest getManifest(FileContentHandler handler, String manifestLocation) throws IOException { + try(InputStream manifestInputStream = getManifestInputStream(handler, manifestLocation)) { + Manifest onboardingManifest = new SOL004ManifestOnboarding(); + onboardingManifest.parse(manifestInputStream); + return onboardingManifest; + } + } + + private ToscaMetadata getMetadata(FileContentHandler handler) throws IOException { + ToscaMetadata metadata; + if (handler.containsFile(TOSCA_META_PATH_FILE_NAME)) { + metadata = OnboardingToscaMetadata.parseToscaMetadataFile(handler.getFileContent(TOSCA_META_PATH_FILE_NAME)); + } else if (handler.containsFile(TOSCA_META_ORIG_PATH_FILE_NAME)) { + metadata = OnboardingToscaMetadata.parseToscaMetadataFile(handler.getFileContent(TOSCA_META_ORIG_PATH_FILE_NAME)); + } else { + throw new IOException("TOSCA.meta file not found!"); + } + return metadata; + } + + private InputStream getManifestInputStream(FileContentHandler handler, String manifestLocation) throws IOException { + InputStream io; + if (manifestLocation == null || !handler.containsFile(manifestLocation)) { + io = handler.getFileContent(MAIN_SERVICE_TEMPLATE_MF_FILE_NAME); + } else { + io = handler.getFileContent(manifestLocation); + } + + if (io == null) { + throw new IOException("Manifest file not found!"); + } + return io; + } } |