diff options
Diffstat (limited to 'nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java')
-rw-r--r-- | nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java new file mode 100644 index 00000000..b8de2378 --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcPackageProvider.java @@ -0,0 +1,107 @@ +/* + * Copyright 2016-2017, Nokia Corporation + * + * 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. + */ +package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc; + +import com.google.common.io.ByteStreams; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import org.apache.http.HttpEntity; +import org.apache.http.HttpHeaders; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IPackageProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.IpMappingProvider; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; +import org.onap.vfccatalog.api.VnfpackageApi; +import org.onap.vfccatalog.model.VnfPkgDetailInfo; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Conditional; +import org.springframework.stereotype.Component; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.fatalFailure; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; +import static org.slf4j.LoggerFactory.getLogger; +import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE; + +/** + * Retrieves a package from VF-C + */ +@Component +@Conditional(value = Conditions.UseForVfc.class) +public class VfcPackageProvider implements IPackageProvider { + private static Logger logger = getLogger(VfcPackageProvider.class); + private final VfcRestApiProvider restApiProvider; + private final IpMappingProvider ipMappingProvider; + + @Autowired + VfcPackageProvider(VfcRestApiProvider restApiProvider, IpMappingProvider ipMappingProvider) { + this.restApiProvider = restApiProvider; + this.ipMappingProvider = ipMappingProvider; + } + + @Override + public String getCbamVnfdId(String csarId) { + try { + VnfpackageApi onapCatalogApi = restApiProvider.getOnapCatalogApi(); + VnfPkgDetailInfo vnfPackageDetails = onapCatalogApi.queryVnfPackage(csarId); + JsonElement vnfdModel = new JsonParser().parse(vnfPackageDetails.getPackageInfo().getVnfdModel()); + return vnfdModel.getAsJsonObject().get("metadata").getAsJsonObject().get("resourceVendorModelNumber").getAsString(); + } catch (Exception e) { + throw fatalFailure(logger, "Unable to query VNF package with " + csarId + " from VF-C", e); + } + } + + @Override + public byte[] getPackage(String csarId) { + String downloadUrl; + try { + VnfpackageApi onapCatalogApi = restApiProvider.getOnapCatalogApi(); + VnfPkgDetailInfo vnfPackageDetails = onapCatalogApi.queryVnfPackage(csarId); + downloadUrl = vnfPackageDetails.getPackageInfo().getDownloadUrl(); + String host = new URL(downloadUrl).getHost(); + if (!ipMappingProvider.mapPrivateIpToPublicIp(host).equals(host)) { + downloadUrl = downloadUrl.replaceFirst("://" + host, "://" + ipMappingProvider.mapPrivateIpToPublicIp(host)); + } + } catch (Exception e) { + throw fatalFailure(logger, "Unable to query VNF package with " + csarId + " from VF-C", e); + } + try { + return downloadCbamVnfPackage(downloadUrl); + } catch (Exception e) { + throw fatalFailure(logger, "Unable to download package from " + downloadUrl + " from VF-C", e); + } + } + + private byte[] downloadCbamVnfPackage(String downloadUri) throws IOException { + CloseableHttpClient client = systemFunctions().getHttpClient(); + HttpGet httpget = new HttpGet(downloadUri); + httpget.setHeader(HttpHeaders.ACCEPT, APPLICATION_OCTET_STREAM_VALUE); + CloseableHttpResponse response = client.execute(httpget); + HttpEntity entity = response.getEntity(); + InputStream is = entity.getContent(); + ByteArrayOutputStream cbamInZip = new ByteArrayOutputStream(); + byte[] bytes = ByteStreams.toByteArray(is); + client.close(); + return bytes; + } +} |