diff options
author | Denes Nemeth <denes.nemeth@nokia.com> | 2018-03-24 14:00:54 +0100 |
---|---|---|
committer | Denes Nemeth <denes.nemeth@nokia.com> | 2018-03-25 21:32:03 +0200 |
commit | c82c886215ed34953a51dff0710c6bd15cb80ee4 (patch) | |
tree | 783f928ba8e033bbf55b6cffa343c7ea47c40b59 /nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm | |
parent | 1489e4215e075ab3ffe8f7158559a38778cd0b34 (diff) |
Removing jackson to mitigate cve-2017-4995
Signed-off-by: Denes Nemeth <denes.nemeth@nokia.com>
Issue-ID: VFC-728
Change-Id: Ib495d4706361cc39527dfe86463aa505d9564afa
Diffstat (limited to 'nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm')
42 files changed, 501 insertions, 443 deletions
diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/api/INotificationSender.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/api/INotificationSender.java index 55e9cca2..87f56db2 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/api/INotificationSender.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/api/INotificationSender.java @@ -17,9 +17,8 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api; import com.nokia.cbam.lcm.v32.model.OperationExecution; import com.nokia.cbam.lcm.v32.model.VnfLifecycleChangeNotification; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedConnectionPoints; - import java.util.Optional; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedConnectionPoints; /** * Responsible for processing the preprocessed notification from CBAM and making the changes diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java index 13b070a7..38665877 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/GenericExternalSystemInfoProvider.java @@ -17,6 +17,7 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import java.util.concurrent.TimeUnit; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VimInfoProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VnfmInfoProvider; import org.onap.vnfmdriver.model.VnfmInfo; @@ -24,10 +25,9 @@ import org.slf4j.Logger; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.env.Environment; -import java.util.concurrent.TimeUnit; +import static java.lang.Long.valueOf; import static com.google.common.cache.CacheBuilder.newBuilder; -import static java.lang.Long.valueOf; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.slf4j.LoggerFactory.getLogger; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/IpMappingProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/IpMappingProvider.java index ec6db5e4..99fe615d 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/IpMappingProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/IpMappingProvider.java @@ -15,15 +15,14 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - import static com.google.common.base.Splitter.on; import static com.google.common.collect.Lists.newArrayList; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/MsbApiProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/MsbApiProvider.java index 64a418de..c9edf895 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/MsbApiProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/MsbApiProvider.java @@ -15,17 +15,17 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; -import org.onap.msb.sdk.discovery.common.RouteException; -import org.onap.msb.sdk.discovery.entity.MicroServiceFullInfo; -import org.onap.msb.sdk.discovery.entity.NodeInfo; -import org.onap.msb.sdk.httpclient.msb.MSBServiceClient; +import com.google.common.annotations.VisibleForTesting; +import org.onap.msb.ApiClient; +import org.onap.msb.api.ServiceResourceApi; +import org.onap.msb.model.MicroServiceFullInfo; +import org.onap.msb.model.NodeInfo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import static java.lang.Integer.valueOf; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.slf4j.LoggerFactory.getLogger; @@ -48,8 +48,15 @@ public class MsbApiProvider extends IpMappingProvider { /** * @return API to access ONAP MSB */ - public MSBServiceClient getMsbClient() { - return new MSBServiceClient(messageBusIp, valueOf(messageBusPort)); + public ServiceResourceApi getMsbApi() { + return buildApiClient().createService(ServiceResourceApi.class); + } + + @VisibleForTesting + ApiClient buildApiClient() { + ApiClient apiClient = new ApiClient(); + apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl("http://" + messageBusIp + ":" + messageBusPort + "/api/msdiscover/v1/")); + return apiClient; } /** @@ -60,15 +67,15 @@ public class MsbApiProvider extends IpMappingProvider { public String getMicroServiceUrl(String name, String version) { MicroServiceFullInfo microServiceFullInfo = getMicroServiceInfo(name, version); String ipAnPort = getNodeIpAnPort(microServiceFullInfo); - String protocol = microServiceFullInfo.isEnable_ssl() ? "https://" : "http://"; + String protocol = microServiceFullInfo.isEnableSsl() ? "https://" : "http://"; //the field name in A&AI is misleading the URL is relative path postfixed to http(s)://ip:port return protocol + ipAnPort + microServiceFullInfo.getUrl(); } private MicroServiceFullInfo getMicroServiceInfo(String name, String version) { try { - return getMsbClient().queryMicroServiceInfo(name, version); - } catch (RouteException e) { + return getMsbApi().getMicroService_0(name, version, null, null, null, null, null).blockingFirst(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to get micro service URL for " + name + " with version " + version, e); } } 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 92064b16..0c57c376 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 @@ -18,11 +18,10 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; import com.nokia.cbam.lcn.v32.api.SubscriptionsApi; import com.nokia.cbam.lcn.v32.model.*; -import org.onap.msb.sdk.discovery.common.RouteException; -import org.onap.msb.sdk.discovery.entity.MicroServiceFullInfo; -import org.onap.msb.sdk.discovery.entity.MicroServiceInfo; -import org.onap.msb.sdk.discovery.entity.Node; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions; +import java.util.ArrayList; +import org.onap.msb.model.MicroServiceFullInfo; +import org.onap.msb.model.MicroServiceInfo; +import org.onap.msb.model.Node; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; import org.slf4j.Logger; @@ -30,11 +29,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.HashSet; - import static com.nokia.cbam.lcn.v32.model.SubscriptionAuthentication.TypeEnum.NONE; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider.NOKIA_LCN_API_VERSION; import static org.slf4j.LoggerFactory.getLogger; @@ -89,17 +86,20 @@ public class SelfRegistrationManager { public void deRegister() { try { logger.info("Cancelling micro service registration"); - msbApiProvider.getMsbClient().cancelMicroServiceInfo(SERVICE_NAME, DRIVER_VERSION); - } catch (RouteException e) { + systemFunctions().blockingFirst(msbApiProvider.getMsbApi().deleteMicroService(SERVICE_NAME, DRIVER_VERSION, null, null)); + } catch (Exception e) { //ONAP throws 500 internal server error, but deletes the micro service + boolean serviceFoundAfterDelete = false; try { - msbApiProvider.getMsbClient().queryMicroServiceInfo(SERVICE_NAME, DRIVER_VERSION); - //the micro service still exists - throw buildFatalFailure(logger, "Unable to deRegister Nokia VNFM driver", e); - } catch (RouteException e1) { + msbApiProvider.getMsbApi().getMicroService_0(SERVICE_NAME, DRIVER_VERSION, null, null, null, null, null); + serviceFoundAfterDelete = true; + } catch (Exception e1) { logger.info("Unable to query " + SERVICE_NAME + " from MSB (so the service was successfully deleted)", e1); // the micro service was deleted (even though 500 HTTP code was reported) } + if (serviceFoundAfterDelete) { + throw buildFatalFailure(logger, "Unable to deRegister Nokia VNFM driver", e); + } } deleteSubscription(driverProperties.getVnfmId()); } @@ -108,7 +108,7 @@ public class SelfRegistrationManager { * @return the swagger API definition */ public byte[] getSwaggerApiDefinition() { - return SystemFunctions.systemFunctions().loadFile(SWAGGER_API_DEFINITION); + return systemFunctions().loadFile(SWAGGER_API_DEFINITION); } private String getDriverVnfmUrl() { @@ -122,7 +122,8 @@ public class SelfRegistrationManager { String callbackUrl = getDriverVnfmUrl() + DriverProperties.LCN_URL; for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION).blockingFirst()) { if (subscription.getCallbackUrl().equals(callbackUrl)) { - lcnApi.subscriptionsSubscriptionIdDelete(subscription.getId(), NOKIA_LCN_API_VERSION); + logger.info("Deleting subscription with {} identifier", subscription.getId()); + systemFunctions().blockingFirst(lcnApi.subscriptionsSubscriptionIdDelete(subscription.getId(), NOKIA_LCN_API_VERSION)); } } } catch (Exception e) { @@ -135,20 +136,20 @@ public class SelfRegistrationManager { MicroServiceInfo microServiceInfo = new MicroServiceInfo(); microServiceInfo.setUrl(DriverProperties.BASE_URL); //the PATH should not be set - microServiceInfo.setProtocol("REST"); - microServiceInfo.setVisualRange(INTERNAL_SERVICE); + microServiceInfo.setProtocol(MicroServiceInfo.ProtocolEnum.REST); + microServiceInfo.setVisualRange(MicroServiceInfo.VisualRangeEnum._1); microServiceInfo.setServiceName(SERVICE_NAME); microServiceInfo.setVersion(DRIVER_VERSION); - microServiceInfo.setEnable_ssl(false); + microServiceInfo.setEnableSsl(false); Node node = new Node(); - microServiceInfo.setNodes(new HashSet<>()); + microServiceInfo.setNodes(new ArrayList<>()); microServiceInfo.getNodes().add(node); node.setIp(driverMsbExternalIp); node.setPort(driverPort); node.setTtl("0"); try { - return msbApiProvider.getMsbClient().registerMicroServiceInfo(microServiceInfo); - } catch (RouteException e) { + return msbApiProvider.getMsbApi().addMicroService(microServiceInfo, true, false).blockingFirst(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to register Nokia VNFM driver", e); } } @@ -160,6 +161,7 @@ public class SelfRegistrationManager { try { for (Subscription subscription : lcnApi.subscriptionsGet(NOKIA_LCN_API_VERSION).blockingFirst()) { if (subscription.getCallbackUrl().equals(callbackUrl)) { + logger.warn("The subscription with {} identifier has the same callback URL", subscription.getId()); return; } } @@ -175,7 +177,8 @@ public class SelfRegistrationManager { SubscriptionAuthentication subscriptionAuthentication = new SubscriptionAuthentication(); subscriptionAuthentication.setType(NONE); request.setAuthentication(subscriptionAuthentication); - lcnApi.subscriptionsPost(request, NOKIA_LCN_API_VERSION); + Subscription createdSubscription = lcnApi.subscriptionsPost(request, NOKIA_LCN_API_VERSION).blockingFirst(); + logger.info("Subscribed to LCN with {} identifier", createdSubscription.getId()); } 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/AAIExternalSystemInfoProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIExternalSystemInfoProvider.java index f5656f75..81834bcb 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIExternalSystemInfoProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIExternalSystemInfoProvider.java @@ -15,9 +15,8 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct; -import org.onap.aai.domain.yang.v11.EsrSystemInfo; -import org.onap.aai.domain.yang.v11.EsrSystemInfoList; -import org.onap.aai.domain.yang.v11.EsrVnfm; +import org.onap.aai.model.EsrSystemInfo; +import org.onap.aai.model.EsrVnfm; 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.model.VimInfo; @@ -28,9 +27,6 @@ import org.springframework.context.annotation.Conditional; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import static java.lang.String.format; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.CLOUD; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.ESR; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getCloudOwner; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getRegionName; @@ -42,8 +38,6 @@ import static org.slf4j.LoggerFactory.getLogger; @Component @Conditional(value = Conditions.UseForDirect.class) public class AAIExternalSystemInfoProvider extends GenericExternalSystemInfoProvider { - private static final String VNFM_URL = "/esr-vnfm-list/esr-vnfm/%s?depth=all"; - private static final String VIM_URL = "/cloud-regions/cloud-region/%s/%s/esr-system-info-list"; private static Logger logger = getLogger(AAIExternalSystemInfoProvider.class); private final AAIRestApiProvider aaiRestApiProvider; @@ -55,20 +49,20 @@ public class AAIExternalSystemInfoProvider extends GenericExternalSystemInfoProv @Override public VnfmInfo queryVnfmInfoFromSource(String vnfmId) { + return convertEsrToVnfmInfo(getEsrVnfm(vnfmId)); + } + + private EsrVnfm getEsrVnfm(String vnfmId) { try { - return convertEsrToVnfmInfo(aaiRestApiProvider.get(logger, ESR, format(VNFM_URL, vnfmId), EsrVnfm.class)); - } catch (RuntimeException e) { + return aaiRestApiProvider.getExternalSystemApi().getExternalSystemEsrVnfmListEsrVnfm(vnfmId).blockingFirst(); + } catch (Exception e) { throw buildFatalFailure(logger, "Unable to query VNFM with " + vnfmId + " identifier from AAI", e); } } @Override public VimInfo getVimInfo(String vimId) { - try { - return convertEsrToVim(getEsrSystemInfo(vimId), vimId); - } catch (RuntimeException e) { - throw buildFatalFailure(logger, "Unable to query VIM with " + vimId + " identifier from AAI", e); - } + return convertEsrToVim(getEsrSystemInfo(vimId), vimId); } /** @@ -76,8 +70,11 @@ public class AAIExternalSystemInfoProvider extends GenericExternalSystemInfoProv * @return the VIM details */ public EsrSystemInfo getEsrSystemInfo(String vimId) { - String url = format(VIM_URL, getCloudOwner(vimId), getRegionName(vimId)); - return aaiRestApiProvider.get(logger, CLOUD, url, EsrSystemInfoList.class).getEsrSystemInfo().get(0); + try { + return aaiRestApiProvider.getCloudInfrastructureApi().getCloudInfrastructureCloudRegionsCloudRegion(getCloudOwner(vimId), getRegionName(vimId), null, null).blockingFirst().getEsrSystemInfoList().get(0); + } catch (Exception e) { + throw buildFatalFailure(logger, "Unable to query VIM with " + vimId + " identifier from AAI", e); + } } private VimInfo convertEsrToVim(EsrSystemInfo esrSystemInfo, String vimId) { @@ -103,7 +100,7 @@ public class AAIExternalSystemInfoProvider extends GenericExternalSystemInfoProv private VnfmInfo convertEsrToVnfmInfo(EsrVnfm vnfmInAai) { - EsrSystemInfo esrSystemInfo = vnfmInAai.getEsrSystemInfoList().getEsrSystemInfo().get(0); + EsrSystemInfo esrSystemInfo = vnfmInAai.getEsrSystemInfoList().get(0); VnfmInfo vnfmInfo = new VnfmInfo(); vnfmInfo.setPassword(esrSystemInfo.getPassword()); vnfmInfo.setDescription(esrSystemInfo.getEsrSystemInfoId()); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java index 141ba847..14bdea11 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AAIRestApiProvider.java @@ -16,32 +16,20 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct; import com.google.common.annotations.VisibleForTesting; -import org.onap.aai.restclient.client.Headers; -import org.onap.aai.restclient.client.OperationResult; -import org.onap.aai.restclient.client.RestClient; -import org.onap.aai.restclient.enums.RestAuthenticationMode; +import okhttp3.Credentials; +import okhttp3.Request; +import org.onap.aai.ApiClient; +import org.onap.aai.api.CloudInfrastructureApi; +import org.onap.aai.api.ExternalSystemApi; +import org.onap.aai.api.NetworkApi; 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.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Conditional; -import org.springframework.http.MediaType; import org.springframework.stereotype.Component; -import javax.xml.bind.JAXBContext; -import java.io.ByteArrayOutputStream; -import java.io.StringReader; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; - -import static com.google.common.collect.Lists.newArrayList; -import static javax.ws.rs.core.MediaType.APPLICATION_XML_TYPE; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager.SERVICE_NAME; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; -import static org.slf4j.LoggerFactory.getLogger; /** * Responsible for providing access to AAI APIs. @@ -50,118 +38,63 @@ import static org.slf4j.LoggerFactory.getLogger; @Component @Conditional(value = Conditions.UseForDirect.class) public class AAIRestApiProvider { - private static final String AAI_VERSION = "v11"; - private static Logger logger = getLogger(AAIRestApiProvider.class); private final MsbApiProvider msbApiProvider; + private final AaiSecurityProvider aaiSecurityProvider; @Value("${aaiUsername}") private String aaiUsername; @Value("${aaiPassword}") private String aaiPassword; @Autowired - AAIRestApiProvider(MsbApiProvider msbApiProvider) { + AAIRestApiProvider(MsbApiProvider msbApiProvider, AaiSecurityProvider aaiSecurityProvider) { this.msbApiProvider = msbApiProvider; + this.aaiSecurityProvider = aaiSecurityProvider; } /** - * @param logger the logger of the class that requests unmarshalling - * @param service the AAI service of the request - * @param url the URL of the request after the base URL (ex. /cloud-infrastructure/...) - * @param clazz the class of the result - * @param <T> the type of the result - * @return the result of the GET request - */ - public <T> T get(Logger logger, AAIService service, String url, Class<T> clazz) { - return expectSuccess(logger, buildClient().get(getBaseUrl(service.getServiceName()) + url, buildCommonHeaders(), APPLICATION_XML_TYPE), clazz, url); - } - - /** - * @param logger the logger of the class that requests unmarshalling - * @param service the AAI service of the request - * @param url the URL of the request after the base URL (ex. /cloud-infrastructure/...) - * @param payload the payload of the request (non serialized) - * @param clazz the class of the result - * @param <T> the type of the result - * @return the result of the PUT request + * @return API to access the cloud infrastructure */ - public <T, S> T put(Logger logger, AAIService service, String url, S payload, Class<T> clazz) { - String marshalledContent = marshall(payload); - OperationResult result = buildClient().put(getBaseUrl(service.getServiceName()) + url, marshalledContent, buildCommonHeaders(), APPLICATION_XML_TYPE, APPLICATION_XML_TYPE); - return expectSuccess(logger, result, clazz, url); + public CloudInfrastructureApi getCloudInfrastructureApi() { + return buildApiClient(AAIService.CLOUD).createService(CloudInfrastructureApi.class); } /** - * Execute a delete request on the given URL - * - * @param logger the logger of the class that requests unmarshalling - * @param service the AAI service of the request - * @param url the URL of the request after the base URL (ex. /cloud-infrastructure/...) + * @return API to access the external systems */ - public void delete(Logger logger, AAIService service, String url) { - buildClient().delete(getBaseUrl(service.getServiceName()) + url, buildCommonHeaders(), APPLICATION_XML_TYPE); + public ExternalSystemApi getExternalSystemApi() { + return buildApiClient(AAIService.ESR).createService(ExternalSystemApi.class); } /** - * @param serviceName the name of the AAI service on MSB - * @return the base URL of the service + * @return API to access the networking */ - private String getBaseUrl(String serviceName) { - return msbApiProvider.getMicroServiceUrl(serviceName, AAI_VERSION); - } + public NetworkApi getNetworkApi() { + return buildApiClient(AAIService.NETWORK).createService(NetworkApi.class); - private <T> T expectSuccess(Logger logger, OperationResult result, Class<T> clazz, String url) { - if (!result.wasSuccessful()) { - if (result.getResultCode() == 404) { - logger.debug("The resource at " + url + " does not exists"); - throw new NoSuchElementException("The resource at " + url + " does not exists"); - } - throw buildFatalFailure(logger, "Bad response. Code: " + result.getResultCode() + " cause: " + result.getFailureCause()); - } - if (clazz.isAssignableFrom(Void.class)) { - return null; - } - return unmarshal(result.getResult(), clazz); - } - - private <T> T unmarshal(String content, Class<T> clazz) { - try { - return (T) JAXBContext.newInstance(clazz).createUnmarshaller().unmarshal(new StringReader(content)); - } catch (Exception e) { - throw buildFatalFailure(logger, "Unable to unmarshal content", e); - } - } - - private String marshall(Object object) { - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - JAXBContext.newInstance(object.getClass()).createMarshaller().marshal(object, bos); - return bos.toString(); - } catch (Exception e) { - throw buildFatalFailure(logger, "Unable to marshal content", e); - } - } - - /** - * @return the common mandatory headers for AAI requests - */ - private Map<String, List<String>> buildCommonHeaders() { - Map<String, List<String>> headers = new HashMap<>(); - headers.put(Headers.ACCEPT, newArrayList(MediaType.APPLICATION_XML_VALUE)); - headers.put(Headers.FROM_APP_ID, newArrayList(SERVICE_NAME)); - return headers; - } - - - private RestClient buildClient() { - return buildRawClient().basicAuthUsername(aaiUsername).basicAuthPassword(aaiPassword).authenticationMode(RestAuthenticationMode.SSL_BASIC); } @VisibleForTesting - RestClient buildRawClient() { - return new RestClient(); + ApiClient buildApiClient(AAIService service) { + ApiClient apiClient = new ApiClient(); + apiClient.getOkBuilder().sslSocketFactory(aaiSecurityProvider.buildSSLSocketFactory(), aaiSecurityProvider.buildTrustManager()); + apiClient.getOkBuilder().hostnameVerifier(aaiSecurityProvider.buildHostnameVerifier()); + apiClient.getOkBuilder().addInterceptor(chain -> { + Request request = chain.request().newBuilder().addHeader("X-FromAppId", SERVICE_NAME).build(); + return chain.proceed(request); + }); + apiClient.getOkBuilder().authenticator((route, response) -> { + String credential = Credentials.basic(aaiUsername, aaiPassword); + return response.request().newBuilder().header("Authorization", credential).build(); + }); + String url = msbApiProvider.getMicroServiceUrl(service.getServiceName(), "v11"); + if (!url.endsWith("/")) { + url = url + "/"; + } + apiClient.getAdapterBuilder().baseUrl(url); + return apiClient; } - public enum AAIService { + enum AAIService { NETWORK { String getServiceName() { return "aai-network"; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AaiSecurityProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AaiSecurityProvider.java new file mode 100644 index 00000000..688a82fd --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/AaiSecurityProvider.java @@ -0,0 +1,48 @@ +/* + * 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.direct; + +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.GenericSecurityProvider; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * Responsible for providing SSL factories for AAI + */ +@Component +public class AaiSecurityProvider extends GenericSecurityProvider { + @Value("${trustedCertificatesForAai}") + private String trustedCertificates; + @Value("${skipCertificateVerificationForAai}") + private boolean skipCertificateVerification; + @Value("${skipHostnameVerificationForAai}") + private boolean skipHostnameVerification; + + @Override + protected boolean skipHostnameVerification() { + return skipHostnameVerification; + } + + @Override + protected boolean skipCertificateVerification() { + return skipCertificateVerification; + } + + @Override + protected String trustedCertificates() { + return trustedCertificates; + } +} diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java index 8a165478..a7e6e404 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/SdcPackageProvider.java @@ -17,6 +17,8 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct; import com.google.gson.Gson; import com.google.gson.JsonObject; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -32,11 +34,9 @@ import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; -import java.io.ByteArrayInputStream; -import java.io.InputStream; +import static java.lang.String.format; import static com.google.common.io.ByteStreams.toByteArray; -import static java.lang.String.format; import static org.apache.http.HttpHeaders.ACCEPT; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager.SERVICE_NAME; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.*; 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 aad90eac..86517435 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 @@ -18,6 +18,10 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; import com.nokia.cbam.lcm.v32.model.AffectedVirtualLink; import com.nokia.cbam.lcm.v32.model.OperationExecution; import com.nokia.cbam.lcm.v32.model.VnfLifecycleChangeNotification; +import java.util.Collection; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.INotificationSender; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.ReportedAffectedConnectionPoints; @@ -27,11 +31,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; -import java.util.Collection; -import java.util.HashSet; -import java.util.Optional; -import java.util.Set; - import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Iterables.tryFind; import static com.nokia.cbam.lcm.v32.model.ChangeType.*; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java index c8008f38..ee7a3feb 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/AbstractManager.java @@ -16,20 +16,17 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; import com.google.gson.Gson; -import org.onap.aai.domain.yang.v11.ObjectFactory; -import org.onap.aai.domain.yang.v11.Relationship; -import org.onap.aai.domain.yang.v11.RelationshipData; -import org.onap.aai.domain.yang.v11.RelationshipList; +import io.reactivex.Observable; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.onap.aai.model.Relationship; +import org.onap.aai.model.RelationshipData; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; import org.slf4j.Logger; -import java.util.HashSet; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Set; - import static com.google.common.collect.Iterables.find; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; @@ -37,7 +34,6 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR * Handles the common management of changing entities in AAI */ abstract class AbstractManager { - protected static final ObjectFactory OBJECT_FACTORY = new ObjectFactory(); protected final AAIRestApiProvider aaiRestApiProvider; protected final CbamRestApiProvider cbamRestApiProvider; protected final DriverProperties driverProperties; @@ -78,17 +74,17 @@ abstract class AbstractManager { * @param relationships the list of relationships * @param relationship the expected relationship */ - protected static void addSingletonRelation(RelationshipList relationships, Relationship relationship) { + protected static void addSingletonRelation(List<Relationship> relationships, Relationship relationship) { boolean found = false; - for (Relationship currentRelationShip : relationships.getRelationship()) { + for (Relationship currentRelationShip : relationships) { if (relationship.getRelatedTo().equals(currentRelationShip.getRelatedTo())) { found = true; } } if (!found) { - relationships.getRelationship().add(relationship); + relationships.add(relationship); } else { - Relationship existingRelationShip = find(relationships.getRelationship(), currentRelationShip -> currentRelationShip.getRelatedTo().equals(relationship.getRelatedTo())); + Relationship existingRelationShip = find(relationships, currentRelationShip -> currentRelationShip.getRelatedTo().equals(relationship.getRelatedTo())); existingRelationShip.getRelationshipData().clear(); existingRelationShip.getRelationshipData().addAll(relationship.getRelationshipData()); } @@ -100,14 +96,14 @@ abstract class AbstractManager { * @param relationships the relationships * @param relationship the relationship to be added */ - protected static void addMissingRelation(RelationshipList relationships, Relationship relationship) { - for (Relationship currentRelationShip : relationships.getRelationship()) { + protected static void addMissingRelation(List<Relationship> relationships, Relationship relationship) { + for (Relationship currentRelationShip : relationships) { if (currentRelationShip.getRelatedTo().equals(relationship.getRelatedTo()) && compositeKeys(currentRelationShip.getRelationshipData()).equals(compositeKeys(relationship.getRelationshipData()))) { return; } } - relationships.getRelationship().add(relationship); + relationships.add(relationship); } private static Set<String> compositeKeys(List<RelationshipData> data) { @@ -126,17 +122,16 @@ abstract class AbstractManager { /** * Creates or returns a REST resource instance * - * @param service the type of the service - * @param url the URL of the resource without the service prefix + * @param get provides an existing instance * @param newInstance the empty instance if the resource does not exists * @param <T> the type of the resource * @return the created or queried resource */ - protected <T> T createOrGet(AAIRestApiProvider.AAIService service, String url, T newInstance) { + protected <T> T createOrGet(Observable<T> get, T newInstance) { try { - return (T) aaiRestApiProvider.get(getLogger(), service, url, newInstance.getClass()); - } catch (NoSuchElementException e) { - getLogger().debug("The resource on " + url + " URL was not found in AAI", e); + return get.blockingFirst(); + } catch (Exception e) { + getLogger().debug("The resource was not found in AAI", e); return newInstance; } } 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 2b9b3882..130004e4 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 @@ -16,10 +16,13 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; import com.nokia.cbam.lcm.v32.model.VnfInfo; -import org.onap.aai.domain.yang.v11.GenericVnf; -import org.onap.aai.domain.yang.v11.Relationship; +import java.util.ArrayList; +import java.util.NoSuchElementException; +import org.onap.aai.model.GenericVnf; +import org.onap.aai.model.Relationship; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; import org.slf4j.Logger; @@ -27,10 +30,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; -import java.util.NoSuchElementException; - -import static java.lang.String.format; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.NETWORK; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; @@ -40,7 +39,6 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.sys @Component @Conditional(value = Conditions.UseForDirect.class) class GenericVnfManager extends AbstractManager { - private static final String VNF_URL = "/generic-vnfs/generic-vnf/%s"; private static final long MAX_MS_TO_WAIT_FOR_VNF_TO_APPEAR = 30 * 1000L; private static Logger logger = org.slf4j.LoggerFactory.getLogger(GenericVnfManager.class); @@ -52,6 +50,7 @@ class GenericVnfManager extends AbstractManager { static Relationship linkTo(String vnfId) { Relationship relationship = new Relationship(); relationship.setRelatedTo("generic-vnf"); + relationship.setRelationshipData(new ArrayList<>()); relationship.getRelationshipData().add(buildRelationshipData("generic-vnf.vnf-id", vnfId)); return relationship; } @@ -68,7 +67,7 @@ class GenericVnfManager extends AbstractManager { } catch (NoSuchElementException e) { try { logger.warn("The VNF with " + vnfId + " identifier did not appear in time", e); - updateFields(OBJECT_FACTORY.createGenericVnf(), vnfId, inMaintenance); + updateFields(new GenericVnf(), vnfId, inMaintenance); } catch (Exception e2) { logger.warn("The VNF with " + vnfId + " identifier has been created since after the maximal wait for VNF to appear timeout", e2); //the VNF might have been created since the last poll @@ -77,8 +76,8 @@ class GenericVnfManager extends AbstractManager { } } - GenericVnf getExistingVnf(String vnfId) { - return aaiRestApiProvider.get(logger, NETWORK, format(VNF_URL, vnfId), GenericVnf.class); + private GenericVnf getExistingVnf(String vnfId) { + return aaiRestApiProvider.getNetworkApi().getNetworkGenericVnfsGenericVnf(vnfId, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null).blockingFirst(); } private void updateFields(GenericVnf vnf, String vnfId, boolean inMaintenance) { @@ -90,18 +89,17 @@ class GenericVnfManager extends AbstractManager { } vnf.setVnfId(vnfId); vnf.setInMaint(inMaintenance); - vnf.setVnfInstanceId(vnfId); //FIXME whould be good to know if this parameter is relevant or not? (mandatory) vnf.setVnfType("NokiaVNF"); vnf.setIsClosedLoopDisabled(inMaintenance); - aaiRestApiProvider.put(logger, NETWORK, format(VNF_URL, vnf.getVnfId()), vnf, Void.class); + SystemFunctions.systemFunctions().blockingFirst(aaiRestApiProvider.getNetworkApi().createOrUpdateNetworkGenericVnfsGenericVnf(vnf.getVnfId(), vnf)); } private GenericVnf waitForVnfToAppearInAai(String vnfId) { long timeoutInMs = systemFunctions().currentTimeMillis() + MAX_MS_TO_WAIT_FOR_VNF_TO_APPEAR; while (timeoutInMs - systemFunctions().currentTimeMillis() > 0) { try { - return aaiRestApiProvider.get(logger, NETWORK, format(VNF_URL, vnfId), GenericVnf.class); + return getExistingVnf(vnfId); } catch (NoSuchElementException e) { logger.debug("Unable to get VNF with " + vnfId + " identifier", e); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java index 6d2b42bc..1d641cff 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/L3NetworkManager.java @@ -16,9 +16,10 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; import com.nokia.cbam.lcm.v32.model.AffectedVirtualLink; -import org.onap.aai.domain.yang.v11.L3Network; -import org.onap.aai.domain.yang.v11.Relationship; -import org.onap.aai.domain.yang.v11.RelationshipList; +import io.reactivex.Observable; +import java.util.ArrayList; +import org.onap.aai.model.L3Network; +import org.onap.aai.model.Relationship; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; @@ -28,9 +29,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; -import static java.lang.String.format; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.NETWORK; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getCloudOwner; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getRegionName; @@ -40,7 +40,6 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.ge @Component @Conditional(value = Conditions.UseForDirect.class) class L3NetworkManager extends AbstractManager { - private static final String NETWORK_URL = "/l3-networks/l3-network/%s"; private static Logger logger = org.slf4j.LoggerFactory.getLogger(L3NetworkManager.class); @Autowired @@ -54,12 +53,17 @@ class L3NetworkManager extends AbstractManager { } void update(String vimId, String vnfId, AffectedVirtualLink affectedVirtualLink) { - L3Network l3Network = createOrGet(NETWORK, format(NETWORK_URL, buildNetworkId(vnfId, affectedVirtualLink)), OBJECT_FACTORY.createL3Network()); + L3Network l3Network = createOrGet(getNetwork(vnfId, affectedVirtualLink), new L3Network()); updateNetworkFields(vimId, vnfId, affectedVirtualLink, l3Network); } + private Observable<L3Network> getNetwork(String vnfId, AffectedVirtualLink affectedVirtualLink) { + return aaiRestApiProvider.getNetworkApi().getNetworkL3NetworksL3Network(buildNetworkId(vnfId, affectedVirtualLink), null, null, null, null, null, null, null, null, null); + } + void delete(String vnfId, AffectedVirtualLink removedVl) { - aaiRestApiProvider.delete(logger, NETWORK, format(NETWORK_URL, buildNetworkId(vnfId, removedVl))); + L3Network l3Network = getNetwork(vnfId, removedVl).blockingFirst(); + systemFunctions().blockingFirst(aaiRestApiProvider.getNetworkApi().deleteNetworkL3NetworksL3Network(l3Network.getNetworkId(), l3Network.getResourceVersion())); } private void updateNetworkFields(String vimId, String vnfId, AffectedVirtualLink affectedVirtualLink, L3Network network) { @@ -73,12 +77,12 @@ class L3NetworkManager extends AbstractManager { network.setOperationalStatus("active"); network.setOrchestrationStatus("active"); if (network.getRelationshipList() == null) { - network.setRelationshipList(new RelationshipList()); + network.setRelationshipList(new ArrayList<>()); } addMissingRelation(network.getRelationshipList(), GenericVnfManager.linkTo(vnfId)); addSingletonRelation(network.getRelationshipList(), getRegionLink(vimId)); addSingletonRelation(network.getRelationshipList(), getTenantLink(vimId, extractMandatoryValue(affectedVirtualLink.getResource().getAdditionalData(), "tenantId"))); - aaiRestApiProvider.put(logger, NETWORK, format(NETWORK_URL, network.getNetworkId()), network, Void.class); + systemFunctions().blockingFirst(aaiRestApiProvider.getNetworkApi().createOrUpdateNetworkL3NetworksL3Network(network.getNetworkId(), network)); } private String buildNetworkId(String vnfId, AffectedVirtualLink affectedVirtualLink) { @@ -88,6 +92,7 @@ class L3NetworkManager extends AbstractManager { private Relationship getRegionLink(String vimId) { Relationship relationship = new Relationship(); relationship.setRelatedTo("cloud-region"); + relationship.setRelationshipData(new ArrayList<>()); relationship.getRelationshipData().add(buildRelationshipData("cloud-region.cloud-owner", getCloudOwner(vimId))); relationship.getRelationshipData().add(buildRelationshipData("cloud-region.cloud-region-id", getRegionName(vimId))); return relationship; @@ -96,6 +101,7 @@ class L3NetworkManager extends AbstractManager { private Relationship getTenantLink(String vimId, String tenantId) { Relationship relationship = new Relationship(); relationship.setRelatedTo("tenant"); + relationship.setRelationshipData(new ArrayList<>()); relationship.getRelationshipData().add(buildRelationshipData("cloud-region.cloud-owner", getCloudOwner(vimId))); relationship.getRelationshipData().add(buildRelationshipData("cloud-region.cloud-region-id", getRegionName(vimId))); relationship.getRelationshipData().add(buildRelationshipData("tenant.tenant-id", tenantId)); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java index 229fe679..78da503e 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/LInterfaceManager.java @@ -15,10 +15,11 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; -import org.onap.aai.domain.yang.v11.L3InterfaceIpv4AddressList; -import org.onap.aai.domain.yang.v11.L3InterfaceIpv6AddressList; -import org.onap.aai.domain.yang.v11.LInterface; -import org.onap.aai.domain.yang.v11.RelationshipList; +import io.reactivex.Observable; +import java.util.ArrayList; +import org.onap.aai.model.L3InterfaceIpv4AddressList; +import org.onap.aai.model.L3InterfaceIpv6AddressList; +import org.onap.aai.model.LInterface; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; @@ -30,7 +31,8 @@ import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import static java.lang.String.format; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.CLOUD; + +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getCloudOwner; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getRegionName; @@ -62,15 +64,30 @@ class LInterfaceManager extends AbstractManager { } void update(String vnfId, String vimId, ReportedAffectedCp affectedCp, boolean inMaintenance) { - LInterface lInterface = createOrGet(CLOUD, buildUrl(vimId, affectedCp), OBJECT_FACTORY.createLInterface()); - updateFields(lInterface, affectedCp, vnfId, buildUrl(vimId, affectedCp), inMaintenance); + LInterface lInterface = createOrGet(getLinterface(vimId, affectedCp), new LInterface()); + updateFields(vimId, lInterface, affectedCp, vnfId, inMaintenance); } void delete(String vimId, ReportedAffectedCp removedCp) { - aaiRestApiProvider.delete(logger, AAIRestApiProvider.AAIService.CLOUD, buildUrl(vimId, removedCp)); + LInterface linterface = getLinterface(vimId, removedCp).blockingFirst(); + String cloudOwner = getCloudOwner(vimId); + String regionName = getRegionName(vimId); + String tenantId = removedCp.getTenantId(); + String vServerId = removedCp.getServerProviderId(); + String cpId = removedCp.getCpId(); + aaiRestApiProvider.getCloudInfrastructureApi().deleteCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserverLInterfacesLInterface(cloudOwner, regionName, tenantId, vServerId, cpId, linterface.getResourceVersion()); + } + + private Observable<LInterface> getLinterface(String vimId, ReportedAffectedCp cp) { + String cloudOwner = getCloudOwner(vimId); + String regionName = getRegionName(vimId); + String tenantId = cp.getTenantId(); + String vServerId = cp.getServerProviderId(); + String cpId = cp.getCpId(); + return aaiRestApiProvider.getCloudInfrastructureApi().getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserverLInterfacesLInterface(cloudOwner, regionName, tenantId, vServerId, cpId, null, null, null, null, null, null, null, null, null, null, null, null); } - private void updateFields(LInterface logicalInterface, ReportedAffectedCp affectedCp, String vnfId, String url, boolean inMaintenance) { + private void updateFields(String vimId, LInterface logicalInterface, ReportedAffectedCp affectedCp, String vnfId, boolean inMaintenance) { logicalInterface.setInMaint(inMaintenance); logicalInterface.setIsIpUnnumbered(false); logicalInterface.setIsPortMirrored(false); @@ -81,21 +98,32 @@ class LInterfaceManager extends AbstractManager { logicalInterface.setProvStatus("active"); if (affectedCp.getIpAddress() != null) { if (affectedCp.getIpAddress().contains(":")) { - L3InterfaceIpv6AddressList ipv6Address = OBJECT_FACTORY.createL3InterfaceIpv6AddressList(); + L3InterfaceIpv6AddressList ipv6Address = new L3InterfaceIpv6AddressList(); ipv6Address.setL3InterfaceIpv6Address(affectedCp.getIpAddress()); ipv6Address.setNeutronNetworkId(affectedCp.getNetworkProviderId()); + if (logicalInterface.getL3InterfaceIpv6AddressList() == null) { + logicalInterface.setL3InterfaceIpv6AddressList(new ArrayList<>()); + } logicalInterface.getL3InterfaceIpv6AddressList().add(ipv6Address); } else { - L3InterfaceIpv4AddressList ipv4Address = OBJECT_FACTORY.createL3InterfaceIpv4AddressList(); + L3InterfaceIpv4AddressList ipv4Address = new L3InterfaceIpv4AddressList(); ipv4Address.setL3InterfaceIpv4Address(affectedCp.getIpAddress()); ipv4Address.setNeutronNetworkId(affectedCp.getNetworkProviderId()); + if (logicalInterface.getL3InterfaceIpv4AddressList() == null) { + logicalInterface.setL3InterfaceIpv4AddressList(new ArrayList<>()); + } logicalInterface.getL3InterfaceIpv4AddressList().add(ipv4Address); } } if (logicalInterface.getRelationshipList() == null) { - logicalInterface.setRelationshipList(new RelationshipList()); + logicalInterface.setRelationshipList(new ArrayList<>()); } addSingletonRelation(logicalInterface.getRelationshipList(), GenericVnfManager.linkTo(vnfId)); - aaiRestApiProvider.put(logger, CLOUD, url, logicalInterface, Void.class); + String cloudOwner = getCloudOwner(vimId); + String regionName = getRegionName(vimId); + String tenantId = affectedCp.getTenantId(); + String vServerId = affectedCp.getServerProviderId(); + String cpId = affectedCp.getCpId(); + systemFunctions().blockingFirst(aaiRestApiProvider.getCloudInfrastructureApi().createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserverLInterfacesLInterface(cloudOwner, regionName, tenantId, vServerId, cpId, logicalInterface)); } } 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 e1d1197b..9528e1a7 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 @@ -15,8 +15,9 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.notification; -import org.onap.aai.domain.yang.v11.RelationshipList; -import org.onap.aai.domain.yang.v11.Vnfc; +import io.reactivex.Observable; +import java.util.ArrayList; +import org.onap.aai.model.Vnfc; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; @@ -26,9 +27,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; -import static java.lang.String.format; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.NETWORK; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; /** * Responsible for managing {@link Vnfc} in AAI @@ -43,15 +43,6 @@ public class VnfcManager extends AbstractManager { super(aaiRestApiProvider, cbamRestApiProvider, driverProperties); } - /** - * @param vnfId the identifier of the VNF - * @param cbamVnfcId the identifier of the VNFC in CBAM - * @return the URL of the VNFC - */ - public static String buildUrl(String vnfId, String cbamVnfcId) { - return format("/vnfcs/vnfc/%s", buildId(vnfId, cbamVnfcId)); - } - private static String buildId(String vnfId, String cbamVnfcId) { return vnfId + SEPARATOR + cbamVnfcId; } @@ -62,16 +53,20 @@ public class VnfcManager extends AbstractManager { } void delete(String vnfId, com.nokia.cbam.lcm.v32.model.AffectedVnfc cbamVnfc) { - aaiRestApiProvider.delete(logger, NETWORK, buildUrl(vnfId, cbamVnfc.getId())); + Vnfc vnfc = getVnfc(buildId(vnfId, cbamVnfc.getId())).blockingFirst(); + systemFunctions().blockingFirst(aaiRestApiProvider.getNetworkApi().deleteNetworkVnfcsVnfc(vnfc.getVnfcName(), vnfc.getResourceVersion())); + } + + private Observable<Vnfc> getVnfc(String vnfcId) { + return aaiRestApiProvider.getNetworkApi().getNetworkVnfcsVnfc(vnfcId, null, null, null, null, null, null, null, null, null); } void update(String vimId, String tenantId, String vnfId, com.nokia.cbam.lcm.v32.model.AffectedVnfc cbamVnfc, boolean inMaintenance) { - String url = buildUrl(vnfId, cbamVnfc.getId()); - Vnfc vnfc = createOrGet(NETWORK, url, OBJECT_FACTORY.createVnfc()); - updateFields(vimId, tenantId, vnfc, cbamVnfc, vnfId, url, inMaintenance); + Vnfc vnfc = createOrGet(getVnfc(buildId(vnfId, cbamVnfc.getId())), new Vnfc()); + updateFields(vimId, tenantId, vnfc, cbamVnfc, vnfId, inMaintenance); } - private void updateFields(String vimId, String tenantId, Vnfc aaiVnfc, com.nokia.cbam.lcm.v32.model.AffectedVnfc cbamVnfc, String vnfId, String url, boolean inMaintenance) { + private void updateFields(String vimId, String tenantId, Vnfc aaiVnfc, com.nokia.cbam.lcm.v32.model.AffectedVnfc cbamVnfc, String vnfId, boolean inMaintenance) { aaiVnfc.setInMaint(inMaintenance); aaiVnfc.setIsClosedLoopDisabled(inMaintenance); //FIXME would be good to know what is this mandatory parameter @@ -79,9 +74,11 @@ public class VnfcManager extends AbstractManager { //FIXME would be good to know what is this mandatory parameter aaiVnfc.setNfcNamingCode(cbamVnfc.getId()); aaiVnfc.setVnfcName(buildId(vnfId, cbamVnfc.getId())); - aaiVnfc.setRelationshipList(new RelationshipList()); + if (aaiVnfc.getRelationshipList() == null) { + aaiVnfc.setRelationshipList(new ArrayList<>()); + } addSingletonRelation(aaiVnfc.getRelationshipList(), VserverManager.linkTo(vimId, tenantId, cbamVnfc.getComputeResource().getResourceId())); addSingletonRelation(aaiVnfc.getRelationshipList(), GenericVnfManager.linkTo(vnfId)); - aaiRestApiProvider.put(logger, NETWORK, url, aaiVnfc, Void.class); + systemFunctions().blockingFirst(aaiRestApiProvider.getNetworkApi().createOrUpdateNetworkVnfcsVnfc(aaiVnfc.getVnfcName(), aaiVnfc)); } }
\ No newline at end of file diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java index cec779a4..3eba8b21 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/VserverManager.java @@ -20,7 +20,12 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.nokia.cbam.lcm.v32.model.AffectedVirtualStorage; import com.nokia.cbam.lcm.v32.model.AffectedVnfc; -import org.onap.aai.domain.yang.v11.*; +import io.reactivex.Observable; +import java.util.ArrayList; +import java.util.List; +import org.onap.aai.model.Relationship; +import org.onap.aai.model.Volume; +import org.onap.aai.model.Vserver; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; @@ -30,12 +35,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; -import java.util.List; - import static com.google.common.collect.Iterables.find; -import static java.lang.String.format; -import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.AAIRestApiProvider.AAIService.CLOUD; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.childElement; +import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getCloudOwner; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.getRegionName; @@ -45,7 +47,7 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager.ge @Component @Conditional(value = Conditions.UseForDirect.class) class VserverManager extends AbstractManager { - private static Logger logger = org.slf4j.LoggerFactory.getLogger(VserverManager.class); + private static Logger logger = org.slf4j.LoggerFactory.getLogger(AbstractManager.class); @Autowired VserverManager(AAIRestApiProvider aaiRestApiProvider, CbamRestApiProvider cbamRestApiProvider, DriverProperties driverProperties) { @@ -55,6 +57,7 @@ class VserverManager extends AbstractManager { static Relationship linkTo(String vimId, String tenantId, String serverProviderId) { Relationship relationship = new Relationship(); relationship.setRelatedTo("vserver"); + relationship.setRelationshipData(new ArrayList<>()); relationship.getRelationshipData().add(buildRelationshipData("cloud-region.cloud-owner", getCloudOwner(vimId))); relationship.getRelationshipData().add(buildRelationshipData("cloud-region.cloud-region-id", getRegionName(vimId))); relationship.getRelationshipData().add(buildRelationshipData("tenant.tenant-id", tenantId)); @@ -72,47 +75,53 @@ class VserverManager extends AbstractManager { } void update(String vimId, String vnfId, AffectedVnfc cbamVnfc, List<AffectedVirtualStorage> affectedVirtualStorages, boolean inMaintenance) { - String url = buildUrl(vimId, cbamVnfc); - Vserver vserver = createOrGet(CLOUD, url, OBJECT_FACTORY.createVserver()); - updateFields(vserver, cbamVnfc, vnfId, affectedVirtualStorages, url, inMaintenance); + Vserver vserver = createOrGet(getVserver(vimId, cbamVnfc), new Vserver()); + updateFields(vimId, vserver, cbamVnfc, vnfId, affectedVirtualStorages, inMaintenance); } - void delete(String vimId, com.nokia.cbam.lcm.v32.model.AffectedVnfc deletedVnfc) { - aaiRestApiProvider.delete(logger, CLOUD, buildUrl(vimId, deletedVnfc)); + void delete(String vimId, AffectedVnfc deletedVnfc) { + String tenantId = getTenantId(deletedVnfc); + String cloudOwner = getCloudOwner(vimId); + String regionName = getRegionName(vimId); + Vserver vserver = getVserver(vimId, deletedVnfc).blockingFirst(); + aaiRestApiProvider.getCloudInfrastructureApi().deleteCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(cloudOwner, regionName, tenantId, vserver.getVserverId(), vserver.getResourceVersion()); } - private String buildUrl(String vimId, AffectedVnfc cbamVnfc) { + private Observable<Vserver> getVserver(String vimId, AffectedVnfc cbamVnfc) { String tenantId = getTenantId(cbamVnfc); String cloudOwner = getCloudOwner(vimId); String regionName = getRegionName(vimId); - return format("/cloud-regions/cloud-region/%s/%s/tenants/tenant/%s/vservers/vserver/%s", cloudOwner, regionName, tenantId, cbamVnfc.getComputeResource().getResourceId()); + return aaiRestApiProvider.getCloudInfrastructureApi().getCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(cloudOwner, regionName, tenantId, cbamVnfc.getComputeResource().getResourceId(), null, null, null, null, null, null, null, null, null); } - private void updateFields(Vserver server, AffectedVnfc cbamVnfc, String vnfId, List<AffectedVirtualStorage> affectedVirtualStorages, String url, boolean inMaintenance) { + private void updateFields(String vimId, Vserver server, AffectedVnfc cbamVnfc, String vnfId, List<AffectedVirtualStorage> affectedVirtualStorages, boolean inMaintenance) { server.setInMaint(inMaintenance); server.setIsClosedLoopDisabled(inMaintenance); JsonElement additionalData = new Gson().toJsonTree(cbamVnfc.getComputeResource().getAdditionalData()); server.setVserverName(additionalData.getAsJsonObject().get("name").getAsString()); server.setVserverId(cbamVnfc.getComputeResource().getResourceId()); server.setProvStatus("active"); - server.setRelationshipList(new RelationshipList()); + server.setRelationshipList(new ArrayList<>()); server.setVserverId(cbamVnfc.getComputeResource().getResourceId()); server.setVserverSelflink(extractSelfLink(cbamVnfc.getComputeResource().getAdditionalData())); addSingletonRelation(server.getRelationshipList(), GenericVnfManager.linkTo(vnfId)); - if (server.getVolumes() == null) { - server.setVolumes(new Volumes()); - } if (cbamVnfc.getStorageResourceIds() != null) { + if (server.getVolumes() == null) { + server.setVolumes(new ArrayList<>()); + } for (String virtualStorageId : cbamVnfc.getStorageResourceIds()) { Volume volume = new Volume(); AffectedVirtualStorage affectedStorage = find(affectedVirtualStorages, storage -> virtualStorageId.equals(storage.getId())); volume.setVolumeId(affectedStorage.getResource().getResourceId()); - server.getVolumes().getVolume().add(volume); + server.getVolumes().add(volume); } } else { - server.setVolumes(OBJECT_FACTORY.createVolumes()); + server.setVolumes(new ArrayList<>()); } - aaiRestApiProvider.put(logger, CLOUD, url, server, Void.class); + String tenantId = getTenantId(cbamVnfc); + String cloudOwner = getCloudOwner(vimId); + String regionName = getRegionName(vimId); + systemFunctions().blockingFirst(aaiRestApiProvider.getCloudInfrastructureApi().createOrUpdateCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserver(cloudOwner, regionName, tenantId, server.getVserverId(), server)); } private String extractSelfLink(Object additionalData) { 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 03169612..01b75027 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 @@ -23,6 +23,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.nokia.cbam.lcm.v32.model.VnfInfo; import com.nokia.cbam.lcm.v32.model.VnfcResourceInfo; +import java.util.*; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CatalogManager; @@ -34,8 +35,6 @@ import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; -import java.util.*; - import static com.nokia.cbam.lcm.v32.model.InstantiationState.INSTANTIATED; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.child; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java index 50f6221b..65cef408 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/vfc/VfcNotificationSender.java @@ -19,6 +19,8 @@ import com.google.gson.Gson; import com.nokia.cbam.lcm.v32.model.OperationExecution; import com.nokia.cbam.lcm.v32.model.ScaleVnfRequest; import com.nokia.cbam.lcm.v32.model.VnfLifecycleChangeNotification; +import java.util.ArrayList; +import java.util.Optional; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.INotificationSender; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties; @@ -31,12 +33,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Optional; +import static java.util.Optional.of; import static com.google.common.collect.Iterables.tryFind; import static com.nokia.cbam.lcm.v32.model.ScaleDirection.IN; -import static java.util.Optional.of; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.JobManager.extractOnapJobId; 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 5a3e960f..9ade5f4a 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 @@ -18,6 +18,9 @@ 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 java.io.IOException; +import java.io.InputStream; +import java.net.URL; import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.client.methods.CloseableHttpResponse; @@ -33,10 +36,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.slf4j.LoggerFactory.getLogger; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfPackageBuilder.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfPackageBuilder.java index 5f9f6341..6503177e 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfPackageBuilder.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfPackageBuilder.java @@ -17,7 +17,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.packagetransformer; import com.google.common.io.ByteStreams; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfdBuilder.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfdBuilder.java index 83b93518..07cd8032 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfdBuilder.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/CbamVnfdBuilder.java @@ -16,13 +16,10 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.packagetransformer; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import com.google.gson.*; -import org.yaml.snakeyaml.Yaml; - import java.io.IOException; +import java.io.StringReader; +import org.yaml.snakeyaml.Yaml; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.child; @@ -53,8 +50,7 @@ public class CbamVnfdBuilder { if (interfaces.has("Healable")) { addOperationParams(addChild(child(interfaces, "Healable"), "heal")); } - JsonNode jsonNodeTree = new ObjectMapper().readTree(new GsonBuilder().setPrettyPrinting().create().toJson(root)); - return new YAMLMapper().writeValueAsString(jsonNodeTree); + return new Yaml().dump(new Yaml().load(new StringReader(new Gson().toJson(root)))); } private void addOperationParams(JsonObject operation) { diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfPackageBuilder.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfPackageBuilder.java index 9fe4a298..00977e4a 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfPackageBuilder.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfPackageBuilder.java @@ -17,7 +17,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.packagetransformer; import com.google.common.io.ByteStreams; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java index 701b42eb..dcac5cdf 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java @@ -21,13 +21,12 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import org.slf4j.Logger; -import org.yaml.snakeyaml.Yaml; - import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; import java.util.regex.Pattern; +import org.slf4j.Logger; +import org.yaml.snakeyaml.Yaml; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.child; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.childElement; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/ConverterApi.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/ConverterApi.java index 790ac054..7ae05f5e 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/ConverterApi.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/ConverterApi.java @@ -16,25 +16,24 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.restapi; import com.google.common.io.ByteStreams; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.Part; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.packagetransformer.OnapVnfPackageBuilder; import org.slf4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Part; -import java.io.ByteArrayInputStream; -import java.io.IOException; - -import static org.apache.http.entity.ContentType.APPLICATION_OCTET_STREAM; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties.BASE_URL; import static org.slf4j.LoggerFactory.getLogger; import static org.springframework.http.HttpHeaders.*; import static org.springframework.http.HttpStatus.OK; +import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM; import static org.springframework.http.MediaType.TEXT_HTML_VALUE; import static org.springframework.web.bind.annotation.RequestMethod.GET; import static org.springframework.web.bind.annotation.RequestMethod.POST; @@ -71,7 +70,7 @@ public class ConverterApi { } catch (Exception e) { throw buildFatalFailure(logger, "Unable to convert VNF package", e); } - httpResponse.addHeader(CONTENT_TYPE, APPLICATION_OCTET_STREAM.getMimeType()); + httpResponse.addHeader(CONTENT_TYPE, APPLICATION_OCTET_STREAM.toString()); httpResponse.setStatus(OK.value()); httpResponse.addHeader(CONTENT_LENGTH, Integer.toString(convertedPackage.length)); httpResponse.addHeader(CONTENT_DISPOSITION, "attachment; filename=\"" + "core.csar" + "\""); 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 be78aa0a..c3405201 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 @@ -15,6 +15,7 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.restapi; +import javax.servlet.http.HttpServletResponse; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.JobManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.LifecycleManager; import org.onap.vnfmdriver.model.*; @@ -26,10 +27,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import javax.servlet.http.HttpServletResponse; - +import static javax.servlet.http.HttpServletResponse.SC_CREATED; 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; import static org.slf4j.LoggerFactory.getLogger; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcnApi.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcnApi.java index df871b09..d11226b0 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcnApi.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/LcnApi.java @@ -16,17 +16,15 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.restapi; import com.nokia.cbam.lcm.v32.model.VnfLifecycleChangeNotification; +import javax.servlet.http.HttpServletResponse; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.LifecycleChangeNotificationManager; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; -import javax.servlet.http.HttpServletResponse; - import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties.BASE_URL; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties.LCN_URL; import static org.slf4j.LoggerFactory.getLogger; @@ -62,13 +60,11 @@ public class LcnApi { /** * Handle the LCN sent by CBAM * - * @param lcn the LCN notification - * @param httpResponse the HTTP response + * @param lcn the LCN notification */ @RequestMapping(value = LCN_URL, method = POST, consumes = APPLICATION_JSON_VALUE) - @ResponseBody @ResponseStatus(code = NO_CONTENT) - public void handleLcn(@RequestBody VnfLifecycleChangeNotification lcn, HttpServletResponse httpResponse) { + public void handleLcn(@RequestBody VnfLifecycleChangeNotification lcn) { logger.info("REST: handle LCN"); lcnManager.handleLcn(lcn); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/SwaggerApi.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/SwaggerApi.java index 15c8dc36..51423ae8 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/SwaggerApi.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/restapi/SwaggerApi.java @@ -15,6 +15,8 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.restapi; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -22,9 +24,6 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.DriverProperties.BASE_URL; import static org.slf4j.LoggerFactory.getLogger; import static org.springframework.http.HttpHeaders.CONTENT_LENGTH; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/Conditions.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/Conditions.java index defa340a..d27f4be1 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/Conditions.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/spring/Conditions.java @@ -16,13 +16,12 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring; import com.google.common.collect.Sets; +import java.util.HashSet; +import java.util.Set; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; -import java.util.HashSet; -import java.util.Set; - import static com.google.common.collect.Sets.newHashSet; /** 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 f9b2e394..7ab14e8b 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,15 +15,16 @@ */ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring; +import com.google.gson.Gson; +import com.nokia.cbam.lcn.v32.JSON; +import java.util.ArrayList; +import java.util.Collection; import org.springframework.boot.autoconfigure.http.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; -import java.util.ArrayList; -import java.util.Collection; - /** * Responsible for configuring the raw REST input conversion */ @@ -40,7 +41,8 @@ public class RealConfig { @Bean public HttpMessageConverters customConverters() { Collection<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); - GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(); + Gson gson = new JSON().getGson(); + GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(gson); messageConverters.add(gsonHttpMessageConverter); return new HttpMessageConverters(true, messageConverters); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/StoreLoader.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/StoreLoader.java index 643d0286..7ff44ea5 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/StoreLoader.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/StoreLoader.java @@ -16,8 +16,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util; -import org.apache.commons.codec.binary.Base64; - import java.io.ByteArrayInputStream; import java.io.InputStream; import java.security.KeyFactory; @@ -31,9 +29,11 @@ import java.util.Collection; import java.util.HashSet; import java.util.Optional; import java.util.Set; +import org.apache.commons.codec.binary.Base64; import static java.util.Optional.empty; import static java.util.Optional.of; + import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.slf4j.LoggerFactory.getLogger; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/SystemFunctions.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/SystemFunctions.java index 0bb63039..c7fac86a 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/SystemFunctions.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/SystemFunctions.java @@ -16,11 +16,12 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util; import com.google.common.io.ByteStreams; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; - +import io.reactivex.Observable; import java.io.InputStream; import java.io.PrintStream; +import java.util.NoSuchElementException; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; /** * Wrapper class for static method calls to core or core libraries. @@ -162,4 +163,17 @@ public class SystemFunctions { return HttpClients.createDefault(); } + /** + * Execute blocking first + * + * @param observable the observable + */ + public void blockingFirst(Observable<Void> observable) { + try { + observable.blockingFirst(); + } catch (NoSuchElementException e) { + //swallow void returns null :) + } + } + }
\ No newline at end of file diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java index dfb7adaf..f585a6a2 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java @@ -17,7 +17,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; import com.nokia.cbam.lcm.v32.model.*; import com.nokia.cbam.lcm.v32.model.VimInfo.VimInfoTypeEnum; - import java.util.*; /** 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 a7cabd52..5b99bad1 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 @@ -19,11 +19,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; import com.google.common.io.ByteStreams; 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; -import org.slf4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -33,14 +28,18 @@ import java.util.NoSuchElementException; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IPackageProvider; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import static com.google.common.base.Splitter.on; import static com.google.common.collect.Iterables.filter; -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; +import static org.springframework.http.MediaType.APPLICATION_OCTET_STREAM; /** @@ -116,7 +115,7 @@ public class CatalogManager { if (!isPackageReplicated(cbamVnfdId, cbamCatalogApi)) { try { ByteArrayOutputStream cbamPackage = getFileInZip(new ByteArrayInputStream(packageProvider.getPackage(csarId)), CBAM_PACKAGE_NAME_IN_ZIP); - return cbamCatalogApi.create(create(parse(APPLICATION_OCTET_STREAM), cbamPackage.toByteArray())).execute().body(); + return cbamCatalogApi.create(create(parse(APPLICATION_OCTET_STREAM.toString()), 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 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 index 6c70c26d..3a334361 100644 --- 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 @@ -15,33 +15,14 @@ */ 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 + * Responsible for providing SSL factories for AAI */ @Component -public class CbamSecurityProvider { - private static Logger logger = getLogger(CbamSecurityProvider.class); +public class CbamSecurityProvider extends GenericSecurityProvider { @Value("${trustedCertificates}") private String trustedCertificates; @Value("${skipCertificateVerification}") @@ -49,69 +30,18 @@ public class CbamSecurityProvider { @Value("${skipHostnameVerification}") private boolean skipHostnameVerification; - protected HostnameVerifier buildHostnameVerifier() { - if (skipHostnameVerification) { - return (hostname, session) -> true; - } else { - return new DefaultHostnameVerifier(); - } + @Override + protected boolean skipHostnameVerification() { + return skipHostnameVerification; } - 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); - } + @Override + protected boolean skipCertificateVerification() { + return skipCertificateVerification; } - 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.isEmpty()) { - 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); - } - } + @Override + protected String trustedCertificates() { + return trustedCertificates; } - - 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 837a25e5..df21e52d 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 @@ -18,6 +18,9 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; import com.google.common.annotations.VisibleForTesting; import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; +import java.io.IOException; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLSocketFactory; import okhttp3.*; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VnfmInfoProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions; @@ -27,10 +30,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLSocketFactory; -import java.io.IOException; - 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; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/DriverProperties.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/DriverProperties.java index d510ba25..b15d2850 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/DriverProperties.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/DriverProperties.java @@ -16,12 +16,11 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; +import java.util.Objects; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import java.util.Objects; - /** * Wraps the properties supplied to the servlet */ diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/GenericSecurityProvider.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/GenericSecurityProvider.java new file mode 100644 index 00000000..55440f56 --- /dev/null +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/GenericSecurityProvider.java @@ -0,0 +1,111 @@ +/* + * 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 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 javax.net.ssl.*; +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.util.StringUtils; + +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; + +public abstract class GenericSecurityProvider { + private static Logger logger = getLogger(GenericSecurityProvider.class); + + protected abstract boolean skipHostnameVerification(); + + protected abstract boolean skipCertificateVerification(); + + protected abstract String trustedCertificates(); + + public HostnameVerifier buildHostnameVerifier() { + if (skipHostnameVerification()) { + return (hostname, session) -> true; + } else { + return new DefaultHostnameVerifier(); + } + } + + public 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); + } + } + + public 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.isEmpty()) { + 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/JobManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/JobManager.java index 0d078d0b..277be9c4 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 @@ -24,7 +24,8 @@ import com.nokia.cbam.lcm.v32.api.VnfsApi; import com.nokia.cbam.lcm.v32.model.OperationExecution; import com.nokia.cbam.lcm.v32.model.OperationType; import com.nokia.cbam.lcm.v32.model.VnfInfo; -import org.apache.http.HttpStatus; +import java.util.*; +import javax.servlet.http.HttpServletResponse; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager; import org.onap.vnfmdriver.model.JobDetailInfo; import org.onap.vnfmdriver.model.JobDetailInfoResponseDescriptor; @@ -34,8 +35,9 @@ import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletResponse; -import java.util.*; +import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE; +import static java.util.Optional.empty; +import static java.util.Optional.of; import static com.google.common.base.Splitter.on; import static com.google.common.collect.Iterables.find; @@ -43,8 +45,6 @@ import static com.google.common.collect.Iterables.tryFind; import static com.google.common.collect.Lists.newArrayList; import static com.nokia.cbam.lcm.v32.model.OperationStatus.FAILED; import static com.nokia.cbam.lcm.v32.model.OperationStatus.STARTED; -import static java.util.Optional.empty; -import static java.util.Optional.of; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.SEPARATOR; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; @@ -109,11 +109,11 @@ public class JobManager { String jobId = vnfId + SEPARATOR + UUID.randomUUID().toString(); synchronized (this) { if (preparingForShutDown) { - response.setStatus(HttpStatus.SC_SERVICE_UNAVAILABLE); + response.setStatus(SC_SERVICE_UNAVAILABLE); throw buildFatalFailure(logger, "The service is preparing to shut down"); } if (!selfRegistrationManager.isReady()) { - response.setStatus(HttpStatus.SC_SERVICE_UNAVAILABLE); + response.setStatus(SC_SERVICE_UNAVAILABLE); throw buildFatalFailure(logger, "The service is not yet ready"); } } @@ -285,7 +285,7 @@ public class JobManager { } private boolean isCurrentOperationTriggeredByJob(String jobId, OperationExecutionsApi cbamOperationExecutionApi, OperationExecution operationExecution) { - if(OperationType.MODIFY_INFO.equals(operationExecution.getOperationType())){ + if (OperationType.MODIFY_INFO.equals(operationExecution.getOperationType())) { //the modify info is never triggered by an external job return false; } 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 36df12a6..1b813a39 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 @@ -23,6 +23,10 @@ import com.google.gson.JsonObject; import com.nokia.cbam.catalog.v1.model.CatalogAdapterVnfpackage; import com.nokia.cbam.lcm.v32.model.*; import com.nokia.cbam.lcm.v32.model.ScaleDirection; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import javax.servlet.http.HttpServletResponse; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VimInfoProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.StoreLoader; @@ -36,10 +40,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.Yaml; -import javax.servlet.http.HttpServletResponse; -import java.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import static java.lang.Integer.parseInt; +import static java.nio.charset.StandardCharsets.UTF_8; import static com.google.common.base.Splitter.on; import static com.google.common.collect.Iterables.find; @@ -49,8 +51,6 @@ import static com.nokia.cbam.lcm.v32.model.InstantiationState.INSTANTIATED; import static com.nokia.cbam.lcm.v32.model.OperationStatus.FINISHED; import static com.nokia.cbam.lcm.v32.model.OperationType.INSTANTIATE; import static com.nokia.cbam.lcm.v32.model.VimInfo.VimInfoTypeEnum.*; -import static java.lang.Integer.parseInt; -import static java.nio.charset.StandardCharsets.UTF_8; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.*; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions.systemFunctions; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider.NOKIA_LCM_API_VERSION; @@ -437,11 +437,12 @@ public class LifecycleManager { cbamRequest.setTerminationType(TerminationType.FORCEFUL); } } + cbamRequest.setAdditionalParams(new Gson().toJsonTree(jobInfo).getAsJsonObject()); 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 { - cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdDelete(vnfId, NOKIA_LCM_API_VERSION); + systemFunctions().blockingFirst(cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdDelete(vnfId, NOKIA_LCM_API_VERSION)); } }); } @@ -454,7 +455,7 @@ public class LifecycleManager { if (finishedOperation.getStatus() == FINISHED) { notificationManager.waitForTerminationToBeProcessed(finishedOperation.getId()); logger.info("Deleting VNF with {}", vnfId); - cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdDelete(vnfId, NOKIA_LCM_API_VERSION); + systemFunctions().blockingFirst(cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdDelete(vnfId, NOKIA_LCM_API_VERSION)); logger.info("VNF with {} has been deleted", vnfId); } else { 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 d6fbd33f..1485ef59 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 @@ -23,6 +23,9 @@ import com.google.gson.JsonObject; import com.nokia.cbam.lcm.v32.api.OperationExecutionsApi; import com.nokia.cbam.lcm.v32.api.VnfsApi; import com.nokia.cbam.lcm.v32.model.*; +import java.util.List; +import java.util.Optional; +import java.util.Set; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.INotificationSender; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; @@ -33,17 +36,14 @@ import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.Optional; -import java.util.Set; +import static java.util.Optional.empty; +import static java.util.Optional.of; import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.tryFind; import static com.google.common.collect.Sets.newConcurrentHashSet; import static com.google.common.collect.Sets.newHashSet; import static com.nokia.cbam.lcm.v32.model.OperationType.INSTANTIATE; -import static java.util.Optional.empty; -import static java.util.Optional.of; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.childElement; import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider.NOKIA_LCM_API_VERSION; @@ -192,6 +192,10 @@ public class LifecycleChangeNotificationManager implements ILifecycleChangeNotif } private Optional<ReportedAffectedConnectionPoints> buildAffectedCps(OperationExecution operationExecution) { + if (!isTerminal(operationExecution.getStatus())) { + //connection points can only be calculated after the operation has finished + return Optional.empty(); + } if (operationExecution.getOperationType() == OperationType.TERMINATE) { String terminationType = childElement(new Gson().toJsonTree(operationExecution.getOperationParams()).getAsJsonObject(), "terminationType").getAsString(); if (TerminationType.FORCEFUL.name().equals(terminationType)) { diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ProcessedNotification.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ProcessedNotification.java index 8f91604e..27007413 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ProcessedNotification.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ProcessedNotification.java @@ -16,7 +16,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification; import com.nokia.cbam.lcm.v32.model.OperationStatus; - import java.util.Objects; /** diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ReportedAffectedConnectionPoints.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ReportedAffectedConnectionPoints.java index 7bd79435..115685a4 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ReportedAffectedConnectionPoints.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/ReportedAffectedConnectionPoints.java @@ -16,7 +16,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification; import com.google.gson.annotations.SerializedName; - import java.util.HashSet; import java.util.Objects; import java.util.Set; |