diff options
author | MichaelMorris <michael.morris@est.tech> | 2019-07-31 13:28:48 +0000 |
---|---|---|
committer | MichaelMorris <michael.morris@est.tech> | 2019-07-31 13:28:48 +0000 |
commit | c91aac4825b873442f0636ef9f4cb4f3c1a675ef (patch) | |
tree | 20df306f212a898f176d6403a38e04534e39d8cf /adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org | |
parent | 47fb69ff7908ae75777a4f0c7e28c198f0e117ae (diff) |
Add oauth for calls from VNFM adapter to VNFM
Change-Id: I0e6ba16bbeab457ec0c1985e345e26f544434667
Issue-ID: SO-2169
Signed-off-by: MichaelMorris <michael.morris@est.tech>
Diffstat (limited to 'adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org')
7 files changed, 150 insertions, 87 deletions
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProvider.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProvider.java index 7a0df0fdba..cb8c7c4e56 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProvider.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProvider.java @@ -21,6 +21,7 @@ package org.onap.so.adapters.vnfmadapter.extclients.vnfm; import com.google.common.base.Optional; +import org.onap.aai.domain.yang.EsrVnfm; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse2001; @@ -37,63 +38,67 @@ public interface VnfmServiceProvider { /** * Invoke a get request for a VNF. * + * @param vnfm the VNFM in AAI * @param vnfSelfLink the link to the VNF in the VNFM * @return the VNF from the VNFM */ - Optional<InlineResponse201> getVnf(final String vnfSelfLink); + Optional<InlineResponse201> getVnf(final EsrVnfm vnfm, final String vnfSelfLink); /** * Invoke an instantiate request for a VNF. * + * @param vnfm the VNFM in AAI * @param vnfSelfLink the link to he VNF on the VNFM * @param instantiateVnfRequest the instantiate request * @return the operation ID of the instantiation operation */ - String instantiateVnf(final String vnfSelfLink, final InstantiateVnfRequest instantiateVnfRequest); + String instantiateVnf(final EsrVnfm vnfm, final String vnfSelfLink, + final InstantiateVnfRequest instantiateVnfRequest); /** * Invoke a notification subscription request to a VNFM. * - * @param vnfmId the ID of the VNFM + * @param vnfm the VNFM in AAI * @param subscriptionRequest * @return the response to the subscription request */ - InlineResponse2001 subscribeForNotifications(final String vnfmId, - final LccnSubscriptionRequest subscriptionRequest); + InlineResponse2001 subscribeForNotifications(final EsrVnfm vnfm, final LccnSubscriptionRequest subscriptionRequest); /** * Invoke a terminate request for a VNF. * + * @param vnfm the VNFM in AAI * @param vnfSelfLink the link to he VNF on the VNFM * @param terminateVnfRequest the terminate request * @return the operation ID of the termination operation */ - String terminateVnf(final String vnfSelfLink, final TerminateVnfRequest terminateVnfRequest); + String terminateVnf(final EsrVnfm vnfm, final String vnfSelfLink, final TerminateVnfRequest terminateVnfRequest); /** * Invoke a delete request for a VNF. * + * @param vnfm the VNFM in AAI * @param vnfSelfLink the link to he VNF on the VNFM * @return the operation ID of the instantiation operation */ - void deleteVnf(final String vnfSelfLink); + void deleteVnf(final EsrVnfm vnfm, final String vnfSelfLink); /** * Invoke a get request for a VNFM operation. * - * @param vnfmId the id of the VNFM in AAI + * @param vnfm the VNFM in AAI * @param operationId the id of the operation on the VNFM * @return the operation from the VNFM */ - Optional<InlineResponse200> getOperation(final String vnfmId, final String operationId); + Optional<InlineResponse200> getOperation(final EsrVnfm vnfm, final String operationId); /** * Invoke a create request to a VNFM * - * @param vnfmId the id of the VNFM in AAI + * @param vnfm the VNFM in AAI * @param createVnfRequest the parameters for creating a VNF * @return the newly created VNF */ - Optional<InlineResponse201> createVnf(final String vnfmId, final CreateVnfRequest createVnfRequest); + Optional<InlineResponse201> createVnf(final EsrVnfm vnfm, final CreateVnfRequest createVnfRequest); } diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java index ab631837db..a604f9a6b9 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderConfiguration.java @@ -29,14 +29,19 @@ import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.util.Iterator; import java.util.ListIterator; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import javax.net.ssl.SSLContext; +import org.apache.commons.lang3.StringUtils; import org.apache.http.client.HttpClient; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContextBuilder; +import org.onap.aai.domain.yang.EsrSystemInfo; +import org.onap.aai.domain.yang.EsrVnfm; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.JSON; import org.onap.so.configuration.rest.BasicHttpHeadersProvider; -import org.onap.so.configuration.rest.HttpHeadersProvider; import org.onap.so.logging.jaxrs.filter.SpringClientFilter; import org.onap.so.rest.service.HttpRestServiceProvider; import org.onap.so.rest.service.HttpRestServiceProviderImpl; @@ -45,7 +50,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -53,6 +57,8 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.GsonHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.security.oauth2.client.OAuth2RestTemplate; +import org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails; import org.springframework.web.client.RestTemplate; /** @@ -62,26 +68,63 @@ import org.springframework.web.client.RestTemplate; public class VnfmServiceProviderConfiguration { private static final Logger logger = LoggerFactory.getLogger(VnfmServiceProviderConfiguration.class); + private Map<String, HttpRestServiceProvider> mapOfVnfmIdToHttpRestServiceProvider = new ConcurrentHashMap<>(); @Value("${http.client.ssl.trust-store:#{null}}") - private Resource keyStore; + private Resource trustStore; @Value("${http.client.ssl.trust-store-password:#{null}}") - private String keyStorePassword; + private String trustPassword; - @Bean(name = "vnfmServiceProvider") - public HttpRestServiceProvider httpRestServiceProvider( - @Qualifier(CONFIGURABLE_REST_TEMPLATE) @Autowired final RestTemplate restTemplate) { - return getHttpRestServiceProvider(restTemplate, new BasicHttpHeadersProvider()); + /** + * This property is only intended to be temporary until the AAI schema is updated to support setting the endpoint + */ + @Value("${vnfmadapter.temp.vnfm.oauth.endpoint:#{null}}") + private String oauthEndpoint; + + @Qualifier(CONFIGURABLE_REST_TEMPLATE) + @Autowired() + private RestTemplate defaultRestTemplate; + + public HttpRestServiceProvider getHttpRestServiceProvider(final EsrVnfm vnfm) { + if (!mapOfVnfmIdToHttpRestServiceProvider.containsKey(vnfm.getVnfmId())) { + mapOfVnfmIdToHttpRestServiceProvider.put(vnfm.getVnfmId(), createHttpRestServiceProvider(vnfm)); + } + return mapOfVnfmIdToHttpRestServiceProvider.get(vnfm.getVnfmId()); } - private HttpRestServiceProvider getHttpRestServiceProvider(final RestTemplate restTemplate, - final HttpHeadersProvider httpHeadersProvider) { + private HttpRestServiceProvider createHttpRestServiceProvider(final EsrVnfm vnfm) { + final RestTemplate restTemplate = createRestTemplate(vnfm); setGsonMessageConverter(restTemplate); - if (keyStore != null) { + if (trustStore != null) { setTrustStore(restTemplate); } removeSpringClientFilter(restTemplate); - return new HttpRestServiceProviderImpl(restTemplate, httpHeadersProvider); + return new HttpRestServiceProviderImpl(restTemplate, new BasicHttpHeadersProvider()); + } + + private RestTemplate createRestTemplate(final EsrVnfm vnfm) { + if (vnfm != null) { + for (final EsrSystemInfo esrSystemInfo : vnfm.getEsrSystemInfoList().getEsrSystemInfo()) { + if (!StringUtils.isEmpty(esrSystemInfo.getUserName()) + && !StringUtils.isEmpty(esrSystemInfo.getPassword())) { + return createOAuth2RestTemplate(esrSystemInfo); + } + } + } + return defaultRestTemplate; + } + + private OAuth2RestTemplate createOAuth2RestTemplate(final EsrSystemInfo esrSystemInfo) { + logger.debug("Getting OAuth2RestTemplate ..."); + final ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails(); + resourceDetails.setId(UUID.randomUUID().toString()); + resourceDetails.setClientId(esrSystemInfo.getUserName()); + resourceDetails.setClientSecret(esrSystemInfo.getPassword()); + resourceDetails.setAccessTokenUri( + oauthEndpoint == null ? esrSystemInfo.getServiceUrl().replace("vnflcm/v1", "oauth/token") + : oauthEndpoint); + resourceDetails.setGrantType("client_credentials"); + return new OAuth2RestTemplate(resourceDetails); } private void setGsonMessageConverter(final RestTemplate restTemplate) { @@ -98,9 +141,9 @@ public class VnfmServiceProviderConfiguration { private void setTrustStore(final RestTemplate restTemplate) { SSLContext sslContext; try { - sslContext = new SSLContextBuilder().loadTrustMaterial(keyStore.getURL(), keyStorePassword.toCharArray()) - .build(); - logger.info("Setting truststore: {}", keyStore.getURL()); + sslContext = + new SSLContextBuilder().loadTrustMaterial(trustStore.getURL(), trustPassword.toCharArray()).build(); + logger.info("Setting truststore: {}", trustStore.getURL()); final SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext); final HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build(); final HttpComponentsClientHttpRequestFactory factory = diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java index c470008d08..948f5fc269 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/vnfm/VnfmServiceProviderImpl.java @@ -21,6 +21,7 @@ package org.onap.so.adapters.vnfmadapter.extclients.vnfm; import com.google.common.base.Optional; +import org.onap.aai.domain.yang.EsrVnfm; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse2001; @@ -33,7 +34,6 @@ import org.onap.so.rest.service.HttpRestServiceProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @@ -42,28 +42,29 @@ import org.springframework.stereotype.Service; public class VnfmServiceProviderImpl implements VnfmServiceProvider { private static final Logger logger = LoggerFactory.getLogger(VnfmServiceProviderImpl.class); - private final HttpRestServiceProvider httpServiceProvider; + private final VnfmServiceProviderConfiguration vnfmServiceProviderConfiguration; private final VnfmUrlProvider urlProvider; @Autowired public VnfmServiceProviderImpl(final VnfmUrlProvider urlProvider, - @Qualifier("vnfmServiceProvider") final HttpRestServiceProvider httpServiceProvider) { - this.httpServiceProvider = httpServiceProvider; + VnfmServiceProviderConfiguration vnfmServiceProviderConfiguration) { + this.vnfmServiceProviderConfiguration = vnfmServiceProviderConfiguration; this.urlProvider = urlProvider; } @Override - public Optional<InlineResponse201> getVnf(final String vnfSelfLink) { - return httpServiceProvider.get(vnfSelfLink, InlineResponse201.class); + public Optional<InlineResponse201> getVnf(final EsrVnfm vnfm, final String vnfSelfLink) { + return getHttpServiceProvider(vnfm).get(vnfSelfLink, InlineResponse201.class); } @Override - public String instantiateVnf(final String vnfSelfLink, final InstantiateVnfRequest instantiateVnfRequest) { + public String instantiateVnf(final EsrVnfm vnfm, final String vnfSelfLink, + final InstantiateVnfRequest instantiateVnfRequest) { logger.debug("Sending instantiate request " + instantiateVnfRequest + " to : " + vnfSelfLink); ResponseEntity<Void> response = null; try { - response = httpServiceProvider.postHttpRequest(instantiateVnfRequest, vnfSelfLink + "/instantiate", + response = getHttpServiceProvider(vnfm).postHttpRequest(instantiateVnfRequest, vnfSelfLink + "/instantiate", Void.class); } catch (final Exception exception) { final String errorMessage = @@ -82,22 +83,22 @@ public class VnfmServiceProviderImpl implements VnfmServiceProvider { } @Override - public InlineResponse2001 subscribeForNotifications(final String vnfmId, + public InlineResponse2001 subscribeForNotifications(final EsrVnfm vnfm, final LccnSubscriptionRequest subscriptionRequest) { logger.info("Subscribing for notifications {}", subscriptionRequest); - final String url = urlProvider.getSubscriptionsUrl(vnfmId); + final String url = urlProvider.getSubscriptionsUrl(vnfm.getVnfmId()); ResponseEntity<InlineResponse2001> response = null; try { - response = httpServiceProvider.postHttpRequest(subscriptionRequest, url, InlineResponse2001.class); + response = getHttpServiceProvider(vnfm).postHttpRequest(subscriptionRequest, url, InlineResponse2001.class); logger.info("Subscribing for notifications response {}", response); } catch (final Exception exception) { final String errorMessage = - "Subscription to VNFM " + vnfmId + " resulted in exception" + subscriptionRequest; + "Subscription to VNFM " + vnfm.getVnfmId() + " resulted in exception" + subscriptionRequest; logger.error(errorMessage, exception); throw new VnfmRequestFailureException(errorMessage, exception); } if (response.getStatusCode() != HttpStatus.CREATED) { - final String errorMessage = "Subscription to VNFM " + vnfmId + " returned status code: " + final String errorMessage = "Subscription to VNFM " + vnfm.getVnfmId() + " returned status code: " + response.getStatusCode() + ", request: " + subscriptionRequest; logger.error(errorMessage); throw new VnfmRequestFailureException(errorMessage); @@ -106,12 +107,14 @@ public class VnfmServiceProviderImpl implements VnfmServiceProvider { } @Override - public String terminateVnf(final String vnfSelfLink, final TerminateVnfRequest terminateVnfRequest) { + public String terminateVnf(final EsrVnfm vnfm, final String vnfSelfLink, + final TerminateVnfRequest terminateVnfRequest) { logger.debug("Sending terminate request " + terminateVnfRequest + " to : " + vnfSelfLink); ResponseEntity<Void> response = null; try { - response = httpServiceProvider.postHttpRequest(terminateVnfRequest, vnfSelfLink + "/terminate", Void.class); + response = getHttpServiceProvider(vnfm).postHttpRequest(terminateVnfRequest, vnfSelfLink + "/terminate", + Void.class); } catch (final Exception exception) { final String errorMessage = "Terminate request to " + vnfSelfLink + " resulted in exception" + terminateVnfRequest; @@ -130,9 +133,9 @@ public class VnfmServiceProviderImpl implements VnfmServiceProvider { } @Override - public void deleteVnf(final String vnfSelfLink) { + public void deleteVnf(final EsrVnfm vnfm, final String vnfSelfLink) { logger.debug("Sending delete request to : " + vnfSelfLink); - final ResponseEntity<Void> response = httpServiceProvider.deleteHttpRequest(vnfSelfLink, Void.class); + final ResponseEntity<Void> response = getHttpServiceProvider(vnfm).deleteHttpRequest(vnfSelfLink, Void.class); if (response.getStatusCode() != HttpStatus.NO_CONTENT) { throw new VnfmRequestFailureException( "Delete request to " + vnfSelfLink + " return status code: " + response.getStatusCode()); @@ -140,23 +143,27 @@ public class VnfmServiceProviderImpl implements VnfmServiceProvider { } @Override - public Optional<InlineResponse200> getOperation(final String vnfmId, final String operationId) { - final String url = urlProvider.getOperationUrl(vnfmId, operationId); - return httpServiceProvider.get(url, InlineResponse200.class); + public Optional<InlineResponse200> getOperation(final EsrVnfm vnfm, final String operationId) { + final String url = urlProvider.getOperationUrl(vnfm.getVnfmId(), operationId); + return getHttpServiceProvider(vnfm).get(url, InlineResponse200.class); } @Override - public Optional<InlineResponse201> createVnf(final String vnfmId, final CreateVnfRequest createVnfRequest) { - final String url = urlProvider.getCreationUrl(vnfmId); + public Optional<InlineResponse201> createVnf(final EsrVnfm vnfm, final CreateVnfRequest createVnfRequest) { + final String url = urlProvider.getCreationUrl(vnfm.getVnfmId()); logger.debug("Sending create request {} to : {}", createVnfRequest, url); try { - return httpServiceProvider.post(createVnfRequest, url, InlineResponse201.class); + return getHttpServiceProvider(vnfm).post(createVnfRequest, url, InlineResponse201.class); } catch (final Exception exception) { final String errorMessage = - "Create request to vnfm:" + vnfmId + " resulted in exception" + createVnfRequest; + "Create request to vnfm:" + vnfm.getVnfmId() + " resulted in exception" + createVnfRequest; logger.error(errorMessage, exception); throw new VnfmRequestFailureException(errorMessage, exception); } } + private HttpRestServiceProvider getHttpServiceProvider(final EsrVnfm vnfm) { + return vnfmServiceProviderConfiguration.getHttpRestServiceProvider(vnfm); + } + } diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/jobmanagement/JobManager.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/jobmanagement/JobManager.java index 537bb77b32..19c8d22030 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/jobmanagement/JobManager.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/jobmanagement/JobManager.java @@ -25,6 +25,7 @@ import com.google.common.base.Optional; import com.google.common.collect.Maps; import java.util.Map; import java.util.UUID; +import org.onap.so.adapters.vnfmadapter.extclients.aai.AaiServiceProvider; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.VnfmServiceProvider; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200; import org.onap.so.adapters.vnfmadapter.rest.exceptions.JobNotFoundException; @@ -45,10 +46,12 @@ public class JobManager { private static Logger logger = getLogger(JobManager.class); private final Map<String, VnfmOperation> mapOfJobIdToVnfmOperation = Maps.newConcurrentMap(); private final VnfmServiceProvider vnfmServiceProvider; + private final AaiServiceProvider aaiServiceProvider; @Autowired - JobManager(final VnfmServiceProvider vnfmServiceProvider) { + JobManager(final VnfmServiceProvider vnfmServiceProvider, final AaiServiceProvider aaiServiceProvider) { this.vnfmServiceProvider = vnfmServiceProvider; + this.aaiServiceProvider = aaiServiceProvider; } /** @@ -90,8 +93,8 @@ public class JobManager { } try { - final Optional<InlineResponse200> operationOptional = - vnfmServiceProvider.getOperation(vnfmOperation.getVnfmId(), vnfmOperation.getOperationId()); + final Optional<InlineResponse200> operationOptional = vnfmServiceProvider.getOperation( + aaiServiceProvider.invokeGetVnfm(vnfmOperation.getVnfmId()), vnfmOperation.getOperationId()); if (!operationOptional.isPresent()) { return response.operationStatusRetrievalStatus(OperationStatusRetrievalStatusEnum.OPERATION_NOT_FOUND); diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java index fa2fa30b4a..0aad91e5be 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/lifecycle/LifecycleManager.java @@ -82,16 +82,15 @@ public class LifecycleManager { */ public CreateVnfResponse createVnf(final String vnfIdInAai, final CreateVnfRequest request) { final GenericVnf genericVnf = getGenericVnfFromAai(vnfIdInAai); - checkIfVnfAlreadyExistsInVnfm(genericVnf); - EsrVnfm vnfm = aaiHelper.getAssignedVnfm(genericVnf); + checkIfVnfAlreadyExistsInVnfm(vnfm, genericVnf); + if (vnfm == null) { vnfm = aaiHelper.selectVnfm(genericVnf); aaiHelper.addRelationshipFromGenericVnfToVnfm(genericVnf, vnfm.getVnfmId()); } aaiHelper.addRelationshipFromGenericVnfToTenant(genericVnf, request.getTenant()); - final InlineResponse201 vnfmResponse = - sendCreateRequestToVnfm(request, genericVnf, vnfIdInAai, vnfm.getVnfmId()); + final InlineResponse201 vnfmResponse = sendCreateRequestToVnfm(request, genericVnf, vnfIdInAai, vnfm); logger.info("Create response: {}", vnfmResponse); @@ -102,8 +101,8 @@ public class LifecycleManager { final OamIpAddressSource oamIpAddressSource = extractOamIpAddressSource(request); aaiHelper.setOamIpAddressSource(vnfIdInVnfm, oamIpAddressSource); - createNotificationSubscription(vnfm.getVnfmId(), vnfIdInVnfm); - final String operationId = sendInstantiateRequestToVnfm(vnfm, genericVnf, request, vnfIdInAai, vnfIdInVnfm); + createNotificationSubscription(vnfm, vnfIdInVnfm); + final String operationId = sendInstantiateRequestToVnfm(vnfm, genericVnf, request); final String jobId = jobManager.createJob(vnfm.getVnfmId(), operationId, false); final CreateVnfResponse response = new CreateVnfResponse(); @@ -133,11 +132,11 @@ public class LifecycleManager { } } - private void checkIfVnfAlreadyExistsInVnfm(final GenericVnf genericVnf) { - if (genericVnf.getSelflink() != null && !genericVnf.getSelflink().isEmpty()) { + private void checkIfVnfAlreadyExistsInVnfm(final EsrVnfm vnfm, final GenericVnf genericVnf) { + if (genericVnf.getSelflink() != null && !genericVnf.getSelflink().isEmpty() && vnfm != null) { Optional<InlineResponse201> response = Optional.absent(); try { - response = vnfmServiceProvider.getVnf(genericVnf.getSelflink()); + response = vnfmServiceProvider.getVnf(vnfm, genericVnf.getSelflink()); } catch (final Exception exception) { logger.debug("Ignoring invalid self link in generic vnf", exception); } @@ -149,7 +148,7 @@ public class LifecycleManager { } private InlineResponse201 sendCreateRequestToVnfm(final CreateVnfRequest aaiRequest, final GenericVnf genericVnf, - final String vnfIdInAai, final String vnfmId) { + final String vnfIdInAai, final EsrVnfm vnfm) { logger.debug("Sending a create request to SVNFM " + aaiRequest); final org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest vnfmRequest = new org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest(); @@ -159,7 +158,7 @@ public class LifecycleManager { vnfmRequest.setVnfInstanceName(aaiRequest.getName().replaceAll(" ", "_")); vnfmRequest.setVnfInstanceDescription(vnfIdInAai); - final Optional<InlineResponse201> optionalResponse = vnfmServiceProvider.createVnf(vnfmId, vnfmRequest); + final Optional<InlineResponse201> optionalResponse = vnfmServiceProvider.createVnf(vnfm, vnfmRequest); try { return optionalResponse.get(); @@ -170,24 +169,24 @@ public class LifecycleManager { } } - private void createNotificationSubscription(final String vnfmId, final String vnfId) { + private void createNotificationSubscription(final EsrVnfm vnfm, final String vnfId) { try { final LccnSubscriptionRequest subscriptionRequest = vnfmHelper.createNotificationSubscriptionRequest(vnfId); - vnfmServiceProvider.subscribeForNotifications(vnfmId, subscriptionRequest); + vnfmServiceProvider.subscribeForNotifications(vnfm, subscriptionRequest); } catch (final Exception exception) { - logger.warn("Subscription for notifications to VNFM: " + vnfmId + " for VNF " + vnfId + logger.warn("Subscription for notifications to VNFM: " + vnfm.getVnfmId() + " for VNF " + vnfId + " failed. AAI will not be updated unless the VNFM is configured by other means to send notifications relating to this VNF", exception); } } private String sendInstantiateRequestToVnfm(final EsrVnfm vnfm, final GenericVnf genericVnf, - final CreateVnfRequest createVnfRequest, final String vnfIdInAai, final String vnfIdInVnfm) { + final CreateVnfRequest createVnfRequest) { final InstantiateVnfRequest instantiateVnfRequest = vnfmHelper.createInstantiateRequest(createVnfRequest.getTenant(), createVnfRequest, packageProvider.getFlavourId(genericVnf.getModelVersionId())); - final String jobId = vnfmServiceProvider.instantiateVnf(genericVnf.getSelflink(), instantiateVnfRequest); + final String jobId = vnfmServiceProvider.instantiateVnf(vnfm, genericVnf.getSelflink(), instantiateVnfRequest); logger.info("Instantiate VNF request successfully sent to " + genericVnf.getSelflink()); return jobId; @@ -201,18 +200,18 @@ public class LifecycleManager { */ public DeleteVnfResponse deleteVnf(final String vnfIdInAai) { final GenericVnf genericVnf = getGenericVnfFromAai(vnfIdInAai); - final String vnfmId = getIdOfAssignedVnfm(genericVnf); + final EsrVnfm vnfm = getAssignedVnfm(genericVnf); - final String operationId = sendTerminateRequestToVnfm(genericVnf); - final String jobId = jobManager.createJob(vnfmId, operationId, true); + final String operationId = sendTerminateRequestToVnfm(vnfm, genericVnf); + final String jobId = jobManager.createJob(vnfm.getVnfmId(), operationId, true); return new DeleteVnfResponse().jobId(jobId); } - private String sendTerminateRequestToVnfm(final GenericVnf genericVnf) { + private String sendTerminateRequestToVnfm(final EsrVnfm vnfm, final GenericVnf genericVnf) { final TerminateVnfRequest terminateVnfRequest = new TerminateVnfRequest(); terminateVnfRequest.setTerminationType(TerminationTypeEnum.FORCEFUL); - return vnfmServiceProvider.terminateVnf(genericVnf.getSelflink(), terminateVnfRequest); + return vnfmServiceProvider.terminateVnf(vnfm, genericVnf.getSelflink(), terminateVnfRequest); } private GenericVnf getGenericVnfFromAai(final String vnfIdInAai) { @@ -224,11 +223,11 @@ public class LifecycleManager { return genericVnf; } - private String getIdOfAssignedVnfm(final GenericVnf genericVnf) { - final String vnfmId = aaiHelper.getIdOfAssignedVnfm(genericVnf); - if (vnfmId == null) { + private EsrVnfm getAssignedVnfm(final GenericVnf genericVnf) { + final EsrVnfm vnfm = aaiHelper.getAssignedVnfm(genericVnf); + if (vnfm == null) { throw new VnfmNotFoundException("No VNFM found in AAI for VNF " + genericVnf.getVnfId()); } - return vnfmId; + return vnfm; } } diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/notificationhandling/NotificationHandler.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/notificationhandling/NotificationHandler.java index 93c7ea91ff..eb912c8775 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/notificationhandling/NotificationHandler.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/notificationhandling/NotificationHandler.java @@ -156,7 +156,7 @@ public class NotificationHandler implements Runnable { boolean deleteSuccessful = false; try { - vnfmServiceProvider.deleteVnf(genericVnf.getSelflink()); + vnfmServiceProvider.deleteVnf(aaiHelper.getAssignedVnfm(genericVnf), genericVnf.getSelflink()); deleteSuccessful = true; } finally { jobManager.notificationProcessedForOperation(vnfLcmOperationOccurrenceNotification.getVnfLcmOpOccId(), diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/Sol003LcnContoller.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/Sol003LcnContoller.java index 9cb09e6261..f97822a0cd 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/Sol003LcnContoller.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/Sol003LcnContoller.java @@ -20,6 +20,14 @@ package org.onap.so.adapters.vnfmadapter.rest; +import static org.onap.so.adapters.vnfmadapter.Constants.BASE_URL; +import static org.onap.so.adapters.vnfmadapter.Constants.OPERATION_NOTIFICATION_ENDPOINT; +import static org.slf4j.LoggerFactory.getLogger; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import javax.ws.rs.core.MediaType; +import org.onap.aai.domain.yang.EsrVnfm; +import org.onap.aai.domain.yang.GenericVnf; import org.onap.so.adapters.vnfmadapter.extclients.aai.AaiHelper; import org.onap.so.adapters.vnfmadapter.extclients.aai.AaiServiceProvider; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.VnfmServiceProvider; @@ -39,12 +47,6 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import javax.ws.rs.core.MediaType; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import static org.onap.so.adapters.vnfmadapter.Constants.BASE_URL; -import static org.onap.so.adapters.vnfmadapter.Constants.OPERATION_NOTIFICATION_ENDPOINT; -import static org.slf4j.LoggerFactory.getLogger; /** * Controller for handling notifications from the VNFM (Virtual Network Function Manager). @@ -118,8 +120,12 @@ public class Sol003LcnContoller { private InlineResponse201 getVnfInstance( final VnfLcmOperationOccurrenceNotification vnfLcmOperationOccurrenceNotification) { - return vnfmServiceProvider.getVnf(vnfLcmOperationOccurrenceNotification.getLinks().getVnfInstance().getHref()) - .get(); + GenericVnf vnfInAai = aaiServiceProvider + .invokeQueryGenericVnf(vnfLcmOperationOccurrenceNotification.getLinks().getVnfInstance().getHref()) + .getGenericVnf().get(0); + EsrVnfm vnfm = aaiHelper.getAssignedVnfm(vnfInAai); + return vnfmServiceProvider + .getVnf(vnfm, vnfLcmOperationOccurrenceNotification.getLinks().getVnfInstance().getHref()).get(); } } |