diff options
author | Denes Nemeth <denes.nemeth@nokia.com> | 2018-03-14 09:51:50 +0100 |
---|---|---|
committer | Denes Nemeth <denes.nemeth@nokia.com> | 2018-03-14 14:53:54 +0100 |
commit | 876a4acf6f2e8264bb82e960e9aa886799c4bdb1 (patch) | |
tree | e929d22a832b73a2345b8c8f7f8c4a06721e4731 /nokiav2/driver/src/main | |
parent | 626ebae46807adeab6d0b9d5568515f457c7ece3 (diff) |
Fix some security vulnerabilities
Change-Id: Ib1c08c4f73df8cfe42b2857ee674f102ec09c253
Signed-off-by: Denes Nemeth <denes.nemeth@nokia.com>
Issue-ID: VFC-728
Diffstat (limited to 'nokiav2/driver/src/main')
18 files changed, 336 insertions, 248 deletions
diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/NokiaSvnfmApplication.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/NokiaSvnfmApplication.java index e75159f6..6296d4b2 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/NokiaSvnfmApplication.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/NokiaSvnfmApplication.java @@ -16,9 +16,9 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia; -import org.apache.log4j.Logger; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.JobManager; +import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -28,12 +28,14 @@ import org.springframework.context.annotation.Profile; import org.springframework.context.event.ContextClosedEvent; import org.springframework.stereotype.Component; +import static org.slf4j.LoggerFactory.getLogger; + /** * Represents the spring boot application */ @SpringBootApplication public class NokiaSvnfmApplication { - private static Logger logger = Logger.getLogger(NokiaSvnfmApplication.class); + private static Logger logger = getLogger(NokiaSvnfmApplication.class); /** * Entry point for the Spring boot application diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java index a9e11653..6d569e2a 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java @@ -16,7 +16,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; -import com.nokia.cbam.lcn.v32.ApiException; import com.nokia.cbam.lcn.v32.api.SubscriptionsApi; import com.nokia.cbam.lcn.v32.model.*; import org.onap.msb.sdk.discovery.common.RouteException; @@ -121,12 +120,12 @@ public class SelfRegistrationManager { SubscriptionsApi lcnApi = cbamRestApiProvider.getCbamLcnApi(vnfmId); try { String callbackUrl = getDriverVnfmUrl() + DriverProperties.LCN_URL; - for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION)) { + for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION).blockingFirst()) { if (subscription.getCallbackUrl().equals(callbackUrl)) { lcnApi.subscriptionsSubscriptionIdDelete(subscription.getId(), NOKIA_LCN_API_VERSION); } } - } catch (ApiException e) { + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to delete CBAM LCN subscription", e); } } @@ -159,7 +158,7 @@ public class SelfRegistrationManager { logger.info("Subscribing to CBAM LCN {} with callback to {}", driverProperties.getCbamLcnUrl(), callbackUrl); SubscriptionsApi lcnApi = cbamRestApiProvider.getCbamLcnApi(vnfmId); try { - for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION)) { + for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION).blockingFirst()) { if (subscription.getCallbackUrl().equals(callbackUrl)) { return; } @@ -177,7 +176,7 @@ public class SelfRegistrationManager { subscriptionAuthentication.setType(NONE); request.setAuthentication(subscriptionAuthentication); lcnApi.subscriptionsPost(request, NOKIA_LCN_API_VERSION); - } catch (ApiException e) { + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to subscribe to CBAM LCN", e); } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java index ff2bde8a..aad90eac 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AAINotificationProcessor.java @@ -97,13 +97,11 @@ public class AAINotificationProcessor implements INotificationSender { for (ReportedAffectedCp affectedCp : affectedConnectionPoints.get().getPost()) { if (!isEmpty(affectedCp.getServerProviderId())) { lInterfaceManager.update(receivedNotification.getVnfInstanceId(), vimId, affectedCp, inMaintenance); - } - else{ + } else { logger.warn("The changed {} connection point is not linked to any server", affectedCp.getCpId()); } } - } - else{ + } else { logger.warn("The changed connection points are not present in VNF with {} identifier", receivedNotification.getVnfInstanceId()); } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java index 959177c1..2b9b3882 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java @@ -15,7 +15,6 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; -import com.nokia.cbam.lcm.v32.ApiException; import com.nokia.cbam.lcm.v32.model.VnfInfo; import org.onap.aai.domain.yang.v11.GenericVnf; import org.onap.aai.domain.yang.v11.Relationship; @@ -84,9 +83,9 @@ class GenericVnfManager extends AbstractManager { private void updateFields(GenericVnf vnf, String vnfId, boolean inMaintenance) { try { - VnfInfo vnfInfo = cbamRestApiProvider.getCbamLcmApi(driverProperties.getVnfmId()).vnfsVnfInstanceIdGet(vnfId, CbamRestApiProvider.NOKIA_LCM_API_VERSION); + VnfInfo vnfInfo = cbamRestApiProvider.getCbamLcmApi(driverProperties.getVnfmId()).vnfsVnfInstanceIdGet(vnfId, CbamRestApiProvider.NOKIA_LCM_API_VERSION).blockingFirst(); vnf.setVnfName(vnfInfo.getName()); - } catch (ApiException e) { + } catch (RuntimeException e) { throw buildFatalFailure(logger, "Unable to query VNF with " + vnfId + " identifier from CBAM", e); } vnf.setVnfId(vnfId); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java index 976e283d..8a4dbdd1 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VnfcManager.java @@ -16,7 +16,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; import com.google.common.base.Splitter; -import com.nokia.cbam.lcm.v32.model.AffectedVnfc; import org.onap.aai.domain.yang.v11.RelationshipList; import org.onap.aai.domain.yang.v11.Vnfc; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; @@ -50,7 +49,7 @@ public class VnfcManager extends AbstractManager { return format("/vnfcs/vnfc/%s", buildId(vnfId, cbamVnfcId)); } - public static String getCbamVnfcId(String vnfcId){ + public static String getCbamVnfcId(String vnfcId) { String vnfId = Splitter.on(CbamUtils.SEPARATOR).split(vnfcId).iterator().next(); return vnfcId.replaceFirst(vnfId + SEPARATOR, ""); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java index 416367d7..83b10872 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcExternalSystemInfoProvider.java @@ -17,7 +17,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.GenericExternalSystemInfoProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; -import org.onap.vnfmdriver.ApiException; import org.onap.vnfmdriver.model.VimInfo; import org.onap.vnfmdriver.model.VnfmInfo; import org.slf4j.Logger; @@ -47,8 +46,8 @@ public class VfcExternalSystemInfoProvider extends GenericExternalSystemInfoProv @Override public VnfmInfo queryVnfmInfoFromSource(String vnfmId) { try { - return vfcRestApiProvider.getNsLcmApi().queryVnfmInfo(vnfmId); - } catch (ApiException e) { + return vfcRestApiProvider.getNsLcmApi().queryVnfmInfo(vnfmId).execute().body(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to query VNFM from VF-C with " + vnfmId + " identifier", e); } } @@ -56,8 +55,8 @@ public class VfcExternalSystemInfoProvider extends GenericExternalSystemInfoProv @Override public VimInfo getVimInfo(String vimId) { try { - return vfcRestApiProvider.getNsLcmApi().queryVIMInfo(vimId); - } catch (org.onap.vnfmdriver.ApiException e) { + return vfcRestApiProvider.getNsLcmApi().queryVIMInfo(vimId).execute().body(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to query VIM from VF-C with " + vimId + " identifier", e); } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java index 1d9ef8dc..03169612 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcGrantManager.java @@ -21,7 +21,6 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.nokia.cbam.lcm.v32.ApiException; import com.nokia.cbam.lcm.v32.model.VnfInfo; import com.nokia.cbam.lcm.v32.model.VnfcResourceInfo; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager; @@ -77,23 +76,25 @@ public class VfcGrantManager implements IGrantManager { @Override public void requestGrantForScale(String vnfmId, String vnfId, String vimId, String onapCsarId, VnfScaleRequest request, String jobId) { + String cbamVnfdId; try { - OperationType operationType = ScaleDirection.IN.equals(request.getType()) ? OperationType.SCALEIN : OperationType.SCALEOUT; - GrantVNFRequest grantRequest = buildGrantRequest(vnfmId, vimId, onapCsarId, jobId, operationType); - com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION); - String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, vnf.getVnfdId()); - Set<ResourceChange> resourceChanges = calculateResourceChangeDuringScaling(vnfdContent, request.getAspectId(), Integer.parseInt(request.getNumberOfSteps())); - if (request.getType() == ScaleDirection.IN) { - grantRequest.getRemoveResource().addAll(resourceChanges); - - } else { - grantRequest.getAddResource().addAll(resourceChanges); - } - grantRequest.setVnfInstanceId(vnfId); - requestGrant(grantRequest); - } catch (ApiException e) { + com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst(); + cbamVnfdId = vnf.getVnfdId(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to query VNF " + vnfId, e); } + OperationType operationType = ScaleDirection.IN.equals(request.getType()) ? OperationType.SCALEIN : OperationType.SCALEOUT; + GrantVNFRequest grantRequest = buildGrantRequest(vnfmId, vimId, onapCsarId, jobId, operationType); + String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, cbamVnfdId); + Set<ResourceChange> resourceChanges = calculateResourceChangeDuringScaling(vnfdContent, request.getAspectId(), Integer.parseInt(request.getNumberOfSteps())); + if (request.getType() == ScaleDirection.IN) { + grantRequest.getRemoveResource().addAll(resourceChanges); + + } else { + grantRequest.getAddResource().addAll(resourceChanges); + } + grantRequest.setVnfInstanceId(vnfId); + requestGrant(grantRequest); } @Override @@ -157,8 +158,8 @@ public class VfcGrantManager implements IGrantManager { private GrantVNFResponseVim requestGrant(GrantVNFRequest grantRequest) { try { - return vfcRestApiProvider.getNsLcmApi().grantvnf(grantRequest).getVim(); - } catch (org.onap.vnfmdriver.ApiException e) { + return vfcRestApiProvider.getNsLcmApi().grantvnf(grantRequest).execute().body().getVim(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to request grant", e); } } 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 index 71880d0b..5a3e960f 100644 --- 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 @@ -60,22 +60,23 @@ public class VfcPackageProvider implements IPackageProvider { @Override public String getCbamVnfdId(String csarId) { + VnfPkgDetailInfo vnfPackageDetails; 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(); + VnfpackageApi onapCatalogApi = restApiProvider.getVfcCatalogApi(); + vnfPackageDetails = onapCatalogApi.queryVnfPackage(csarId).execute().body(); } catch (Exception e) { throw buildFatalFailure(logger, "Unable to query VNF package with " + csarId, e); } + JsonElement vnfdModel = new JsonParser().parse(vnfPackageDetails.getPackageInfo().getVnfdModel()); + return vnfdModel.getAsJsonObject().get("metadata").getAsJsonObject().get("resourceVendorModelNumber").getAsString(); } @Override public byte[] getPackage(String csarId) { String downloadUrl; try { - VnfpackageApi onapCatalogApi = restApiProvider.getOnapCatalogApi(); - VnfPkgDetailInfo vnfPackageDetails = onapCatalogApi.queryVnfPackage(csarId); + VnfpackageApi onapCatalogApi = restApiProvider.getVfcCatalogApi(); + VnfPkgDetailInfo vnfPackageDetails = onapCatalogApi.queryVnfPackage(csarId).execute().body(); String urlFromVfc = vnfPackageDetails.getPackageInfo().getDownloadUrl(); String host = new URL(urlFromVfc).getHost(); downloadUrl = urlFromVfc.replaceFirst("://" + host, "://" + ipMappingProvider.mapPrivateIpToPublicIp(host)); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java index baa61f75..c2473aae 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcRestApiProvider.java @@ -15,9 +15,11 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc; +import com.google.common.annotations.VisibleForTesting; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.MsbApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfccatalog.api.VnfpackageApi; +import org.onap.vnfmdriver.ApiClient; import org.onap.vnfmdriver.api.NslcmApi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; @@ -44,19 +46,36 @@ public class VfcRestApiProvider { * @return API to access VF-C for granting & LCN API */ public NslcmApi getNsLcmApi() { - org.onap.vnfmdriver.ApiClient apiClient = new org.onap.vnfmdriver.ApiClient(); + return buildNslcmApiClient().createService(NslcmApi.class); + } + + @VisibleForTesting + ApiClient buildNslcmApiClient() { + ApiClient apiClient = new ApiClient(); String correctedUrl = fixIncorrectUrl(); - apiClient.setBasePath(correctedUrl); - return new NslcmApi(apiClient); + if (!correctedUrl.endsWith("/")) { + correctedUrl = correctedUrl + "/"; + } + apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl(correctedUrl)); + return apiClient; } /** * @return API to access VF-C catalog API */ - public VnfpackageApi getOnapCatalogApi() { + public VnfpackageApi getVfcCatalogApi() { + return buildCatalogApiClient().createService(VnfpackageApi.class); + } + + @VisibleForTesting + org.onap.vfccatalog.ApiClient buildCatalogApiClient() { org.onap.vfccatalog.ApiClient vfcApiClient = new org.onap.vfccatalog.ApiClient(); - vfcApiClient.setBasePath(msbApiProvider.getMicroServiceUrl(NSCATALOG_SERVICE_NAME, NSCATALOG_API_VERSION)); - return new VnfpackageApi(vfcApiClient); + String microServiceUrl = msbApiProvider.getMicroServiceUrl(NSCATALOG_SERVICE_NAME, NSCATALOG_API_VERSION); + if (!microServiceUrl.endsWith("/")) { + microServiceUrl = microServiceUrl + "/"; + } + vfcApiClient.setAdapterBuilder(vfcApiClient.getAdapterBuilder().baseUrl(microServiceUrl)); + return vfcApiClient; } /** diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcmApi.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcmApi.java index 7f63a1a4..5a7bd749 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcmApi.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcmApi.java @@ -28,8 +28,6 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletResponse; -import java.util.Optional; - import static java.util.Optional.empty; import static org.apache.http.HttpStatus.SC_CREATED; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties.BASE_URL; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/RealConfig.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/RealConfig.java index 26a3156f..3ed94c94 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/RealConfig.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/RealConfig.java @@ -15,9 +15,7 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring; -import com.nokia.cbam.lcm.v32.ApiClient; import org.springframework.boot.autoconfigure.web.HttpMessageConverters; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.GsonHttpMessageConverter; @@ -38,11 +36,11 @@ public class RealConfig { * * @return the message converter */ - @Bean + //FIXME? @Bean public HttpMessageConverters customConverters() { Collection<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(); - gsonHttpMessageConverter.setGson(new ApiClient().getJSON().getGson()); + //FIXME gsonHttpMessageConverter.setGson(new ApiClient().getAdapterBuilder().build()..getJSON().getGson()); messageConverters.add(gsonHttpMessageConverter); return new HttpMessageConverters(true, messageConverters); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CatalogManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CatalogManager.java index 6a35d8e2..a7cabd52 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CatalogManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CatalogManager.java @@ -17,7 +17,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; import com.google.common.io.ByteStreams; -import com.nokia.cbam.catalog.v1.ApiException; import com.nokia.cbam.catalog.v1.api.DefaultApi; import com.nokia.cbam.catalog.v1.model.CatalogAdapterVnfpackage; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IPackageProvider; @@ -25,8 +24,10 @@ import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.io.*; -import java.nio.file.Path; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.HashSet; import java.util.NoSuchElementException; import java.util.Set; @@ -35,8 +36,9 @@ import java.util.zip.ZipInputStream; import static com.google.common.base.Splitter.on; import static com.google.common.collect.Iterables.filter; -import static java.nio.file.Files.createTempFile; -import static java.nio.file.Files.write; +import static javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM; +import static okhttp3.MediaType.parse; +import static okhttp3.RequestBody.create; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.slf4j.LoggerFactory.getLogger; @@ -113,11 +115,8 @@ public class CatalogManager { DefaultApi cbamCatalogApi = cbamRestApiProvider.getCbamCatalogApi(vnfmId); if (!isPackageReplicated(cbamVnfdId, cbamCatalogApi)) { try { - Path tempFile = createTempFile("cbam", "zip"); ByteArrayOutputStream cbamPackage = getFileInZip(new ByteArrayInputStream(packageProvider.getPackage(csarId)), CBAM_PACKAGE_NAME_IN_ZIP); - write(tempFile, cbamPackage.toByteArray()); - //FIXME delete file - return cbamCatalogApi.create(tempFile.toFile()); + return cbamCatalogApi.create(create(parse(APPLICATION_OCTET_STREAM), cbamPackage.toByteArray())).execute().body(); } catch (Exception e) { logger.debug("Probably concurrent package uploads", e); //retest if the VNF package exists in CBAM. It might happen that an other operation @@ -142,9 +141,9 @@ public class CatalogManager { */ public String getCbamVnfdContent(String vnfmId, String vnfdId) { try { - File content = cbamRestApiProvider.getCbamCatalogApi(vnfmId).content(vnfdId); - String vnfdPath = getVnfdLocation(new FileInputStream(content)); - return new String(getFileInZip(new FileInputStream(content), vnfdPath).toByteArray()); + byte[] vnfdContent = cbamRestApiProvider.getCbamCatalogApi(vnfmId).content(vnfdId).execute().body().bytes(); + String vnfdPath = getVnfdLocation(new ByteArrayInputStream(vnfdContent)); + return new String(getFileInZip(new ByteArrayInputStream(vnfdContent), vnfdPath).toByteArray()); } catch (Exception e) { throw buildFatalFailure(logger, "Unable to get package with (" + vnfdId + ")", e); } @@ -160,14 +159,14 @@ public class CatalogManager { private CatalogAdapterVnfpackage queryPackageFromCBAM(String cbamVnfdId, DefaultApi cbamCatalogApi) { try { - return cbamCatalogApi.getById(cbamVnfdId); - } catch (ApiException e) { + return cbamCatalogApi.getById(cbamVnfdId).execute().body(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to query VNF package with " + cbamVnfdId + " from CBAM", e); } } - private boolean isPackageReplicatedToCbam(String cbamVnfdId, DefaultApi cbamCatalogApi) throws ApiException { - for (CatalogAdapterVnfpackage vnfPackage : cbamCatalogApi.list()) { + private boolean isPackageReplicatedToCbam(String cbamVnfdId, DefaultApi cbamCatalogApi) throws IOException { + for (CatalogAdapterVnfpackage vnfPackage : cbamCatalogApi.list().execute().body()) { if (vnfPackage.getVnfdId().equals(cbamVnfdId)) { return true; } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamRestApiProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamRestApiProvider.java index 5fdc919a..de850da6 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamRestApiProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamRestApiProvider.java @@ -15,7 +15,7 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; -import com.google.common.io.BaseEncoding; +import com.google.common.annotations.VisibleForTesting; import com.nokia.cbam.catalog.v1.api.DefaultApi; import com.nokia.cbam.lcm.v32.ApiClient; import com.nokia.cbam.lcm.v32.api.OperationExecutionsApi; @@ -27,8 +27,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.io.ByteArrayInputStream; - /** * Responsible for providing client to access CBAM REST API */ @@ -36,20 +34,24 @@ import java.io.ByteArrayInputStream; public class CbamRestApiProvider { public static final String NOKIA_LCN_API_VERSION = "3.2"; public static final String NOKIA_LCM_API_VERSION = "3.2"; + public static final String AUTH_NAME = "test"; private final DriverProperties driverProperties; private final CbamTokenProvider tokenProvider; private final VnfmInfoProvider vnfmInfoProvider; - - @Value("${trustedCertificates}") - private String trustedCertificates; - @Value("${skipCertificateVerification}") - private boolean skipCertificateVerification; + private final CbamSecurityProvider cbamSecurityProvider; + @Value("${cbamKeyCloakBaseUrl}") + private String cbamKeyCloakBaseUrl; + @Value("${cbamUsername}") + private String username; + @Value("${cbamPassword}") + private String password; @Autowired - public CbamRestApiProvider(DriverProperties driverProperties, CbamTokenProvider cbamTokenProvider, VnfmInfoProvider vnfmInfoProvider) { + public CbamRestApiProvider(DriverProperties driverProperties, CbamTokenProvider cbamTokenProvider, VnfmInfoProvider vnfmInfoProvider, CbamSecurityProvider cbamSecurityProvider) { this.driverProperties = driverProperties; this.tokenProvider = cbamTokenProvider; this.vnfmInfoProvider = vnfmInfoProvider; + this.cbamSecurityProvider = cbamSecurityProvider; } /** @@ -57,7 +59,7 @@ public class CbamRestApiProvider { * @return API to access CBAM LCM API */ public VnfsApi getCbamLcmApi(String vnfmId) { - return new VnfsApi(getLcmApiClient(vnfmId)); + return buildLcmApiClient(vnfmId).createService(VnfsApi.class); } /** @@ -65,7 +67,7 @@ public class CbamRestApiProvider { * @return API to access the operation executions */ public OperationExecutionsApi getCbamOperationExecutionApi(String vnfmId) { - return new OperationExecutionsApi(getLcmApiClient(vnfmId)); + return buildLcmApiClient(vnfmId).createService(OperationExecutionsApi.class); } /** @@ -73,15 +75,7 @@ public class CbamRestApiProvider { * @return API to access CBAM LCN subscription API */ public SubscriptionsApi getCbamLcnApi(String vnfmId) { - com.nokia.cbam.lcn.v32.ApiClient apiClient = new com.nokia.cbam.lcn.v32.ApiClient(); - if (!skipCertificateVerification) { - apiClient.setSslCaCert(new ByteArrayInputStream(BaseEncoding.base64().decode(trustedCertificates))); - } else { - apiClient.setVerifyingSsl(false); - } - apiClient.setBasePath(driverProperties.getCbamLcnUrl()); - apiClient.setAccessToken(tokenProvider.getToken(vnfmId)); - return new SubscriptionsApi(apiClient); + return buildLcnApiClient(vnfmId).createService(SubscriptionsApi.class); } /** @@ -89,27 +83,37 @@ public class CbamRestApiProvider { * @return API to access CBAM catalog API */ public DefaultApi getCbamCatalogApi(String vnfmId) { + return buildCatalogApiClient(vnfmId).createService(DefaultApi.class); + } + + @VisibleForTesting + com.nokia.cbam.lcn.v32.ApiClient buildLcnApiClient(String vnfmId) { + com.nokia.cbam.lcn.v32.ApiClient apiClient = new com.nokia.cbam.lcn.v32.ApiClient(); + apiClient.getOkBuilder().sslSocketFactory(cbamSecurityProvider.buildSSLSocketFactory(), cbamSecurityProvider.buildTrustManager()); + apiClient.getOkBuilder().hostnameVerifier(cbamSecurityProvider.buildHostnameVerifier()); + apiClient.addAuthorization(AUTH_NAME, tokenProvider.getToken(vnfmId)); + apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl(driverProperties.getCbamLcnUrl())); + return apiClient; + } + + @VisibleForTesting + com.nokia.cbam.catalog.v1.ApiClient buildCatalogApiClient(String vnfmId) { com.nokia.cbam.catalog.v1.ApiClient apiClient = new com.nokia.cbam.catalog.v1.ApiClient(); - if (!skipCertificateVerification) { - apiClient.setSslCaCert(new ByteArrayInputStream(BaseEncoding.base64().decode(trustedCertificates))); - } else { - apiClient.setVerifyingSsl(false); - } - apiClient.setBasePath(driverProperties.getCbamCatalogUrl()); - apiClient.setAccessToken(tokenProvider.getToken(vnfmId)); - return new DefaultApi(apiClient); + apiClient.getOkBuilder().sslSocketFactory(cbamSecurityProvider.buildSSLSocketFactory(), cbamSecurityProvider.buildTrustManager()); + apiClient.getOkBuilder().hostnameVerifier(cbamSecurityProvider.buildHostnameVerifier()); + apiClient.addAuthorization(AUTH_NAME, tokenProvider.getToken(vnfmId)); + apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl(driverProperties.getCbamCatalogUrl())); + return apiClient; } - private ApiClient getLcmApiClient(String vnfmId) { + @VisibleForTesting + ApiClient buildLcmApiClient(String vnfmId) { VnfmInfo vnfmInfo = vnfmInfoProvider.getVnfmInfo(vnfmId); ApiClient apiClient = new ApiClient(); - if (!skipCertificateVerification) { - apiClient.setSslCaCert(new ByteArrayInputStream(BaseEncoding.base64().decode(trustedCertificates))); - } else { - apiClient.setVerifyingSsl(false); - } - apiClient.setAccessToken(tokenProvider.getToken(vnfmId)); - apiClient.setBasePath(vnfmInfo.getUrl()); + apiClient.getOkBuilder().sslSocketFactory(cbamSecurityProvider.buildSSLSocketFactory(), cbamSecurityProvider.buildTrustManager()); + apiClient.getOkBuilder().hostnameVerifier(cbamSecurityProvider.buildHostnameVerifier()); + apiClient.addAuthorization(AUTH_NAME, tokenProvider.getToken(vnfmId)); + apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl(vnfmInfo.getUrl())); return apiClient; } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamSecurityProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamSecurityProvider.java new file mode 100644 index 00000000..c2358cf1 --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamSecurityProvider.java @@ -0,0 +1,117 @@ +/* + * 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.vnfm; + +import com.google.common.base.Joiner; +import com.google.common.io.BaseEncoding; +import org.apache.http.conn.ssl.DefaultHostnameVerifier; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.StoreLoader; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import javax.net.ssl.*; +import java.nio.charset.StandardCharsets; +import java.security.KeyStore; +import java.security.SecureRandom; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Set; + +import static java.util.UUID.randomUUID; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; +import static org.slf4j.LoggerFactory.getLogger; + +/** + * Responsible for providing a token to access CBAM APIs + */ +@Component +public class CbamSecurityProvider { + private static Logger logger = getLogger(CbamSecurityProvider.class); + @Value("${trustedCertificates}") + private String trustedCertificates; + @Value("${skipCertificateVerification}") + private boolean skipCertificateVerification; + @Value("${skipHostnameVerification}") + private boolean skipHostnameVerification; + + protected HostnameVerifier buildHostnameVerifier() { + if (skipHostnameVerification) { + return (hostname, session) -> true; + } else { + return new DefaultHostnameVerifier(); + } + } + + protected SSLSocketFactory buildSSLSocketFactory() { + try { + TrustManager[] trustManagers = new X509TrustManager[]{buildTrustManager()}; + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, trustManagers, new SecureRandom()); + return sslContext.getSocketFactory(); + } catch (Exception e) { + throw buildFatalFailure(logger, "Unable to create SSL socket factory", e); + } + } + + protected X509TrustManager buildTrustManager() { + if (skipCertificateVerification) { + return new AllTrustedTrustManager(); + } else { + if (StringUtils.isEmpty(trustedCertificates)) { + throw buildFatalFailure(logger, "If the skipCertificateVerification is set to false (default) the trustedCertificates can not be empty"); + } + Set<String> trustedPems; + String content; + try { + content = new String(BaseEncoding.base64().decode(trustedCertificates), StandardCharsets.UTF_8); + trustedPems = StoreLoader.getCertifacates(content); + } catch (Exception e) { + throw buildFatalFailure(logger, "The trustedCertificates must be a base64 encoded collection of PEM certificates", e); + } + if (trustedPems.size() == 0) { + throw buildFatalFailure(logger, "No certificate can be extracted from " + content); + } + try { + KeyStore keyStore = StoreLoader.loadStore(Joiner.on("\n").join(trustedPems), randomUUID().toString(), randomUUID().toString()); + TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init(keyStore); + return (X509TrustManager) trustManagerFactory.getTrustManagers()[0]; + } catch (Exception e) { + throw buildFatalFailure(logger, "Unable to create keystore", e); + } + } + } + + private static class AllTrustedTrustManager implements X509TrustManager { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + //no need to check certificates if everything is trusted + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + //no need to check certificates if everything is trusted + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + } + +} diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamTokenProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamTokenProvider.java index a8c7ca04..837a25e5 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamTokenProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/CbamTokenProvider.java @@ -16,32 +16,21 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Joiner; -import com.google.common.io.BaseEncoding; import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; import okhttp3.*; -import org.apache.http.conn.ssl.DefaultHostnameVerifier; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VnfmInfoProvider; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.StoreLoader; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.UserVisibleError; import org.onap.vnfmdriver.model.VnfmInfo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; -import javax.net.ssl.*; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSocketFactory; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.security.*; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Set; -import static java.util.UUID.randomUUID; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.slf4j.LoggerFactory.getLogger; import static org.springframework.http.HttpHeaders.CONTENT_TYPE; @@ -54,11 +43,11 @@ import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VAL //even if the value for grant type an user password is the same they do not mean the same thing //the duplication of this is intentional @SuppressWarnings("squid:S1192") -public class CbamTokenProvider { +public class CbamTokenProvider extends CbamSecurityProvider { public static final int MAX_RETRY_COUNT = 5; public static final String GRANT_TYPE = "password"; public static final String CLIENT_SECRET = "password"; - private static final String CBAM_TOKEN_URL = "/realms/cbam/protocol/openid-connect/token"; + private static final String CBAM_TOKEN_URL = "realms/cbam/protocol/openid-connect/token"; private static Logger logger = getLogger(CbamTokenProvider.class); private final VnfmInfoProvider vnfmInfoProvider; @Value("${cbamKeyCloakBaseUrl}") @@ -67,12 +56,6 @@ public class CbamTokenProvider { private String username; @Value("${cbamPassword}") private String password; - @Value("${trustedCertificates}") - private String trustedCertificates; - @Value("${skipCertificateVerification}") - private boolean skipCertificateVerification; - @Value("${skipHostnameVerification}") - private boolean skipHostnameVerification; private volatile CurrentToken token; @Autowired @@ -83,9 +66,9 @@ public class CbamTokenProvider { /** * @return the token to access CBAM APIs (ex. 123456) */ - public String getToken(String vnfmId) { + public Interceptor getToken(String vnfmId) { VnfmInfo vnfmInfo = vnfmInfoProvider.getVnfmInfo(vnfmId); - return getToken(vnfmInfo.getUserName(), vnfmInfo.getPassword()); + return new OauthInterceptor(getToken(vnfmInfo.getUserName(), vnfmInfo.getPassword())); } private String getToken(String clientId, String clientSecret) { @@ -155,45 +138,20 @@ public class CbamTokenProvider { return SystemFunctions.systemFunctions().currentTimeMillis() + token.expiresIn * (1000 / 2); } - private HostnameVerifier buildHostnameVerifier() { - if (skipHostnameVerification) { - return (hostname, session) -> true; - } else { - return new DefaultHostnameVerifier(); - } - } + private static class OauthInterceptor implements Interceptor { + private final String token; - @VisibleForTesting - SSLSocketFactory buildSSLSocketFactory() { - try { - TrustManager[] trustManagers = buildTrustManager(); - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustManagers, new SecureRandom()); - return sslContext.getSocketFactory(); - } catch (GeneralSecurityException e) { - throw buildFatalFailure(logger, "Unable to create SSL socket factory", e); + OauthInterceptor(String token) { + this.token = token; } - } - - @VisibleForTesting - TrustManager[] buildTrustManager() throws KeyStoreException, NoSuchAlgorithmException { - if (skipCertificateVerification) { - return new TrustManager[]{new AllTrustedTrustManager()}; - } else { - if (StringUtils.isEmpty(trustedCertificates)) { - throw new IllegalArgumentException("If the skipCertificateVerification is set to false (default) the trustedCertificates can not be empty"); - } - Set<String> trustedPems; - try { - trustedPems = StoreLoader.getCertifacates(new String(BaseEncoding.base64().decode(trustedCertificates), StandardCharsets.UTF_8)); - } catch (Exception e) { - throw new UserVisibleError("The trustedCertificates must be a base64 encoded collection of PEM certificates", e); - } - KeyStore keyStore = StoreLoader.loadStore(Joiner.on("\n").join(trustedPems), randomUUID().toString(), randomUUID().toString()); - TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - trustManagerFactory.init(keyStore); - return trustManagerFactory.getTrustManagers(); + @Override + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Request.Builder builder = request.newBuilder(); + builder.addHeader("Authorization", "Bearer " + token); + Request request1 = builder.build(); + return chain.proceed(request1); } } @@ -207,23 +165,6 @@ public class CbamTokenProvider { } } - static class AllTrustedTrustManager implements X509TrustManager { - @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { - //no need to check certificates if everything is trusted - } - - @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { - //no need to check certificates if everything is trusted - } - - @Override - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - } - /** * Represents the token received from CBAM */ diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java index 94cb404c..085231f6 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java @@ -19,7 +19,6 @@ import com.google.common.collect.Ordering; import com.google.common.collect.Sets; import com.google.gson.Gson; import com.google.gson.JsonElement; -import com.nokia.cbam.lcm.v32.ApiException; import com.nokia.cbam.lcm.v32.api.OperationExecutionsApi; import com.nokia.cbam.lcm.v32.api.VnfsApi; import com.nokia.cbam.lcm.v32.model.OperationExecution; @@ -285,12 +284,13 @@ public class JobManager { } private boolean isCurrentOperationTriggeredByJob(String jobId, OperationExecutionsApi cbamOperationExecutionApi, OperationExecution operationExecution) { + try { - Object operationParams = cbamOperationExecutionApi.operationExecutionsOperationExecutionIdOperationParamsGet(operationExecution.getId(), NOKIA_LCM_API_VERSION); + Object operationParams = cbamOperationExecutionApi.operationExecutionsOperationExecutionIdOperationParamsGet(operationExecution.getId(), NOKIA_LCM_API_VERSION).blockingFirst(); if (extractOnapJobId(operationParams).equals(jobId)) { return true; } - } catch (ApiException e) { + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to retrieve operation parameters", e); } return false; @@ -301,7 +301,7 @@ public class JobManager { //test if the VNF exists (required to be able to distingush between failed request ) VnfsApi cbamLcmApi = cbamRestApiProvider.getCbamLcmApi(vnfmId); logger.debug("Listing VNFs"); - List<VnfInfo> vnfs = cbamLcmApi.vnfsGet(NOKIA_LCM_API_VERSION); + List<VnfInfo> vnfs = cbamLcmApi.vnfsGet(NOKIA_LCM_API_VERSION).blockingSingle(); com.google.common.base.Optional<VnfInfo> vnf = tryFind(vnfs, vnfInfo -> vnfId.equals(vnfInfo.getId())); if (!vnf.isPresent()) { logger.debug("VNF with {} identifier is missing", vnfId); @@ -309,9 +309,9 @@ public class JobManager { } else { logger.debug("VNF with {} identifier still exists", vnfId); //query the VNF again to get operation execution result - return of(cbamLcmApi.vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION)); + return of(cbamLcmApi.vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst()); } - } catch (ApiException e) { + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to retrieve VNF", e); } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java index 79e9487d..d543f3ce 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java @@ -21,7 +21,6 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.nokia.cbam.catalog.v1.model.CatalogAdapterVnfpackage; -import com.nokia.cbam.lcm.v32.ApiException; import com.nokia.cbam.lcm.v32.model.*; import com.nokia.cbam.lcm.v32.model.ScaleDirection; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager; @@ -127,10 +126,10 @@ public class LifecycleManager { * <li>terminate & delete VNF if error occurs after instantiation</li> * </ul> * - * @param vnfmId the identifier of the VNFM - * @param csarId the identifier of the VNF package - * @param vnfName the name of the VNF - * @param description the description of the VNF + * @param vnfmId the identifier of the VNFM + * @param csarId the identifier of the VNF package + * @param vnfName the name of the VNF + * @param description the description of the VNF * @return the VNF creation result */ public VnfCreationResult create(String vnfmId, String csarId, String vnfName, String description) { @@ -141,7 +140,7 @@ public class LifecycleManager { vnfCreateRequest.setVnfdId(cbamPackage.getVnfdId()); vnfCreateRequest.setName(vnfName); vnfCreateRequest.setDescription(description); - com.nokia.cbam.lcm.v32.model.VnfInfo vnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsPost(vnfCreateRequest, NOKIA_LCM_API_VERSION); + com.nokia.cbam.lcm.v32.model.VnfInfo vnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsPost(vnfCreateRequest, NOKIA_LCM_API_VERSION).blockingFirst(); addVnfdIdToVnfModifyableAttributeExtensions(vnfmId, vnfInfo.getId(), csarId); return new VnfCreationResult(vnfInfo, cbamPackage.getVnfdId()); } catch (Exception e) { @@ -209,7 +208,7 @@ public class LifecycleManager { return instantiate(vnfmId, request, httpResponse, additionalParameters, creationResult.vnfInfo.getId(), creationResult.vnfdId); } - private void instantiateVnf(String vnfmId, VnfInstantiateRequest request, AdditionalParameters additionalParameters, String vnfdId, String vnfId, String vimId, JobInfo jobInfo) throws ApiException { + private void instantiateVnf(String vnfmId, VnfInstantiateRequest request, AdditionalParameters additionalParameters, String vnfdId, String vnfId, String vimId, JobInfo jobInfo) { String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, vnfdId); GrantVNFResponseVim vim = grantManager.requestGrantForInstantiate(vnfmId, vnfId, vimId, request.getVnfPackageId(), additionalParameters.getInstantiationLevel(), vnfdContent, jobInfo.getJobId()); if (vim.getVimId() == null) { @@ -238,7 +237,7 @@ public class LifecycleManager { logger.warn("No additional parameters were specified for the operation"); } instantiationRequest.setAdditionalParams(root); - OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdInstantiatePost(vnfId, instantiationRequest, NOKIA_LCM_API_VERSION); + OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdInstantiatePost(vnfId, instantiationRequest, NOKIA_LCM_API_VERSION).blockingFirst(); waitForOperationToFinish(vnfmId, vnfId, operationExecution.getId()); } @@ -281,11 +280,11 @@ public class LifecycleManager { return childElement(deploymentFlavorProperties, "flavour_id").getAsString(); } - private Set<String> getAcceptableOperationParameters(String vnfdContent, String categroryOfOperation, String operationName) { + private Set<Map.Entry<String, JsonElement>> getAcceptableOperationParameters(String vnfdContent, String categroryOfOperation, String operationName) { JsonObject root = new Gson().toJsonTree(new Yaml().load(vnfdContent)).getAsJsonObject(); JsonObject interfaces = child(child(child(root, "topology_template"), "substitution_mappings"), "interfaces"); JsonObject additionalParameters = child(child(child(child(interfaces, categroryOfOperation), operationName), "inputs"), "additional_parameters"); - return additionalParameters.keySet(); + return additionalParameters.entrySet(); } private void addExternalLinksToRequest(List<ExtVirtualLinkInfo> extVirtualLinks, AdditionalParameters additionalParameters, InstantiateVnfRequest instantiationRequest, String vimId) { @@ -316,9 +315,9 @@ public class LifecycleManager { request.getExtensions().add(externalVnfmIdProperty); request.setVnfConfigurableProperties(null); try { - OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdPatch(vnfId, request, NOKIA_LCM_API_VERSION); + OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdPatch(vnfId, request, NOKIA_LCM_API_VERSION).blockingFirst(); waitForOperationToFinish(vnfmId, vnfId, operationExecution.getId()); - } catch (ApiException e) { + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to set the " + ONAP_CSAR_ID + " property on the VNF", e); } } @@ -428,7 +427,7 @@ public class LifecycleManager { logOperationInput(vnfId, "termination", request); return scheduleExecution(vnfId, httpResponse, "terminate", jobInfo -> { TerminateVnfRequest cbamRequest = new TerminateVnfRequest(); - cbamRequest.setAdditionalParams(jobInfo); + //cbamRequest.setAdditionalParams(jobInfo); if (request.getTerminationType() == null) { cbamRequest.setTerminationType(TerminationType.FORCEFUL); } else { @@ -439,7 +438,7 @@ public class LifecycleManager { cbamRequest.setTerminationType(TerminationType.FORCEFUL); } } - com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION); + com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst(); if (vnf.getInstantiationState() == INSTANTIATED) { terminateVnf(vnfmId, vnfId, jobInfo, cbamRequest, vnf); } else { @@ -448,10 +447,10 @@ public class LifecycleManager { }); } - private void terminateVnf(String vnfmId, String vnfId, JobInfo jobInfo, TerminateVnfRequest cbamRequest, com.nokia.cbam.lcm.v32.model.VnfInfo vnf) throws ApiException { + private void terminateVnf(String vnfmId, String vnfId, JobInfo jobInfo, TerminateVnfRequest cbamRequest, com.nokia.cbam.lcm.v32.model.VnfInfo vnf) { String vimId = getVimIdFromInstantiationRequest(vnfmId, vnf); grantManager.requestGrantForTerminate(vnfmId, vnfId, vimId, getVnfdIdFromModifyableAttributes(vnf), vnf, jobInfo.getJobId()); - OperationExecution terminationOperation = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdTerminatePost(vnfId, cbamRequest, NOKIA_LCM_API_VERSION); + OperationExecution terminationOperation = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdTerminatePost(vnfId, cbamRequest, NOKIA_LCM_API_VERSION).blockingFirst(); OperationExecution finishedOperation = waitForOperationToFinish(vnfmId, vnfId, terminationOperation.getId()); if (finishedOperation.getStatus() == FINISHED) { notificationManager.waitForTerminationToBeProcessed(finishedOperation.getId()); @@ -464,9 +463,9 @@ public class LifecycleManager { } } - private String getVimIdFromInstantiationRequest(String vnfmId, com.nokia.cbam.lcm.v32.model.VnfInfo vnf) throws ApiException { + private String getVimIdFromInstantiationRequest(String vnfmId, com.nokia.cbam.lcm.v32.model.VnfInfo vnf) { OperationExecution lastInstantiation = findLastInstantiation(vnf.getOperationExecutions()); - Object operationParameters = cbamRestApiProvider.getCbamOperationExecutionApi(vnfmId).operationExecutionsOperationExecutionIdOperationParamsGet(lastInstantiation.getId(), NOKIA_LCM_API_VERSION); + Object operationParameters = cbamRestApiProvider.getCbamOperationExecutionApi(vnfmId).operationExecutionsOperationExecutionIdOperationParamsGet(lastInstantiation.getId(), NOKIA_LCM_API_VERSION).blockingFirst(); JsonObject root = new Gson().toJsonTree(operationParameters).getAsJsonObject(); return childElement(childElement(root, "vims").getAsJsonArray().get(0).getAsJsonObject(), "id").getAsString(); } @@ -482,7 +481,7 @@ public class LifecycleManager { */ public VnfInfo queryVnf(String vnfmId, String vnfId) { try { - com.nokia.cbam.lcm.v32.model.VnfInfo cbamVnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION); + com.nokia.cbam.lcm.v32.model.VnfInfo cbamVnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst(); VnfInfo vnfInfo = new VnfInfo(); vnfInfo.setVersion(cbamVnfInfo.getVnfSoftwareVersion()); vnfInfo.setVnfInstanceId(vnfId); @@ -495,7 +494,7 @@ public class LifecycleManager { vnfInfo.setVnfStatus("ACTIVE"); vnfInfo.setVnfType("Kuku"); return vnfInfo; - } catch (ApiException e) { + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to query VNF (" + vnfId + ")", e); } } @@ -519,28 +518,37 @@ public class LifecycleManager { */ public JobInfo scaleVnf(String vnfmId, String vnfId, VnfScaleRequest request, HttpServletResponse httpResponse) { logOperationInput(vnfId, SCALE_OPERATION_NAME, request); - return scheduleExecution(vnfId, httpResponse, SCALE_OPERATION_NAME, jobInfo -> { - ScaleVnfRequest cbamRequest = new ScaleVnfRequest(); - cbamRequest.setAspectId(request.getAspectId()); - cbamRequest.setNumberOfSteps(Integer.valueOf(request.getNumberOfSteps())); - cbamRequest.setType(convert(request.getType())); - com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION); - JsonObject root = new Gson().toJsonTree(jobInfo).getAsJsonObject(); - com.nokia.cbam.lcm.v32.model.VnfInfo cbamVnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION); - String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, cbamVnfInfo.getVnfdId()); - Set<String> acceptableOperationParameters = getAcceptableOperationParameters(vnfdContent, "Basic", SCALE_OPERATION_NAME); - buildAdditionalParameters(request, root, acceptableOperationParameters); - cbamRequest.setAdditionalParams(root); - grantManager.requestGrantForScale(vnfmId, vnfId, getVimIdFromInstantiationRequest(vnfmId, vnf), getVnfdIdFromModifyableAttributes(vnf), request, jobInfo.getJobId()); - OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdScalePost(vnfId, cbamRequest, NOKIA_LCM_API_VERSION); - waitForOperationToFinish(vnfmId, vnfId, operationExecution.getId()); + return scheduleExecution(vnfId, httpResponse, SCALE_OPERATION_NAME, new AsynchronousExecution() { + @Override + public void execute(JobInfo jobInfo) { + ScaleVnfRequest cbamRequest = new ScaleVnfRequest(); + cbamRequest.setAspectId(request.getAspectId()); + cbamRequest.setNumberOfSteps(Integer.valueOf(request.getNumberOfSteps())); + cbamRequest.setType(convert(request.getType())); + com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst(); + JsonObject root = new Gson().toJsonTree(jobInfo).getAsJsonObject(); + com.nokia.cbam.lcm.v32.model.VnfInfo cbamVnfInfo = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst(); + String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, cbamVnfInfo.getVnfdId()); + Set<Map.Entry<String, JsonElement>> acceptableOperationParameters = getAcceptableOperationParameters(vnfdContent, "Basic", SCALE_OPERATION_NAME); + buildAdditionalParameters(request, root, acceptableOperationParameters); + cbamRequest.setAdditionalParams(root); + grantManager.requestGrantForScale(vnfmId, vnfId, getVimIdFromInstantiationRequest(vnfmId, vnf), getVnfdIdFromModifyableAttributes(vnf), request, jobInfo.getJobId()); + OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdScalePost(vnfId, cbamRequest, NOKIA_LCM_API_VERSION).blockingFirst(); + waitForOperationToFinish(vnfmId, vnfId, operationExecution.getId()); + } }); } - private void buildAdditionalParameters(VnfScaleRequest request, JsonObject root, Set<String> acceptableOperationParameters) { + private void buildAdditionalParameters(VnfScaleRequest request, JsonObject root, Set<Map.Entry<String, JsonElement>> acceptableOperationParameters) { if (request.getAdditionalParam() != null) { for (Map.Entry<String, JsonElement> item : new Gson().toJsonTree(request.getAdditionalParam()).getAsJsonObject().entrySet()) { - if (acceptableOperationParameters.contains(item.getKey())) { + boolean found = false; + for (Map.Entry<String, JsonElement> acceptableOperationParameter : acceptableOperationParameters) { + if (acceptableOperationParameter.getKey().equals(item.getKey())) { + found = true; + } + } + if (found) { root.add(item.getKey(), item.getValue()); } } @@ -556,7 +564,7 @@ public class LifecycleManager { * @param vnfId the identifier of the VNF * @param request the heal request * @param httpResponse the HTTP response - * @param vnfcId the identifer of thr VNFC to be healed + * @param vnfcId the identifer of thr VNFC to be healed * @return the job for tracking the heal */ public JobInfo healVnf(String vnfmId, String vnfId, VnfHealRequest request, Optional<String> vnfcId, HttpServletResponse httpResponse) { @@ -569,10 +577,10 @@ public class LifecycleManager { additionalParams.put("jobId", job.getJobId()); additionalParams.put("vnfcId", vnfcId.orElse("unknown")); cbamHealRequest.setAdditionalParams(additionalParams); - com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION); + com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst(); String vimId = getVimIdFromInstantiationRequest(vnfmId, vnf); grantManager.requestGrantForHeal(vnfmId, vnfId, vimId, getVnfdIdFromModifyableAttributes(vnf), request, job.getJobId()); - OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdHealPost(vnfId, cbamHealRequest, NOKIA_LCM_API_VERSION); + OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdHealPost(vnfId, cbamHealRequest, NOKIA_LCM_API_VERSION).blockingFirst(); waitForOperationToFinish(vnfmId, vnfId, operationExecution.getId()); }); } @@ -602,7 +610,7 @@ public class LifecycleManager { private OperationExecution waitForOperationToFinish(String vnfmId, String vnfId, String operationExecutionId) { while (true) { try { - OperationExecution operationExecution = find(cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdOperationExecutionsGet(vnfId, NOKIA_LCM_API_VERSION), opEx -> operationExecutionId.equals(opEx.getId())); + OperationExecution operationExecution = find(cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdOperationExecutionsGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst(), opEx -> operationExecutionId.equals(opEx.getId())); if (hasOperationFinished(operationExecution)) { logger.debug("Operation finished with " + operationExecution.getId()); return operationExecution; @@ -621,12 +629,13 @@ public class LifecycleManager { @FunctionalInterface private interface AsynchronousExecution { - void execute(JobInfo job) throws ApiException; - + void execute(JobInfo job); } + public static class VnfCreationResult { private final com.nokia.cbam.lcm.v32.model.VnfInfo vnfInfo; private final String vnfdId; + VnfCreationResult(com.nokia.cbam.lcm.v32.model.VnfInfo vnfInfo, String vnfdId) { this.vnfInfo = vnfInfo; this.vnfdId = vnfdId; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java index 6a31e833..d6fbd33f 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java @@ -20,7 +20,6 @@ import com.google.common.collect.Ordering; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.nokia.cbam.lcm.v32.ApiException; import com.nokia.cbam.lcm.v32.api.OperationExecutionsApi; import com.nokia.cbam.lcm.v32.api.VnfsApi; import com.nokia.cbam.lcm.v32.model.*; @@ -118,7 +117,7 @@ public class LifecycleChangeNotificationManager implements ILifecycleChangeNotif } VnfsApi cbamLcmApi = restApiProvider.getCbamLcmApi(driverProperties.getVnfmId()); try { - List<VnfInfo> vnfs = cbamLcmApi.vnfsGet(NOKIA_LCM_API_VERSION); + List<VnfInfo> vnfs = cbamLcmApi.vnfsGet(NOKIA_LCM_API_VERSION).blockingFirst(); com.google.common.base.Optional<VnfInfo> currentVnf = tryFind(vnfs, vnf -> vnf.getId().equals(receivedNotification.getVnfInstanceId())); String vnfHeader = "The VNF with " + receivedNotification.getVnfInstanceId() + " identifier"; if (!currentVnf.isPresent()) { @@ -126,7 +125,7 @@ public class LifecycleChangeNotificationManager implements ILifecycleChangeNotif //swallow LCN return; } else { - VnfInfo vnf = cbamLcmApi.vnfsVnfInstanceIdGet(receivedNotification.getVnfInstanceId(), NOKIA_LCN_API_VERSION); + VnfInfo vnf = cbamLcmApi.vnfsVnfInstanceIdGet(receivedNotification.getVnfInstanceId(), NOKIA_LCN_API_VERSION).blockingFirst(); com.google.common.base.Optional<VnfProperty> externalVnfmId = tryFind(vnf.getExtensions(), prop -> prop.getName().equals(LifecycleManager.EXTERNAL_VNFM_ID)); if (!externalVnfmId.isPresent()) { logger.warn(vnfHeader + " is not a managed VNF"); @@ -141,18 +140,24 @@ public class LifecycleChangeNotificationManager implements ILifecycleChangeNotif throw buildFatalFailure(logger, "Unable to list VNFs / query VNF", e); } OperationExecutionsApi cbamOperationExecutionApi = restApiProvider.getCbamOperationExecutionApi(driverProperties.getVnfmId()); + List<OperationExecution> operationExecutions; try { - List<OperationExecution> operationExecutions = cbamLcmApi.vnfsVnfInstanceIdOperationExecutionsGet(receivedNotification.getVnfInstanceId(), NOKIA_LCM_API_VERSION); - OperationExecution operationExecution = cbamOperationExecutionApi.operationExecutionsOperationExecutionIdGet(receivedNotification.getLifecycleOperationOccurrenceId(), NOKIA_LCM_API_VERSION); - OperationExecution closestInstantiationToOperation = findLastInstantiationBefore(operationExecutions, operationExecution); - String vimId = getVimId(cbamOperationExecutionApi, closestInstantiationToOperation); - notificationSender.processNotification(receivedNotification, operationExecution, buildAffectedCps(operationExecution), vimId); - if (isTerminationFinished(receivedNotification)) { - //signal LifecycleManager to continue the deletion of the VNF - processedNotifications.add(new ProcessedNotification(receivedNotification.getLifecycleOperationOccurrenceId(), receivedNotification.getStatus())); - } - } catch (ApiException e) { - throw buildFatalFailure(logger, "Unable to retrieve the current VNF " + receivedNotification.getVnfInstanceId(), e); + operationExecutions = cbamLcmApi.vnfsVnfInstanceIdOperationExecutionsGet(receivedNotification.getVnfInstanceId(), NOKIA_LCM_API_VERSION).blockingFirst(); + } catch (Exception e) { + throw buildFatalFailure(logger, "Unable to retrieve the operation executions for the VNF " + receivedNotification.getVnfInstanceId(), e); + } + OperationExecution operationExecution; + try { + operationExecution = cbamOperationExecutionApi.operationExecutionsOperationExecutionIdGet(receivedNotification.getLifecycleOperationOccurrenceId(), NOKIA_LCM_API_VERSION).blockingFirst(); + } catch (Exception e) { + throw buildFatalFailure(logger, "Unable to retrieve the operation execution with " + receivedNotification.getLifecycleOperationOccurrenceId() + " identifier", e); + } + OperationExecution closestInstantiationToOperation = findLastInstantiationBefore(operationExecutions, operationExecution); + String vimId = getVimId(cbamOperationExecutionApi, closestInstantiationToOperation); + notificationSender.processNotification(receivedNotification, operationExecution, buildAffectedCps(operationExecution), vimId); + if (isTerminationFinished(receivedNotification)) { + //signal LifecycleManager to continue the deletion of the VNF + processedNotifications.add(new ProcessedNotification(receivedNotification.getLifecycleOperationOccurrenceId(), receivedNotification.getStatus())); } } @@ -162,7 +167,7 @@ public class LifecycleChangeNotificationManager implements ILifecycleChangeNotif private String getVimId(OperationExecutionsApi cbamOperationExecutionApi, OperationExecution closestInstantiationToOperation) { try { - Object operationParams = cbamOperationExecutionApi.operationExecutionsOperationExecutionIdOperationParamsGet(closestInstantiationToOperation.getId(), NOKIA_LCM_API_VERSION); + Object operationParams = cbamOperationExecutionApi.operationExecutionsOperationExecutionIdOperationParamsGet(closestInstantiationToOperation.getId(), NOKIA_LCM_API_VERSION).blockingFirst(); return getVimId(operationParams); } catch (Exception e) { throw buildFatalFailure(logger, "Unable to detect last instantiation operation", e); |