aboutsummaryrefslogtreecommitdiffstats
path: root/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services
diff options
context:
space:
mode:
authorLathish <lathishbabu.ganesan@est.tech>2019-04-26 08:46:13 +0000
committerLathish <lathishbabu.ganesan@est.tech>2019-04-26 08:46:13 +0000
commitc0b9d01cbc3a3d3b1ce32178394e8fd74a10de65 (patch)
tree816a6baad581f3a7655724662de6616dff74bd0f /vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services
parent0164ebaeecf27e635b3b4097034780dbb8be7c74 (diff)
VNFM simulator implementation for instantiate flow
Issue-ID: SO-1773 Change-Id: I710fe6905d650df29f7550f4eafde2f672301bc4 Signed-off-by: Lathish <lathishbabu.ganesan@est.tech>
Diffstat (limited to 'vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services')
-rw-r--r--vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/OperationProgressor.java296
-rw-r--r--vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SubscriptionService.java21
-rw-r--r--vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java148
-rw-r--r--vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java39
4 files changed, 429 insertions, 75 deletions
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/OperationProgressor.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/OperationProgressor.java
new file mode 100644
index 0000000000..d231e1b098
--- /dev/null
+++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/OperationProgressor.java
@@ -0,0 +1,296 @@
+package org.onap.svnfm.simulator.services;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.ws.rs.core.MediaType;
+import org.apache.commons.codec.binary.Base64;
+import org.modelmapper.ModelMapper;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.ApiResponse;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantRequest;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantsAddResources;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantsAddResources.TypeEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantsLinks;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantsLinksVnfLcmOpOcc;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201AddResources;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201VimConnections;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.ApiClient;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.ApiException;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.api.DefaultApi;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.LcnVnfLcmOperationOccurrenceNotificationAffectedVnfcs;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.LcnVnfLcmOperationOccurrenceNotificationAffectedVnfcs.ChangeTypeEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.LcnVnfLcmOperationOccurrenceNotificationLinks;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.LcnVnfLcmOperationOccurrenceNotificationLinksVnfInstance;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.VnfLcmOperationOccurrenceNotification;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.VnfLcmOperationOccurrenceNotification.NotificationStatusEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.VnfLcmOperationOccurrenceNotification.NotificationTypeEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.VnfLcmOperationOccurrenceNotification.OperationEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.lcn.model.VnfLcmOperationOccurrenceNotification.OperationStateEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfo;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfoResourceHandle;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfoVnfcResourceInfo;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201VimConnectionInfo;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.SubscriptionsAuthenticationParamsBasic;
+import org.onap.svnfm.simulator.config.ApplicationConfig;
+import org.onap.svnfm.simulator.model.VnfOperation;
+import org.onap.svnfm.simulator.model.Vnfds;
+import org.onap.svnfm.simulator.model.Vnfds.Vnfc;
+import org.onap.svnfm.simulator.model.Vnfds.Vnfd;
+import org.onap.svnfm.simulator.repository.VnfOperationRepository;
+import org.onap.svnfm.simulator.repository.VnfmCacheRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OperationProgressor implements Runnable {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(OperationProgressor.class);
+ private final VnfOperation operation;
+ private final VnfmCacheRepository vnfRepository;
+ private final VnfOperationRepository vnfOperationRepository;
+ private final ApplicationConfig applicationConfig;
+ private final Vnfds vnfds;
+ private final SubscriptionService subscriptionService;
+ private final DefaultApi notificationClient;
+ private final org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.api.DefaultApi grantClient;
+
+ public OperationProgressor(final VnfOperation operation, final VnfmCacheRepository vnfRepository,
+ final VnfOperationRepository vnfOperationRepository, final ApplicationConfig applicationConfig,
+ final Vnfds vnfds, final SubscriptionService subscriptionService) {
+ this.operation = operation;
+ this.vnfRepository = vnfRepository;
+ this.vnfOperationRepository = vnfOperationRepository;
+ this.applicationConfig = applicationConfig;
+ this.vnfds = vnfds;
+ this.subscriptionService = subscriptionService;
+
+ final ApiClient apiClient = new ApiClient();
+ String callBackUrl = subscriptionService.getSubscriptions().iterator().next().getCallbackUri();
+ callBackUrl = callBackUrl.substring(0, callBackUrl.indexOf("/lcn/"));
+ apiClient.setBasePath(callBackUrl);
+ notificationClient = new DefaultApi(apiClient);
+
+ final org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.ApiClient grantApiClient =
+ new org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.ApiClient();
+ grantApiClient.setBasePath(callBackUrl);
+ grantClient = new org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.api.DefaultApi(grantApiClient);
+ }
+
+ @Override
+ public void run() {
+ try {
+ final VnfLcmOperationOccurrenceNotification notificationOfStarting =
+ buildNotification(NotificationStatusEnum.START, OperationStateEnum.STARTING);
+ sendNotification(notificationOfStarting);
+
+ sleep(2000);
+ setState(InlineResponse200.OperationStateEnum.PROCESSING);
+ final VnfLcmOperationOccurrenceNotification notificationOfProcessing =
+ buildNotification(NotificationStatusEnum.START, OperationStateEnum.PROCESSING);
+ sendNotification(notificationOfProcessing);
+
+
+ final GrantRequest grantRequest = buildGrantRequest();
+ final InlineResponse201 grantResponse = sendGrantRequest(grantRequest);
+ final InlineResponse201InstantiatedVnfInfo instantiatedVnfInfo = createInstantiatedVnfInfo(grantResponse);
+ vnfRepository.updateVnf(instantiatedVnfInfo, operation.getVnfInstanceId(),
+ getVimConnections(grantResponse));
+
+ sleep(10000);
+ setState(InlineResponse200.OperationStateEnum.COMPLETED);
+ final VnfLcmOperationOccurrenceNotification notificationOfCompleted =
+ buildNotification(NotificationStatusEnum.RESULT, OperationStateEnum.COMPLETED);
+ notificationOfCompleted.setAffectedVnfcs(getVnfcs(instantiatedVnfInfo.getVnfcResourceInfo()));
+
+ sendNotification(notificationOfCompleted);
+ } catch (final Exception exception) {
+ LOGGER.error("Error in OperationProgressor ", exception);
+ }
+
+ }
+
+ private void sleep(final long milliSeconds) {
+ try {
+ Thread.sleep(milliSeconds);
+ } catch (final InterruptedException e) {
+ operation.setOperationState(InlineResponse200.OperationStateEnum.FAILED);
+ }
+ }
+
+ private void setState(final InlineResponse200.OperationStateEnum state) {
+ LOGGER.info("Setting state to {} for operation {}", state, operation.getId());
+ operation.setOperationState(state);
+ vnfOperationRepository.save(operation);
+ }
+
+ private VnfLcmOperationOccurrenceNotification buildNotification(final NotificationStatusEnum status,
+ final OperationStateEnum operationState) {
+ final VnfLcmOperationOccurrenceNotification notification = new VnfLcmOperationOccurrenceNotification();
+ notification.setId(UUID.randomUUID().toString());
+ notification.setNotificationType(NotificationTypeEnum.VNFLCMOPERATIONOCCURRENCENOTIFICATION);
+ notification.setNotificationStatus(status);
+ notification.setOperationState(operationState);
+ notification.setOperation(OperationEnum.fromValue(operation.getOperation().toString()));
+ notification.setVnfInstanceId(operation.getVnfInstanceId());
+
+ final LcnVnfLcmOperationOccurrenceNotificationLinks links = new LcnVnfLcmOperationOccurrenceNotificationLinks();
+ final LcnVnfLcmOperationOccurrenceNotificationLinksVnfInstance vnfInstanceLink =
+ new LcnVnfLcmOperationOccurrenceNotificationLinksVnfInstance();
+ vnfInstanceLink.setHref(getVnfLink());
+ links.setVnfInstance(vnfInstanceLink);
+
+
+ final LcnVnfLcmOperationOccurrenceNotificationLinksVnfInstance operationLink =
+ new LcnVnfLcmOperationOccurrenceNotificationLinksVnfInstance();
+ operationLink.setHref(getOperationLink());
+ links.setVnfLcmOpOcc(operationLink);
+
+ notification.setLinks(links);
+
+ return notification;
+ }
+
+ private List<LcnVnfLcmOperationOccurrenceNotificationAffectedVnfcs> getVnfcs(
+ final List<InlineResponse201InstantiatedVnfInfoVnfcResourceInfo> instantiatedVnfcs) {
+ final List<LcnVnfLcmOperationOccurrenceNotificationAffectedVnfcs> vnfcs = new ArrayList<>();
+ for (final InlineResponse201InstantiatedVnfInfoVnfcResourceInfo instantiatedVnfc : instantiatedVnfcs) {
+ LOGGER.info("VNFC TO BE CONVERTED: {}", instantiatedVnfc);
+ final ModelMapper mapper = new ModelMapper();
+ final LcnVnfLcmOperationOccurrenceNotificationAffectedVnfcs vnfc =
+ mapper.map(instantiatedVnfc, LcnVnfLcmOperationOccurrenceNotificationAffectedVnfcs.class);
+ LOGGER.info("VNFC FROM CONVERSION: {}", vnfc);
+ vnfc.setChangeType(ChangeTypeEnum.ADDED);
+ vnfcs.add(vnfc);
+ }
+ return vnfcs;
+ }
+
+ private void sendNotification(final VnfLcmOperationOccurrenceNotification notification) {
+ LOGGER.info("Sending notification: {}", notification);
+ try {
+ final SubscriptionsAuthenticationParamsBasic subscriptionAuthentication =
+ subscriptionService.getSubscriptions().iterator().next().getAuthentication().getParamsBasic();
+ final String auth =
+ subscriptionAuthentication.getUserName() + ":" + subscriptionAuthentication.getPassword();
+ final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.ISO_8859_1));
+ final String authHeader = "Basic " + new String(encodedAuth);
+ notificationClient.lcnVnfLcmOperationOccurrenceNotificationPostWithHttpInfo(notification,
+ MediaType.APPLICATION_JSON, authHeader);
+ } catch (final ApiException exception) {
+ LOGGER.error("Error sending notification: " + notification, exception);
+ }
+ }
+
+
+ public GrantRequest buildGrantRequest() {
+ final GrantRequest grantRequest = new GrantRequest();
+ grantRequest.setVnfInstanceId(operation.getVnfInstanceId());
+ final String vnfdId = vnfRepository.getVnf(operation.getVnfInstanceId()).getVnfdId();
+ grantRequest.setVnfdId(vnfdId);
+ grantRequest.setAddResources(getAddResources(vnfdId));
+ grantRequest.setVnfLcmOpOccId(operation.getId());
+ grantRequest
+ .setOperation(org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantRequest.OperationEnum
+ .fromValue(operation.getOperation().getValue()));
+ grantRequest.setIsAutomaticInvocation(false);
+
+ final GrantsLinksVnfLcmOpOcc vnfInstanceLink = new GrantsLinksVnfLcmOpOcc();
+ vnfInstanceLink.setHref(getVnfLink());
+ final GrantsLinksVnfLcmOpOcc operationInstanceLink = new GrantsLinksVnfLcmOpOcc();
+ operationInstanceLink.setHref(getOperationLink());
+ final GrantsLinks links = new GrantsLinks();
+ links.setVnfInstance(vnfInstanceLink);
+ links.setVnfLcmOpOcc(operationInstanceLink);
+ grantRequest.setLinks(links);
+ return grantRequest;
+ }
+
+ private List<GrantsAddResources> getAddResources(final String vnfdId) {
+ final List<GrantsAddResources> resources = new ArrayList<>();
+
+ for (final Vnfd vnfd : vnfds.getVnfdList()) {
+ if (vnfd.getVnfdId().equals(vnfdId)) {
+ for (final Vnfc vnfc : vnfd.getVnfcList()) {
+ final GrantsAddResources addResource = new GrantsAddResources();
+ vnfc.setGrantResourceId(UUID.randomUUID().toString());
+ addResource.setId(vnfc.getGrantResourceId());
+ addResource.setType(TypeEnum.fromValue(vnfc.getType()));
+ addResource.setResourceTemplateId(vnfc.getResourceTemplateId());
+ addResource.setVduId(vnfc.getVduId());
+ resources.add(addResource);
+ }
+ }
+ }
+ return resources;
+ }
+
+ private InlineResponse201 sendGrantRequest(final GrantRequest grantRequest) {
+ LOGGER.info("Sending grant request: {}", grantRequest);
+ try {
+ final ApiResponse<InlineResponse201> response = grantClient.grantsPostWithHttpInfo(grantRequest,
+ MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON, "Basic dm5mbTpwYXNzd29yZDEk");
+ LOGGER.info("Grant Response: {}", response);
+ return response.getData();
+ } catch (final org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.ApiException exception) {
+ LOGGER.error("Error sending notification: " + grantRequest, exception);
+ return null;
+ }
+ }
+
+ private InlineResponse201InstantiatedVnfInfo createInstantiatedVnfInfo(final InlineResponse201 grantResponse) {
+ final InlineResponse201InstantiatedVnfInfo instantiatedVnfInfo = new InlineResponse201InstantiatedVnfInfo();
+
+ final Map<String, String> mapOfGrantResourceIdToVimConnectionId = new HashMap<>();
+ for (final InlineResponse201AddResources addResource : grantResponse.getAddResources()) {
+ mapOfGrantResourceIdToVimConnectionId.put(addResource.getResourceDefinitionId(),
+ addResource.getVimConnectionId());
+ }
+
+ for (final Vnfd vnfd : vnfds.getVnfdList()) {
+ if (vnfd.getVnfdId().equals(vnfRepository.getVnf(operation.getVnfInstanceId()).getVnfdId())) {
+ for (final Vnfc vnfc : vnfd.getVnfcList()) {
+ final InlineResponse201InstantiatedVnfInfoVnfcResourceInfo vnfcResourceInfoItem =
+ new InlineResponse201InstantiatedVnfInfoVnfcResourceInfo();
+ vnfcResourceInfoItem.setId(vnfc.getVnfcId());
+ vnfcResourceInfoItem.setVduId(vnfc.getVduId());
+ final InlineResponse201InstantiatedVnfInfoResourceHandle computeResource =
+ new InlineResponse201InstantiatedVnfInfoResourceHandle();
+ computeResource.setResourceId(UUID.randomUUID().toString());
+ computeResource
+ .setVimConnectionId(mapOfGrantResourceIdToVimConnectionId.get(vnfc.getGrantResourceId()));
+ computeResource.setVimLevelResourceType("OS::Nova::Server");
+ vnfcResourceInfoItem.setComputeResource(computeResource);
+ instantiatedVnfInfo.addVnfcResourceInfoItem(vnfcResourceInfoItem);
+ }
+ }
+ }
+
+ return instantiatedVnfInfo;
+ }
+
+ private List<InlineResponse201VimConnectionInfo> getVimConnections(final InlineResponse201 grantResponse) {
+ final List<InlineResponse201VimConnectionInfo> vimConnectionInfo = new ArrayList<>();
+ for (final InlineResponse201VimConnections vimConnection : grantResponse.getVimConnections()) {
+ final ModelMapper modelMapper = new ModelMapper();
+ vimConnectionInfo.add(modelMapper.map(vimConnection, InlineResponse201VimConnectionInfo.class));
+ }
+ return vimConnectionInfo;
+ }
+
+ private String getVnfLink() {
+ return getLinkBaseUrl() + "/vnf_instances/" + operation.getVnfInstanceId();
+ }
+
+ private String getOperationLink() {
+ return getLinkBaseUrl() + "/vnf_lcm_op_occs/" + operation.getId();
+ }
+
+ private String getLinkBaseUrl() {
+ return applicationConfig.getBaseUrl() + "/vnflcm/v1";
+ }
+
+}
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SubscriptionService.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SubscriptionService.java
new file mode 100644
index 0000000000..6a2340bdf6
--- /dev/null
+++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SubscriptionService.java
@@ -0,0 +1,21 @@
+package org.onap.svnfm.simulator.services;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SubscriptionService {
+
+ Collection<LccnSubscriptionRequest> subscriptions = new ArrayList<>();
+
+ public void registerSubscription(final LccnSubscriptionRequest subscription) {
+ subscriptions.add(subscription);
+ }
+
+ public Collection<LccnSubscriptionRequest> getSubscriptions() {
+ return Collections.unmodifiableCollection(subscriptions);
+ }
+}
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java
index f7f4eaa4a2..cac5075682 100644
--- a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java
+++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java
@@ -21,22 +21,35 @@
package org.onap.svnfm.simulator.services;
import java.lang.reflect.InvocationTargetException;
-import java.util.Optional;
+import java.util.UUID;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import org.modelmapper.ModelMapper;
+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.InlineResponse201;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InstantiateVnfRequest;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest;
+import org.onap.svnfm.simulator.config.ApplicationConfig;
+import org.onap.svnfm.simulator.constants.Constant;
import org.onap.svnfm.simulator.model.VnfInstance;
-import org.onap.svnfm.simulator.model.VnfJob;
+import org.onap.svnfm.simulator.model.VnfOperation;
+import org.onap.svnfm.simulator.model.Vnfds;
import org.onap.svnfm.simulator.notifications.VnfInstantiationNotification;
import org.onap.svnfm.simulator.notifications.VnfmAdapterCreationNotification;
-import org.onap.svnfm.simulator.repository.VnfJobRepository;
+import org.onap.svnfm.simulator.repository.VnfOperationRepository;
+import org.onap.svnfm.simulator.repository.VnfmCacheRepository;
import org.onap.svnfm.simulator.repository.VnfmRepository;
-import org.onap.vnfm.v1.model.CreateVnfRequest;
-import org.onap.vnfm.v1.model.InlineResponse201;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.support.SimpleValueWrapper;
import org.springframework.stereotype.Service;
/**
- *
+ *
* @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech)
* @author Ronan Kenny (ronan.kenny@est.tech)
*/
@@ -47,27 +60,44 @@ public class SvnfmService {
VnfmRepository vnfmRepository;
@Autowired
- VnfJobRepository vnfJobRepository;
+ VnfmCacheRepository vnfRepository;
+
+ @Autowired
+ VnfOperationRepository vnfOperationRepository;
@Autowired
private VnfmHelper vnfmHelper;
+ @Autowired
+ ApplicationConfig applicationConfig;
+
+ @Autowired
+ CacheManager cacheManager;
+
+ @Autowired
+ Vnfds vnfds;
+
+ @Autowired
+ SubscriptionService subscriptionService;
+
+ private final ExecutorService executor = Executors.newCachedThreadPool();
+
private static final Logger LOGGER = LoggerFactory.getLogger(SvnfmService.class);
/**
- *
+ *
* @param createVNFRequest
* @return inlineResponse201
*/
- public InlineResponse201 createVnf(final CreateVnfRequest createVNFRequest) {
+ public InlineResponse201 createVnf(final CreateVnfRequest createVNFRequest, final String id) {
InlineResponse201 inlineResponse201 = null;
try {
- final VnfInstance vnfInstance = vnfmHelper.createVnfInstance(createVNFRequest);
+ final VnfInstance vnfInstance = vnfmHelper.createVnfInstance(createVNFRequest, id);
vnfmRepository.save(vnfInstance);
final Thread creationNotification = new Thread(new VnfmAdapterCreationNotification());
creationNotification.start();
inlineResponse201 = vnfmHelper.getInlineResponse201(vnfInstance);
- LOGGER.debug("Response from Create VNF", inlineResponse201);
+ LOGGER.debug("Response from Create VNF {}", inlineResponse201);
} catch (IllegalAccessException | InvocationTargetException e) {
LOGGER.error("Failed in Create Vnf", e);
}
@@ -75,94 +105,80 @@ public class SvnfmService {
}
/**
- *
+ *
* @param vnfId
- * @param instantiateJobId
+ * @param instantiateVNFRequest
+ * @param operationId
* @throws InterruptedException
*/
- public Object instatiateVnf(final String vnfId, final String instantiateJobId) throws InterruptedException {
- final VnfJob vnfJob = buildVnfInstantiation(vnfId, instantiateJobId);
- vnfJobRepository.save(vnfJob);
- getJobStatus(vnfJob.getJobId());
- return null;
+ public String instantiateVnf(final String vnfId, final InstantiateVnfRequest instantiateVNFRequest) {
+ final VnfOperation vnfOperation = buildVnfOperation(InlineResponse200.OperationEnum.INSTANTIATE, vnfId);
+ vnfOperationRepository.save(vnfOperation);
+ executor.submit(new OperationProgressor(vnfOperation, vnfRepository, vnfOperationRepository, applicationConfig,
+ vnfds, subscriptionService));
+ return vnfOperation.getId();
}
/**
- *
+ * vnfOperationRepository
+ *
* @param vnfId
- * @param instantiateJobId
+ * @param instantiateOperationId
*/
- public VnfJob buildVnfInstantiation(final String vnfId, final String instantiateJobId) {
- final VnfJob vnfJob = new VnfJob();
- final Optional<VnfInstance> vnfInstance = vnfmRepository.findById(vnfId);
-
- if (vnfInstance.isPresent()) {
- vnfJob.setJobId(instantiateJobId);
- for (final VnfInstance instance : vnfmRepository.findAll()) {
- if (instance.getId().equals(vnfId)) {
- vnfJob.setVnfInstanceId(instance.getVnfInstanceDescription());
- }
- }
- vnfJob.setVnfId(vnfId);
- vnfJob.setStatus("STARTING");
- }
- return vnfJob;
+ public VnfOperation buildVnfOperation(final InlineResponse200.OperationEnum operation, final String vnfId) {
+ final VnfOperation vnfOperation = new VnfOperation();
+ vnfOperation.setId(UUID.randomUUID().toString());
+ vnfOperation.setOperation(operation);
+ vnfOperation.setOperationState(InlineResponse200.OperationStateEnum.STARTING);
+ vnfOperation.setVnfInstanceId(vnfId);
+ return vnfOperation;
}
/**
- *
- * @param jobId
+ *
+ * @param operationId
* @throws InterruptedException
*/
- public Object getJobStatus(final String jobId) throws InterruptedException {
- LOGGER.info("Getting job status with id: " + jobId);
- for (int i = 0; i < 5; i++) {
- LOGGER.info("Instantiation status: RUNNING");
- Thread.sleep(5000);
- for (final VnfJob job : vnfJobRepository.findAll()) {
- if (job.getJobId().equals(jobId)) {
- job.setStatus("RUNNING");
- vnfJobRepository.save(job);
- }
- }
- }
+ public InlineResponse200 getOperationStatus(final String operationId) {
+ LOGGER.info("Getting operation status with id: {}", operationId);
final Thread instantiationNotification = new Thread(new VnfInstantiationNotification());
instantiationNotification.start();
- for (final VnfJob job : vnfJobRepository.findAll()) {
- if (job.getJobId().equals(jobId)) {
- job.setStatus("COMPLETE");
- vnfJobRepository.save(job);
+ for (final VnfOperation operation : vnfOperationRepository.findAll()) {
+ LOGGER.info("Operation found: {}", operation);
+ if (operation.getId().equals(operationId)) {
+ final ModelMapper modelMapper = new ModelMapper();
+ return modelMapper.map(operation, InlineResponse200.class);
}
}
return null;
}
/**
- *
+ *
* @param vnfId
* @return inlineResponse201
*/
public InlineResponse201 getVnf(final String vnfId) {
- InlineResponse201 inlineResponse201 = null;
-
- final Optional<VnfInstance> vnfInstance = vnfmRepository.findById(vnfId);
- try {
- if (vnfInstance.isPresent()) {
- inlineResponse201 = vnfmHelper.getInlineResponse201(vnfInstance.get());
- LOGGER.debug("Response from get VNF", inlineResponse201);
- }
- } catch (IllegalAccessException | InvocationTargetException e) {
- LOGGER.error("Failed in get Vnf", e);
+ final Cache ca = cacheManager.getCache(Constant.IN_LINE_RESPONSE_201_CACHE);
+ final SimpleValueWrapper wrapper = (SimpleValueWrapper) ca.get(vnfId);
+ final InlineResponse201 inlineResponse201 = (InlineResponse201) wrapper.get();
+ if (inlineResponse201 != null) {
+ LOGGER.info("Cache Read Successful");
+ return inlineResponse201;
}
- return inlineResponse201;
+ return null;
}
/**
* @param vnfId
* @return
*/
- public Object terminateVnf(String vnfId) {
+ public Object terminateVnf(final String vnfId) {
// TODO
return null;
}
+
+ public void registerSubscription(final LccnSubscriptionRequest subscription) {
+ subscriptionService.registerSubscription(subscription);
+ }
}
diff --git a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java
index f35cbf2f49..7c038b823f 100644
--- a/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java
+++ b/vnfm-simulator/vnfm-service/src/main/java/org/onap/svnfm/simulator/services/VnfmHelper.java
@@ -22,30 +22,36 @@ package org.onap.svnfm.simulator.services;
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.beanutils.BeanUtils;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201.InstantiationStateEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201Links;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201LinksSelf;
+import org.onap.svnfm.simulator.config.ApplicationConfig;
import org.onap.svnfm.simulator.constants.Constant;
import org.onap.svnfm.simulator.model.VnfInstance;
-import org.onap.vnfm.v1.model.CreateVnfRequest;
-import org.onap.vnfm.v1.model.InlineResponse201;
-import org.onap.vnfm.v1.model.InlineResponse201.InstantiationStateEnum;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
- *
+ *
* @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech)
* @author Ronan Kenny (ronan.kenny@est.tech)
*/
@Component
public class VnfmHelper {
+ @Autowired
+ private ApplicationConfig applicationConfig;
+
/**
- *
+ *
* @param createVNFRequest
* @return vnfInstance
*/
- public VnfInstance createVnfInstance(final CreateVnfRequest createVNFRequest) {
+ public VnfInstance createVnfInstance(final CreateVnfRequest createVNFRequest, final String id) {
final VnfInstance vnfInstance = new VnfInstance();
- final String vnfId = createVNFRequest.getVnfdId();
- vnfInstance.setId(vnfId);
+ vnfInstance.setId(id);
vnfInstance.setVnfInstanceName(createVNFRequest.getVnfInstanceName());
vnfInstance.setVnfInstanceDescription(createVNFRequest.getVnfInstanceDescription());
vnfInstance.setVnfdId(createVNFRequest.getVnfdId());
@@ -55,7 +61,7 @@ public class VnfmHelper {
}
/**
- *
+ *
* @param vnfInstance
* @return inlineResponse201
* @throws IllegalAccessException
@@ -68,6 +74,21 @@ public class VnfmHelper {
inlineResponse201.setVnfdVersion(Constant.VNFD_VERSION);
inlineResponse201.setVnfSoftwareVersion(Constant.VNF_SOFTWARE_VERSION);
inlineResponse201.setInstantiationState(InstantiationStateEnum.NOT_INSTANTIATED);
+ inlineResponse201.setVnfConfigurableProperties(Constant.VNF_CONFIG_PROPERTIES);
+ addAdditionalPRopertyInlineResponse201(inlineResponse201);
return inlineResponse201;
}
+
+ private void addAdditionalPRopertyInlineResponse201(final InlineResponse201 inlineResponse201) {
+ final InlineResponse201LinksSelf VnfInstancesLinksSelf = new InlineResponse201LinksSelf();
+ VnfInstancesLinksSelf
+ .setHref(applicationConfig.getBaseUrl() + "/vnflcm/v1/vnf_instances/" + inlineResponse201.getId());
+ final InlineResponse201LinksSelf VnfInstancesLinksSelfInstantiate = new InlineResponse201LinksSelf();
+ VnfInstancesLinksSelfInstantiate.setHref(applicationConfig.getBaseUrl() + "/vnflcm/v1/vnf_instances/"
+ + inlineResponse201.getId() + "/instantiate");
+ final InlineResponse201Links inlineResponse201Links = new InlineResponse201Links();
+ inlineResponse201Links.setSelf(VnfInstancesLinksSelf);
+ inlineResponse201Links.setInstantiate(VnfInstancesLinksSelfInstantiate);
+ inlineResponse201.setLinks(inlineResponse201Links);
+ }
}