diff options
Diffstat (limited to 'adapters/mso-ve-vnfm-adapter/src/main')
6 files changed, 155 insertions, 5 deletions
diff --git a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/aai/AaiConnection.java b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/aai/AaiConnection.java index 9b2a8c3d62..fd20a0f78e 100644 --- a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/aai/AaiConnection.java +++ b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/aai/AaiConnection.java @@ -26,8 +26,10 @@ import java.util.List; import java.util.Optional; import org.apache.logging.log4j.util.Strings; import org.onap.aai.domain.yang.EsrSystemInfo; +import org.onap.aai.domain.yang.EsrSystemInfoList; import org.onap.aai.domain.yang.EsrVnfm; import org.onap.aai.domain.yang.EsrVnfmList; +import org.onap.aai.domain.yang.v18.GenericVnf; import org.onap.so.adapters.vevnfm.exception.VeVnfmException; import org.onap.so.client.aai.AAIObjectType; import org.onap.so.client.aai.AAIResourcesClient; @@ -72,7 +74,7 @@ public class AaiConnection { if (response.isPresent()) { final EsrVnfmList esrVnfmList = response.get(); - logger.info("The VNFM replied with: {}", esrVnfmList); + logger.info("The AAI ESR replied with: {}", esrVnfmList); final List<EsrVnfm> esrVnfm = esrVnfmList.getEsrVnfm(); final List<EsrSystemInfo> infos = new LinkedList<>(); @@ -94,10 +96,28 @@ public class AaiConnection { if (response.isPresent()) { final EsrVnfm esrVnfm = response.get(); - logger.info("The VNFM replied with: {}", esrVnfm); - return esrVnfm.getEsrSystemInfoList().getEsrSystemInfo(); + logger.info("The AAI ESR replied with: {}", esrVnfm); + final EsrSystemInfoList esrSystemInfoList = esrVnfm.getEsrSystemInfoList(); + + if (esrSystemInfoList != null) { + return esrSystemInfoList.getEsrSystemInfo(); + } } return Collections.emptyList(); } + + public boolean checkGenericVnfId(final String vnfId) { + final AAIResourcesClient resourcesClient = new AAIResourcesClient(); + final AAIResourceUri resourceUri = AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId); + final Optional<GenericVnf> response = resourcesClient.get(GenericVnf.class, resourceUri); + + if (response.isPresent()) { + final GenericVnf vnf = response.get(); + logger.info("The AAI replied with: {}", vnf); + return vnfId.equals(vnf.getVnfId()); + } + + return false; + } } diff --git a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/constant/VnfNotificationFilterType.java b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/constant/VnfNotificationFilterType.java new file mode 100644 index 0000000000..09a6ae186d --- /dev/null +++ b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/constant/VnfNotificationFilterType.java @@ -0,0 +1,41 @@ +/*- + * ============LICENSE_START======================================================= + * SO + * ================================================================================ + * Copyright (C) 2020 Samsung. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.vevnfm.constant; + +/** + * Which incoming Notification with particular VNF id is supported + */ +public enum VnfNotificationFilterType { + /** + * None + */ + NONE, + + /** + * Only those which are valid in AAI + */ + AAI_CHECKED, + + /** + * All + */ + ALL +} diff --git a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/controller/NotificationController.java b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/controller/NotificationController.java index cb324c32a9..e187ec99d0 100644 --- a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/controller/NotificationController.java +++ b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/controller/NotificationController.java @@ -20,11 +20,14 @@ package org.onap.so.adapters.vevnfm.controller; +import org.onap.so.adapters.vevnfm.constant.VnfNotificationFilterType; import org.onap.so.adapters.vevnfm.service.DmaapService; +import org.onap.so.adapters.vevnfm.service.VnfAaiChecker; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.VnfLcmOperationOccurrenceNotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -35,13 +38,32 @@ public class NotificationController { private static final Logger logger = LoggerFactory.getLogger(NotificationController.class); + private final VnfNotificationFilterType vnfFilterType; + private final VnfAaiChecker vnfAaiChecker; + private final DmaapService dmaapService; + @Autowired - private DmaapService dmaapService; + public NotificationController( + @Value("${notification.vnf-filter-type}") final VnfNotificationFilterType vnfFilterType, + final VnfAaiChecker vnfAaiChecker, final DmaapService dmaapService) { + this.vnfFilterType = vnfFilterType; + this.vnfAaiChecker = vnfAaiChecker; + this.dmaapService = dmaapService; + } @PostMapping("${vnfm.notification}") public ResponseEntity receiveNotification(@RequestBody final VnfLcmOperationOccurrenceNotification notification) { logger.info("Notification received {}", notification); - dmaapService.send(notification); + + final String vnfInstanceId = notification.getVnfInstanceId(); + + if (vnfAaiChecker.vnfCheck(vnfFilterType, vnfInstanceId)) { + logger.info("The info with the VNF id '{}' is sent to DMaaP", vnfInstanceId); + dmaapService.send(notification); + } else { + logger.info("This VNF id '{}' is not supported", vnfInstanceId); + } + return ResponseEntity.ok().build(); } } diff --git a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/SubscriberService.java b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/SubscriberService.java index 9760584d7a..d2cf4833ba 100644 --- a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/SubscriberService.java +++ b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/SubscriberService.java @@ -20,6 +20,7 @@ package org.onap.so.adapters.vevnfm.service; +import com.google.gson.Gson; import com.squareup.okhttp.Credentials; import java.util.Collections; import org.apache.logging.log4j.util.Strings; @@ -29,6 +30,7 @@ import org.onap.so.adapters.vevnfm.provider.AuthorizationHeadersProvider; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.SubscriptionsAuthentication; import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.SubscriptionsAuthenticationParamsBasic; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.SubscriptionsFilter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -36,6 +38,11 @@ import org.springframework.stereotype.Service; @Service public class SubscriberService { + private static final Gson gson = new Gson(); + + @Value("${vevnfmadapter.vnf-filter-json}") + private String vnfFilter; + @Value("${vevnfmadapter.endpoint}") private String endpoint; @@ -91,6 +98,7 @@ public class SubscriberService { private LccnSubscriptionRequest createRequest() { final LccnSubscriptionRequest request = new LccnSubscriptionRequest(); + request.filter(getFilter()); request.callbackUri(getCallbackUri()); final SubscriptionsAuthenticationParamsBasic paramsBasic = new SubscriptionsAuthenticationParamsBasic(); final SubscriptionsAuthentication authentication = new SubscriptionsAuthentication(); @@ -103,6 +111,10 @@ public class SubscriberService { return request; } + private SubscriptionsFilter getFilter() { + return gson.fromJson(vnfFilter, SubscriptionsFilter.class); + } + private String getCallbackUri() { return endpoint + notification; } diff --git a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/VnfAaiChecker.java b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/VnfAaiChecker.java new file mode 100644 index 0000000000..02a9c1855c --- /dev/null +++ b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/VnfAaiChecker.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * SO + * ================================================================================ + * Copyright (C) 2020 Samsung. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.vevnfm.service; + +import org.onap.so.adapters.vevnfm.aai.AaiConnection; +import org.onap.so.adapters.vevnfm.constant.VnfNotificationFilterType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class VnfAaiChecker { + + private final AaiConnection aaiConnection; + + @Autowired + public VnfAaiChecker(final AaiConnection aaiConnection) { + this.aaiConnection = aaiConnection; + } + + public boolean vnfCheck(final VnfNotificationFilterType filterType, final String vnfId) { + switch (filterType) { + case ALL: + return true; + case AAI_CHECKED: + return aaiConnection.checkGenericVnfId(vnfId); + case NONE: + return false; + default: + throw new IllegalArgumentException( + "The value of VnfNotificationFilterType is not supported: " + filterType); + } + } +} diff --git a/adapters/mso-ve-vnfm-adapter/src/main/resources/application.yaml b/adapters/mso-ve-vnfm-adapter/src/main/resources/application.yaml index a2a33bfb5c..c69c95187a 100644 --- a/adapters/mso-ve-vnfm-adapter/src/main/resources/application.yaml +++ b/adapters/mso-ve-vnfm-adapter/src/main/resources/application.yaml @@ -18,6 +18,7 @@ server: port: 9098 vevnfmadapter: + vnf-filter-json: '{notificationTypes:[VnfLcmOperationOccurrenceNotification],operationStates:[COMPLETED]}' endpoint: http://so-ve-vnfm-adapter.onap:9098 mso: @@ -32,6 +33,9 @@ vnfm: subscription: /vnflcm/v1/subscriptions notification: /lcm/v1/vnf/instances/notifications +notification: + vnf-filter-type: NONE + dmaap: endpoint: http://message-router.onap:30227 topic: /events/unauthenticated.DCAE_CL_OUTPUT |