aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql11
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java3
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java12
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java6
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java19
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java19
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java17
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java17
-rw-r--r--adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java70
-rw-r--r--adapters/mso-nssmf-adapter/src/main/resources/subnetCapability.json13
-rw-r--r--adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java6
-rw-r--r--adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java9
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java27
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImpl.java27
-rw-r--r--bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy7
-rw-r--r--bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/RequestDBUtil.groovy7
-rw-r--r--bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/SniroHomingV1.groovy1
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java27
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java3
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/restproperties/AAIPropertiesImpl.java29
-rw-r--r--bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/Resource.java1
-rw-r--r--bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn270
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy13
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy83
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy62
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy7
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy121
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy231
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy9
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceInstance.groovy1
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy65
-rw-r--r--bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy8
-rw-r--r--bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn159
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterCreateTasks.java3
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java92
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/cnf/CnfAdapterClient.java6
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/AttributeNameValue.java8
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java5
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java213
-rw-r--r--common/pom.xml12
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java3
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java2
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java2
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java6
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/AnPerfReq.java50
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java13
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java94
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java24
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java17
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java18
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/PerfReq.java5
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/PerfReqEmbb.java3
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java103
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java5
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java1
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java5
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java180
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java2
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java74
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java19
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java1
-rw-r--r--common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java5
-rw-r--r--common/src/main/java/org/onap/so/client/AddCacheHeaders.java28
-rw-r--r--common/src/main/java/org/onap/so/client/CacheFactory.java25
-rw-r--r--common/src/main/java/org/onap/so/client/CacheProperties.java13
-rw-r--r--common/src/main/java/org/onap/so/client/RestClient.java20
-rw-r--r--common/src/main/java/org/onap/so/client/RestClientSSL.java2
-rw-r--r--common/src/main/java/org/onap/so/client/RestProperties.java17
-rw-r--r--common/src/test/java/org/onap/so/client/RestClientTest.java63
-rw-r--r--common/src/test/resources/logback-test.xml91
-rw-r--r--docs/release-notes.rst195
-rw-r--r--graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheControlFeature.java137
-rw-r--r--graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheLogger.java53
-rw-r--r--graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/FlushCache.java41
-rw-r--r--graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIProperties.java12
-rw-r--r--graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java20
-rw-r--r--graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java116
-rw-r--r--mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/AaiClientPropertiesImpl.java27
-rw-r--r--mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java6
-rw-r--r--releases/1.7.10.yaml33
-rw-r--r--releases/1.7.8.yaml33
-rw-r--r--so-etsi-nfvo/so-etsi-nfvo-ns-lcm/so-etsi-nfvo-ns-lcm-bpmn-flows/src/main/java/org/onap/so/etsi/nfvo/ns/lcm/bpmn/flows/extclients/aai/AaiPropertiesImpl.java28
82 files changed, 2388 insertions, 903 deletions
diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql
index 639b809888..0b921ecfb4 100644
--- a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql
+++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql
@@ -228,9 +228,9 @@ values (902, 'VNF-Macro-Modify',2,'ControllerExecutionBB',1,500,'vnf','config-de
INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, FLOW_VERSION, NB_REQ_REF_LOOKUP_ID, SCOPE, ACTION) VALUES
('Service-Macro-Create', '10', 'ControllerExecutionBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT'), 'pnf', 'config-assign');
--- change to test the pnf regitsration works with the gating...
---INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, FLOW_VERSION, NB_REQ_REF_LOOKUP_ID, SCOPE, ACTION) VALUES
---('Service-Macro-Create', '11', 'ControllerExecutionBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = --'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT'), 'pnf', 'config-deploy');
+
+INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, FLOW_VERSION, NB_REQ_REF_LOOKUP_ID, SCOPE, ACTION) VALUES
+('Service-Macro-Create', '11', 'ControllerExecutionBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT'), 'pnf', 'config-deploy');
INSERT INTO rainy_day_handler_macro (FLOW_NAME, SERVICE_TYPE, VNF_TYPE, ERROR_CODE, WORK_STEP, POLICY)
VALUES
@@ -952,3 +952,8 @@ VALUES
('VNFConfigModifyActivity','*','*','*','*','Manual','Abort','*', '*'),
('VNFUnsetInMaintFlagActivity','*','*','*','*','Manual','Abort','*', '*'),
('VNFUnsetClosedLoopDisabledActivity','*','*','*','*','Manual','Abort','*', '*');
+
+UPDATE orchestration_flow_reference set FLOW_NAME='ControllerExecutionBB', SCOPE='vnf', ACTION='config-assign' WHERE COMPOSITE_ACTION = 'Service-Macro-Create' and FLOW_NAME = 'ConfigAssignVnfBB';
+UPDATE orchestration_flow_reference set FLOW_NAME='ControllerExecutionBB', SCOPE='vnf', ACTION='config-deploy' WHERE COMPOSITE_ACTION = 'Service-Macro-Create' and FLOW_NAME = 'ConfigDeployVnfBB';
+UPDATE orchestration_flow_reference set FLOW_NAME='ControllerExecutionBB', SCOPE='vnf', ACTION='HealthCheck' WHERE COMPOSITE_ACTION = 'VFModule-ScaleOut' and FLOW_NAME = 'GenericVnfHealthCheckBB';
+UPDATE orchestration_flow_reference set FLOW_NAME='ControllerExecutionBB', SCOPE='vfmodule', ACTION='ScaleOutReconfiguration' WHERE COMPOSITE_ACTION = 'VFModule-ScaleOut' and FLOW_NAME = 'GenericVnfHealthCheckBB';
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java
index 84e1eb2acc..1e3c76cdde 100644
--- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java
@@ -91,8 +91,7 @@ public class NssmfAdapterConsts {
private final static String INTERNAL_MODIFY_URL = "/onap/so/infra/3gppservices/{apiVersion}/modify";
//
- private final static String EXTERNAL_QUERY_JOB_STATUS =
- "/api/rest/provMns/{apiVersion}/NSS/jobs/{jobId}?responseId={responseId}";
+ private final static String EXTERNAL_QUERY_JOB_STATUS = "/api/rest/provMns/{apiVersion}/NSS/jobs/{jobId}";
private final static String INTERNAL_QUERY_SUB_NET_CAPABILITY =
"/onap/so/infra/3gppservices/{apiVersion}/subnetCapabilityQuery";
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java
index 9df20bac1c..530cc1be0d 100644
--- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java
@@ -24,6 +24,9 @@ import lombok.Getter;
@Getter
public enum ActionType {
+ /**
+ * allocate
+ */
ALLOCATE("allocate"),
DEALLOCATE("deallocate"),
@@ -52,4 +55,13 @@ public enum ActionType {
ActionType(String type) {
this.type = type;
}
+
+ public static ActionType getActionType(String value) {
+ for (ActionType actionType : ActionType.values()) {
+ if (actionType.type.equalsIgnoreCase(value)) {
+ return actionType;
+ }
+ }
+ return null;
+ }
}
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java
index 0b332af607..e397201e4b 100644
--- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java
@@ -77,6 +77,12 @@ public class NssmfManagerBuilder {
return;
}
+ if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.TRANSPORT.equals(networkType)) {
+ this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType)
+ .setInitStatus("activated");
+ return;
+ }
+
if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.ACCESS.equals(networkType)) {
this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType)
.setInitStatus("activated");
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java
index acaa3945bd..0456c90fae 100644
--- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java
@@ -31,14 +31,19 @@ import org.onap.so.adapters.nssmf.util.RestUtil;
import org.onap.so.beans.nsmf.*;
import org.onap.so.db.request.beans.ResourceOperationStatus;
import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Example;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal;
public abstract class BaseNssmfManager implements NssmfManager {
+ private static final Logger logger = LoggerFactory.getLogger(BaseNssmfManager.class);
+
protected RestUtil restUtil;
protected ResourceOperationStatusRepository repository;
@@ -152,6 +157,7 @@ public abstract class BaseNssmfManager implements NssmfManager {
ResourceOperationStatus status =
getOperationStatus(serviceInfo.getNsiId(), jobId, serviceInfo.getServiceUuid());
+ logger.info("ResourceOperationStatus = {}", status);
this.restResponse = doQueryJobStatus(status);
afterQueryJobStatus(status);
@@ -165,11 +171,16 @@ public abstract class BaseNssmfManager implements NssmfManager {
private ResourceOperationStatus getOperationStatus(String nsiId, String jobId, String serviceUuid) {
- ResourceOperationStatus status = new ResourceOperationStatus(nsiId, jobId, serviceUuid);
+ logger.info("Query operations: nsiId = [{}], jobId = [{}], serviceUuid = [{}]", nsiId, jobId, serviceUuid);
- Optional<ResourceOperationStatus> optional = repository.findOne(Example.of(status));
+ List<ResourceOperationStatus> resourceOperationStatuses =
+ repository.findByServiceIdAndOperationId(nsiId, jobId);
- return optional.orElse(null);
+ logger.info("resourceOperationStatuses = {}", resourceOperationStatuses);
+ if (resourceOperationStatuses.size() == 0) {
+ return null;
+ }
+ return resourceOperationStatuses.get(0);
}
@Override
@@ -193,7 +204,7 @@ public abstract class BaseNssmfManager implements NssmfManager {
return doQuerySubnetCapability(nbiRequest.getSubnetCapabilityQuery());
}
- protected abstract <T> RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException;
+ protected abstract RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException;
/**
* send request to nssmf
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java
index 9dcd2d4cfb..7ec6c0f9e1 100644
--- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java
@@ -75,8 +75,9 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
@Override
protected void afterQueryJobStatus(ResourceOperationStatus status) {
+ logger.info("afterQueryJobStatus = " + status);
if (Integer.parseInt(status.getProgress()) == 100) {
-
+ logger.info("after query finished = " + status);
ActionType jobOperType = ActionType.valueOf(status.getOperType());
if (ActionType.ALLOCATE.equals(jobOperType)) {
@@ -118,6 +119,8 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
JobStatusResponse jobStatusResponse = unMarshal(restResponse.getResponseContent(), JobStatusResponse.class);
ResponseDescriptor rspDesc = jobStatusResponse.getResponseDescriptor();
+
+ logger.info("status = {}", status);
rspDesc.setNssiId(status.getResourceInstanceID());
jobStatusResponse.setResponseDescriptor(rspDesc);
@@ -152,7 +155,7 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
protected void updateRequestDbJobStatus(ResponseDescriptor rspDesc, ResourceOperationStatus status,
RestResponse rsp) throws ApplicationException {
-
+ status.setProgress(Integer.toString(rspDesc.getProgress()));
switch (fromString(rspDesc.getStatus())) {
case STARTED:
updateDbStatus(status, rsp.getStatus(), STARTED, QUERY_JOB_STATUS_SUCCESS);
@@ -168,6 +171,8 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
case ERROR:
updateDbStatus(status, rsp.getStatus(), ERROR, QUERY_JOB_STATUS_FAILED);
throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED);
+ default:
+ throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED);
}
}
@@ -180,11 +185,11 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
}
@Override
- protected <T> RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException {
+ protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException {
ObjectMapper oMapper = new ObjectMapper();
InputStream inputStream = TypeReference.class.getResourceAsStream("/subnetCapability.json");
- Map<String, Object> subnetCapability = new HashMap<>();
+ Map subnetCapability = new HashMap<>();
try {
subnetCapability = oMapper.readValue(inputStream, Map.class);
} catch (Exception e) {
@@ -201,7 +206,7 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
try {
response = oMapper.writeValueAsString(responseMap);
} catch (JsonProcessingException e) {
- logger.debug("Exception while converting subnet capability object to String {}", e);
+ logger.debug("Exception while converting subnet capability object to String {}", e.getMessage());
}
RestResponse rsp = new RestResponse();
@@ -227,7 +232,11 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
ResourceOperationStatus status =
new ResourceOperationStatus(serviceInfo.getNsiId(), response.getJobId(), serviceInfo.getServiceUuid());
status.setResourceInstanceID(response.getNssiId());
+ status.setOperType(actionType.toString());
+ status.setProgress("0");
+ response.setStatus(STARTED.toString());
+ restResponse.setResponseContent(marshal(response));
updateDbStatus(status, restResponse.getStatus(), STARTED, NssmfAdapterUtil.getStatusDesc(actionType));
}
}
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java
index 296c30c1d8..64ab199bc1 100644
--- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java
@@ -66,19 +66,20 @@ public abstract class InternalNssmfManager extends BaseNssmfManager {
}
private RestResponse responseDBStatus(ResourceOperationStatus status) throws ApplicationException {
+ JobStatusResponse statusResponse = new JobStatusResponse();
ResponseDescriptor descriptor = new ResponseDescriptor();
if (status == null) {
descriptor.setProgress(0);
descriptor.setStatus(PROCESSING.name());
descriptor.setStatusDescription("Initiating Nssi Instance");
- return restUtil.createResponse(200, marshal(descriptor));
+ } else {
+ descriptor.setStatus(status.getStatus());
+ descriptor.setStatusDescription(status.getStatusDescription());
+ descriptor.setProgress(Integer.parseInt(status.getProgress()));
+ descriptor.setNssiId(status.getResourceInstanceID());
}
- descriptor.setStatus(status.getStatus());
- descriptor.setStatusDescription(status.getStatusDescription());
- descriptor.setProgress(Integer.parseInt(status.getProgress()));
- descriptor.setNssiId(status.getResourceInstanceID());
- // descriptor.setResponseId(status.getOperationId());
- return restUtil.createResponse(200, marshal(descriptor));
+ statusResponse.setResponseDescriptor(descriptor);
+ return restUtil.createResponse(200, marshal(statusResponse));
}
@Override
@@ -122,7 +123,7 @@ public abstract class InternalNssmfManager extends BaseNssmfManager {
protected abstract String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException;
@Override
- protected <T> RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException {
+ protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException {
// handler
return sendRequest(marshal(req));
}
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java
index c51b72d61e..3d0d0926fd 100644
--- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java
@@ -27,6 +27,7 @@ import org.onap.so.adapters.nssmf.enums.SelectionType;
import org.onap.so.adapters.nssmf.exceptions.ApplicationException;
import org.onap.so.adapters.nssmf.manager.impl.ExternalNssmfManager;
import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil;
+import org.onap.so.beans.nsmf.AnSliceProfile;
import org.onap.so.beans.nsmf.DeAllocateNssi;
import org.onap.so.beans.nsmf.NssiResponse;
import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest;
@@ -47,7 +48,21 @@ public class ExternalAnNssmfManager extends ExternalNssmfManager {
@Override
protected String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException {
Map<String, Object> request = new HashMap<>();
- request.put("attributeListIn", nbiRequest.getAllocateAnNssi().getSliceProfile());
+
+ AnSliceProfile anSliceProfile = nbiRequest.getAllocateAnNssi().getSliceProfile();
+
+ RanSliceProfile ranSliceProfile = new RanSliceProfile();
+ ranSliceProfile.setSliceProfileId(anSliceProfile.getSliceProfileId());
+ ranSliceProfile.setSNSSAIList(anSliceProfile.getSNSSAIList());
+ ranSliceProfile.setPLMNIdList(anSliceProfile.getPLMNIdList());
+ ranSliceProfile.setPerfReq(anSliceProfile.getPerfReq());
+ ranSliceProfile.setMaxNumberofUEs(anSliceProfile.getMaxNumberOfUEs());
+ ranSliceProfile.setCoverageAreaTAList(anSliceProfile.getCoverageAreaTAList());
+ ranSliceProfile.setLatency(anSliceProfile.getLatency());
+ ranSliceProfile.setUEMobilityLevel(anSliceProfile.getUeMobilityLevel());
+ ranSliceProfile.setResourceSharingLevel(anSliceProfile.getResourceSharingLevel());
+
+ request.put("attributeListIn", ranSliceProfile);
return marshal(request);
}
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java
new file mode 100644
index 0000000000..7035456d75
--- /dev/null
+++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2020 Huawei Technologies Co., Ltd. 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.nssmf.manager.impl.external;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
+import org.onap.so.beans.nsmf.PerfReq;
+import org.onap.so.beans.nsmf.UeMobilityLevel;
+import org.onap.so.beans.nsmf.ResourceSharingLevel;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
+public class RanSliceProfile implements Serializable {
+ /*
+ * Reference 3GPP TS 28.541 V16.5.0, Section 6.3.4.
+ */
+
+ private static final long serialVersionUID = 172447042469370448L;
+
+ @JsonProperty(value = "sliceProfileId", required = true)
+ private String sliceProfileId;
+
+ @JsonProperty(value = "sNSSAIList", required = true)
+ private List<String> sNSSAIList;
+
+ @JsonProperty(value = "pLMNIdList", required = true)
+ private List<String> pLMNIdList;
+
+ @JsonProperty(value = "perfReq", required = true)
+ private PerfReq perfReq;
+
+ @JsonInclude(JsonInclude.Include.NON_DEFAULT)
+ @JsonProperty(value = "maxNumberofUEs")
+ private long maxNumberofUEs;
+
+ @JsonProperty(value = "coverageAreaTAList")
+ private List<Integer> coverageAreaTAList;
+
+ @JsonInclude(JsonInclude.Include.NON_DEFAULT)
+ @JsonProperty(value = "latency")
+ private int latency;
+
+ @JsonProperty(value = "uEMobilityLevel")
+ private UeMobilityLevel uEMobilityLevel;
+
+ @JsonProperty(value = "resourceSharingLevel")
+ private ResourceSharingLevel resourceSharingLevel;
+
+}
diff --git a/adapters/mso-nssmf-adapter/src/main/resources/subnetCapability.json b/adapters/mso-nssmf-adapter/src/main/resources/subnetCapability.json
index 8db52168ae..8753e85ea2 100644
--- a/adapters/mso-nssmf-adapter/src/main/resources/subnetCapability.json
+++ b/adapters/mso-nssmf-adapter/src/main/resources/subnetCapability.json
@@ -1,19 +1,10 @@
{
"AN": {
- "latency": "5",
+ "latency": 5,
"maxNumberofUEs": "100"
},
"CN": {
- "latency": "10",
+ "latency": 5,
"maxNumberofConns": "100"
- },
- "TN_FH": {
- "latency": "10"
- },
- "TN_MH": {
- "latency": "5"
- },
- "TN_BH": {
- "latency": "10"
}
}
diff --git a/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java b/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java
index f150f47f4f..f78bfd297a 100644
--- a/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java
+++ b/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java
@@ -78,6 +78,7 @@ public class NssmfAdapterRestTest {
+ " \"networkType\" : \"cn\"\n" + " },\n" + " \"allocateCnNssi\" : {\n"
+ " \"nssiId\" : \"NSST-C-001-HDBNJ-NSSMF-01-A-ZX\",\n" + " \"nssiName\" : \"eMBB-001\",\n"
+ " \"sliceProfile\" : {\n" + " \"snssaiList\" : [ \"001-100001\" ],\n"
+ + " \"maxNumberofPDUSession\" : 10,\n"
+ " \"sliceProfileId\" : \"ab9af40f13f721b5f13539d87484098\",\n"
+ " \"plmnIdList\" : [ \"460-00\", \"460-01\" ],\n" + " \"perfReq\" : {\n"
+ " \"perfReqEmbbList\" : [ {\n" + " \"activityFactor\" : 50\n" + " } ]\n"
@@ -315,12 +316,13 @@ public class NssmfAdapterRestTest {
taList.add("3");
sP.setSnssaiList(sns);
sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098");
- sP.setPlmnIdList(plmn);
+ sP.setPLMNIdList(plmn);
sP.setPerfReq(perfReq);
- sP.setMaxNumberofUEs(200);
+ sP.setMaxNumberOfUEs(200);
sP.setCoverageAreaTAList(taList);
sP.setLatency(6);
sP.setResourceSharingLevel(NON_SHARED);
+ sP.setMaxNumberOfPDUSession(10);
NsiInfo nsiInfo = new NsiInfo();
nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX");
nsiInfo.setNsiName("eMBB-001");
diff --git a/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java b/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java
index 0d86056821..d7b3b03333 100644
--- a/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java
+++ b/adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java
@@ -204,9 +204,9 @@ public class NssmfManagerServiceImplTest {
taList.add("3");
sP.setSnssaiList(sns);
sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098");
- sP.setPlmnIdList(plmn);
+ sP.setPLMNIdList(plmn);
sP.setPerfReq(perfReq);
- sP.setMaxNumberofUEs(200);
+ sP.setMaxNumberOfUEs(200);
sP.setCoverageAreaTAList(taList);
sP.setLatency(6);
sP.setResourceSharingLevel(NON_SHARED);
@@ -361,9 +361,10 @@ public class NssmfManagerServiceImplTest {
NssmfAdapterNBIRequest nbiRequest = createNbiRequest();
nbiRequest.setResponseId("7512eb3feb5249eca5ddd742fedddd39");
- Optional<ResourceOperationStatus> optional = Optional.of(operationStatus);
+ List<ResourceOperationStatus> optional = new ArrayList<>();
+ optional.add(operationStatus);
- doAnswer(invocation -> optional).when(repository).findOne(any());
+ doAnswer(invocation -> optional).when(repository).findByServiceIdAndOperationId(any(), any());
createCommonMock(200, nssmf);
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java
index 12e416f43c..cd32cc208a 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java
@@ -24,6 +24,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import org.onap.aaiclient.client.aai.AAIProperties;
import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
import org.onap.so.spring.SpringContextHelper;
import org.springframework.context.ApplicationContext;
@@ -32,6 +33,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
private String aaiEndpoint;
private String auth;
private String key;
+ private Long readTimeout;
+ private boolean enableCaching;
+ private Long cacheMaxAge;
private static final String SYSTEM_NAME = "MSO";
public AaiClientPropertiesImpl() {
@@ -39,6 +43,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
aaiEndpoint = context.getEnvironment().getProperty("aai.endpoint");
this.auth = context.getEnvironment().getProperty("aai.auth");
this.key = context.getEnvironment().getProperty("mso.msoKey");
+ this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+ this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+ this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
}
@Override
@@ -65,4 +72,24 @@ public class AaiClientPropertiesImpl implements AAIProperties {
public String getKey() {
return this.key;
}
+
+ @Override
+ public Long getReadTimeout() {
+ return this.readTimeout;
+ }
+
+ @Override
+ public boolean isCachingEnabled() {
+ return this.enableCaching;
+ }
+
+ @Override
+ public CacheProperties getCacheProperties() {
+ return new AAICacheProperties() {
+ @Override
+ public Long getMaxAge() {
+ return cacheMaxAge;
+ }
+ };
+ }
}
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImpl.java
index 3ae815dd71..ace0ff1f57 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImpl.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImpl.java
@@ -24,6 +24,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import org.onap.aaiclient.client.aai.AAIProperties;
import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
import org.onap.so.spring.SpringContextHelper;
import org.springframework.context.ApplicationContext;
@@ -32,6 +33,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
private String aaiEndpoint;
private String auth;
private String key;
+ private Long readTimeout;
+ private boolean enableCaching;
+ private Long cacheMaxAge;
private static final String SYSTEM_NAME = "MSO";
public AaiClientPropertiesImpl() {
@@ -39,6 +43,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
aaiEndpoint = context.getEnvironment().getProperty("mso.aai.endpoint");
this.auth = context.getEnvironment().getProperty("aai.auth");
this.key = context.getEnvironment().getProperty("mso.msoKey");
+ this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+ this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+ this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
}
@Override
@@ -67,4 +74,24 @@ public class AaiClientPropertiesImpl implements AAIProperties {
public String getKey() {
return this.key;
}
+
+ @Override
+ public Long getReadTimeout() {
+ return this.readTimeout;
+ }
+
+ @Override
+ public boolean isCachingEnabled() {
+ return this.enableCaching;
+ }
+
+ @Override
+ public CacheProperties getCacheProperties() {
+ return new AAICacheProperties() {
+ @Override
+ public Long getMaxAge() {
+ return cacheMaxAge;
+ }
+ };
+ }
}
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy
index 4eb9eedad5..c91316ee5c 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy
@@ -50,7 +50,7 @@ import org.onap.so.db.catalog.beans.HomingInstance
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import com.google.gson.JsonObject
-
+import com.google.gson.JsonParser
import com.fasterxml.jackson.databind.ObjectMapper
class OofUtils {
@@ -596,6 +596,7 @@ String correlator = requestId
String callbackUrl = UrnPropertiesReader.getVariable("mso.adapters.oof.callback.endpoint") + "/" + messageType + "/" + correlator
ObjectMapper objectMapper = new ObjectMapper();
String profileJson = objectMapper.writeValueAsString(profileInfo);
+JsonParser parser = new JsonParser()
//Prepare requestInfo object
JsonObject requestInfo = new JsonObject()
@@ -615,9 +616,11 @@ nsstInfo.addProperty("name", name)
JsonObject json = new JsonObject()
json.add("requestInfo", requestInfo)
json.add("NSSTInfo", nsstInfo)
-json.addProperty("sliceProfile", profileJson)
+json.add("sliceProfile", (JsonObject) parser.parse(profileJson))
+
return json.toString()
}
+
/**
* Method to create NSI/NSSI termination request
* (OOF response will be synchronous in G-Release)
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/RequestDBUtil.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/RequestDBUtil.groovy
index 23dfdce753..4e8be5d6e5 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/RequestDBUtil.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/RequestDBUtil.groovy
@@ -144,7 +144,7 @@ class RequestDBUtil {
<ns:initResourceOperationStatus xmlns:ns="http://org.onap.so/requestsdb">
<serviceId>${MsoUtils.xmlEscape(serviceId)}</serviceId>
<operationId>${MsoUtils.xmlEscape(operationId)}</operationId>
- <operationType>${MsoUtils.xmlEscape(operType)}</operationType>
+ <operType>${MsoUtils.xmlEscape(operType)}</operType>
<resourceTemplateUUIDs>${MsoUtils.xmlEscape(resourceTemplateUUID)}</resourceTemplateUUIDs>
</ns:initResourceOperationStatus>
</soapenv:Body>
@@ -192,8 +192,9 @@ class RequestDBUtil {
<ns:updateResourceOperationStatus xmlns:ns="http://org.onap.so/requestsdb">
<serviceId>${MsoUtils.xmlEscape(serviceId)}</serviceId>
<operationId>${MsoUtils.xmlEscape(operationId)}</operationId>
- <resourceTemplateUUIDs>${MsoUtils.xmlEscape(resourceTemplateUUID)}</resourceTemplateUUIDs>
- <operationType>${MsoUtils.xmlEscape(operType)}</operationType>
+ <resourceTemplateUUID>${MsoUtils.xmlEscape(resourceTemplateUUID)}</resourceTemplateUUID>
+ <operType>${MsoUtils.xmlEscape(operType)}</operType>
+ <resourceInstanceID>${MsoUtils.xmlEscape(resourceInstanceID)}</resourceInstanceID>
<jobId>${MsoUtils.xmlEscape(jobId)}</jobId>
<status>${MsoUtils.xmlEscape(status)}</status>
<progress>${MsoUtils.xmlEscape(progress)}</progress>
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/SniroHomingV1.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/SniroHomingV1.groovy
index 146889351a..522aec7931 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/SniroHomingV1.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/SniroHomingV1.groovy
@@ -204,6 +204,7 @@ class SniroHomingV1 extends AbstractServiceTaskProcessor{
if(inventoryType.equalsIgnoreCase("service")){
VnfResource vnf = new VnfResource()
vnf.setVnfHostname(assignmentMap.get("vnfHostName"))
+ vnf.setResourceId(assignmentMap.get("vnfId"))
resource.getHomingSolution().setVnf(vnf)
resource.getHomingSolution().setServiceInstanceId(placement.getString("serviceInstanceId"))
}
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java
index ea7de687ee..c02afc3327 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java
@@ -4,6 +4,8 @@
* ================================================================================
* Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
* ================================================================================
+ * Copyright (C) 2020 Nokia.
+ * ================================================================================
* 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
@@ -26,6 +28,7 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
+import org.onap.so.bpmn.common.BBConstants;
import org.onap.so.bpmn.common.BuildingBlockExecution;
import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
import org.onap.so.listener.ListenerRunner;
@@ -49,17 +52,21 @@ public class FlowManipulatorListenerRunner extends ListenerRunner {
}
public void modifyFlows(List<ExecuteBuildingBlock> flowsToExecute, BuildingBlockExecution execution) {
+ int sequenceBeforeFlowManipulator;
+ do {
+ sequenceBeforeFlowManipulator = execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
+ ExecuteBuildingBlock currentBB = flowsToExecute.get(execution.getCurrentSequence());
+ List<FlowManipulator> filtered = filterListeners(flowManipulators,
+ (item -> item.shouldRunFor(currentBB.getBuildingBlock().getBpmnFlowName(),
+ execution.getCurrentSequence() == 0, execution)));
- ExecuteBuildingBlock currentBB = flowsToExecute.get(execution.getCurrentSequence());
- List<FlowManipulator> filtered = filterListeners(flowManipulators,
- (item -> item.shouldRunFor(currentBB.getBuildingBlock().getBpmnFlowName(),
- execution.getCurrentSequence() == 0, execution)));
-
- logger.info("Running flow manipulators:\n{}",
- filtered.stream().map(item -> item.getClass().getName()).collect(Collectors.joining("\n")));
- filtered.forEach(item -> item.run(flowsToExecute, currentBB, execution));
-
+ logger.info("Running flow manipulators:\n{}",
+ filtered.stream().map(item -> item.getClass().getName()).collect(Collectors.joining("\n")));
+ filtered.forEach(item -> item.run(flowsToExecute, currentBB, execution));
+ } while (isBuildingBlockSkipped(sequenceBeforeFlowManipulator, execution));
}
-
+ private boolean isBuildingBlockSkipped(int sequenceBeforeFlowManipulator, BuildingBlockExecution execution) {
+ return sequenceBeforeFlowManipulator != (int) execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
+ }
}
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
index 8923051f84..2f6713dcd1 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
@@ -1622,6 +1622,7 @@ public class BBInputSetup implements JavaDelegate {
parameter.setInstanceName(vfModules.getInstanceName());
parameter.setInstanceParams(vfModules.getInstanceParams());
this.populateVfModule(parameter);
+ gBB.getRequestContext().setIsHelm(parameter.getIsHelm());
}
} else if (bbName.contains(NETWORK)) {
networks = findNetworksByKey(key, resources);
@@ -1928,7 +1929,7 @@ public class BBInputSetup implements JavaDelegate {
Optional<Relationships> relationshipsOp = aaiGenericVnfWrapper.getRelationships();
if (relationshipsOp.isPresent()) {
Relationships relationships = relationshipsOp.get();
- this.mapPlatform(relationships.getByType(Types.PLATFORM), genericVnf);
+ this.mapPlatform(relationships.getByType(Types.PLATFORM, uri -> uri.nodesOnly(true)), genericVnf);
this.mapLineOfBusiness(relationships.getByType(Types.LINE_OF_BUSINESS), genericVnf);
genericVnf.getVolumeGroups().addAll(mapVolumeGroups(relationships.getByType(Types.VOLUME_GROUP)));
genericVnf.getInstanceGroups().addAll(mapInstanceGroups(relationships.getByType(Types.INSTANCE_GROUP)));
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/restproperties/AAIPropertiesImpl.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/restproperties/AAIPropertiesImpl.java
index 692d581b0d..98a14fc0e5 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/restproperties/AAIPropertiesImpl.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/restproperties/AAIPropertiesImpl.java
@@ -22,9 +22,10 @@ package org.onap.so.client.restproperties;
import java.net.MalformedURLException;
import java.net.URL;
-import org.onap.so.bpmn.core.UrnPropertiesReader;
import org.onap.aaiclient.client.aai.AAIProperties;
import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.bpmn.core.UrnPropertiesReader;
+import org.onap.so.client.CacheProperties;
import org.springframework.stereotype.Component;
@Component
@@ -33,6 +34,11 @@ public class AAIPropertiesImpl implements AAIProperties {
public static final String MSO_MSO_KEY = "mso.msoKey";
public static final String AAI_AUTH = "aai.auth";
public static final String AAI_ENDPOINT = "aai.endpoint";
+ public static final String AAI_READ_TIMEOUT = "aai.readTimeout";
+ public static final String AAI_ENABLE_CACHING = "aai.caching.enable";
+ public static final String AAI_CACHE_MAX_AGE = "aai.caching.maxAge";
+
+ private UrnPropertiesReader reader;
@Override
public URL getEndpoint() throws MalformedURLException {
@@ -58,4 +64,25 @@ public class AAIPropertiesImpl implements AAIProperties {
public String getKey() {
return UrnPropertiesReader.getVariable(MSO_MSO_KEY);
}
+
+ @Override
+ public Long getReadTimeout() {
+ return Long.valueOf(reader.getVariable(AAI_READ_TIMEOUT, "60000"));
+ }
+
+ @Override
+ public boolean isCachingEnabled() {
+ return Boolean.parseBoolean(reader.getVariable(AAI_ENABLE_CACHING, "false"));
+ }
+
+ @Override
+ public CacheProperties getCacheProperties() {
+ return new AAICacheProperties() {
+ @Override
+ public Long getMaxAge() {
+ return Long.valueOf(reader.getVariable(AAI_CACHE_MAX_AGE, "60000"));
+ }
+ };
+ }
+
}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/Resource.java b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/Resource.java
index 57b8c1387d..2a84fccca0 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/Resource.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/onap/so/bpmn/core/domain/Resource.java
@@ -81,6 +81,7 @@ public abstract class Resource extends JsonWrapper implements Serializable {
return homingSolution;
}
+ @Deprecated
public void setHomingSolution(HomingSolution homingSolution) {
this.homingSolution = homingSolution;
}
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn
index 9e2c0db6ea..a32e9e8f62 100644
--- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn
+++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.1.1">
<bpmn:process id="CreateVfModuleBB" name="CreateVfModuleBB" isExecutable="true">
<bpmn:startEvent id="CreateVfModuleBB_Start">
<bpmn:outgoing>SequenceFlow_1xr6chl</bpmn:outgoing>
@@ -46,7 +46,8 @@
<bpmn:sequenceFlow id="SequenceFlow_0rds4rj" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleStatus" />
<bpmn:sequenceFlow id="SequenceFlow_1vbwdaw" sourceRef="UpdateVfModuleStatus" targetRef="CreateVfModuleBB_End" />
<bpmn:serviceTask id="CreateNetworkPolicies" name="AAI Create (network policies)" camunda:expression="${AAICreateTasks.createNetworkPolicies(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
- <bpmn:incoming>SequenceFlow_1yn8o6d</bpmn:incoming>
+ <bpmn:incoming>Flow_10aq7a8</bpmn:incoming>
+ <bpmn:incoming>Flow_1il4743</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0xqhep5</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="SequenceFlow_0xqhep5" sourceRef="CreateNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" />
@@ -66,16 +67,14 @@
</bpmn:serviceTask>
<bpmn:sequenceFlow id="SequenceFlow_15do1tu" sourceRef="UpdateVfModuleContrailServiceInstanceFqdn" targetRef="UpdateVfModuleHeatStackId" />
<bpmn:serviceTask id="ServiceTask_01zrt6x" name="&#10;Create&#10;Cloud&#10;Variable&#10;" camunda:expression="${CreateVFModule.createInventoryVariable(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
- <bpmn:incoming>SequenceFlow_1mg8eym</bpmn:incoming>
<bpmn:incoming>SequenceFlow_0uetprw</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1io8r33</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="SequenceFlow_1io8r33" sourceRef="ServiceTask_01zrt6x" targetRef="ServiceTask_00d84m7" />
<bpmn:serviceTask id="ServiceTask_00d84m7" name="&#10;AAI&#10;Create&#10;(inventory)&#10;" camunda:type="external" camunda:topic="InventoryCreate">
<bpmn:incoming>SequenceFlow_1io8r33</bpmn:incoming>
- <bpmn:outgoing>SequenceFlow_1yn8o6d</bpmn:outgoing>
+ <bpmn:outgoing>Flow_10aq7a8</bpmn:outgoing>
</bpmn:serviceTask>
- <bpmn:sequenceFlow id="SequenceFlow_1yn8o6d" sourceRef="ServiceTask_00d84m7" targetRef="CreateNetworkPolicies" />
<bpmn:exclusiveGateway id="CheckIfIsHelm" name="Check If Is Helm">
<bpmn:incoming>SequenceFlow_1ig2ix4</bpmn:incoming>
<bpmn:outgoing>YesHelm</bpmn:outgoing>
@@ -83,12 +82,11 @@
</bpmn:exclusiveGateway>
<bpmn:serviceTask id="CnfAdapter" name="Cnf Adapter" camunda:expression="${CnfAdapterCreateTasks.createInstance(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
<bpmn:incoming>YesHelm</bpmn:incoming>
- <bpmn:outgoing>SequenceFlow_1mg8eym</bpmn:outgoing>
+ <bpmn:outgoing>Flow_1il4743</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:sequenceFlow id="YesHelm" name="Yes Helm" sourceRef="CheckIfIsHelm" targetRef="CnfAdapter">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isHelm")}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
- <bpmn:sequenceFlow id="SequenceFlow_1mg8eym" sourceRef="CnfAdapter" targetRef="ServiceTask_01zrt6x" />
<bpmn:sequenceFlow id="SequenceFlow_1ig2ix4" sourceRef="QueryVfModule" targetRef="CheckIfIsHelm" />
<bpmn:sequenceFlow id="NoHelm" name="No Helm" sourceRef="CheckIfIsHelm" targetRef="CreateVfModule" />
<bpmn:sequenceFlow id="SequenceFlow_0dehck5" sourceRef="CreateVfModule" targetRef="VnfAdapter" />
@@ -108,93 +106,61 @@
<bpmn:sequenceFlow id="Flow_1sqy91r" sourceRef="Event_1pengt4" targetRef="Activity_1p8hxyt" />
<bpmn:sequenceFlow id="Flow_03q6ty9" sourceRef="Activity_1p8hxyt" targetRef="Event_108oetk" />
</bpmn:subProcess>
+ <bpmn:sequenceFlow id="Flow_10aq7a8" sourceRef="ServiceTask_00d84m7" targetRef="CreateNetworkPolicies" />
+ <bpmn:sequenceFlow id="Flow_1il4743" sourceRef="CnfAdapter" targetRef="CreateNetworkPolicies" />
</bpmn:process>
<bpmn:error id="Error_0t7oivz" name="AAIInventoryFailure" errorCode="AAIInventoryFailure" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateVfModuleBB">
- <bpmndi:BPMNShape id="StartEvent_0kxwniy_di" bpmnElement="CreateVfModuleBB_Start">
- <dc:Bounds x="156" y="88" width="36" height="36" />
- <bpmndi:BPMNLabel>
- <dc:Bounds x="77" y="124" width="0" height="0" />
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ServiceTask_13t22km_di" bpmnElement="QueryVfModule">
- <dc:Bounds x="513" y="66" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl">
- <di:waypoint x="192" y="106" />
- <di:waypoint x="313" y="106" />
+ <bpmndi:BPMNEdge id="SequenceFlow_0uetprw_di" bpmnElement="SequenceFlow_0uetprw">
+ <di:waypoint x="1009" y="146" />
+ <di:waypoint x="1009" y="326" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="156" y="91" width="0" height="0" />
+ <dc:Bounds x="1024" y="228" width="0" height="12" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="EndEvent_0qdq7wj_di" bpmnElement="CreateVfModuleBB_End">
- <dc:Bounds x="1300" y="450" width="36" height="36" />
+ <bpmndi:BPMNEdge id="SequenceFlow_0dehck5_di" bpmnElement="SequenceFlow_0dehck5">
+ <di:waypoint x="894" y="106" />
+ <di:waypoint x="959" y="106" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="1176" y="446" width="90" height="0" />
+ <dc:Bounds x="926.5" y="85" width="0" height="12" />
</bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ServiceTask_1dgenhy_di" bpmnElement="CreateVfModule">
- <dc:Bounds x="794" y="66" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_1s4rpyp_di" bpmnElement="SequenceFlow_1s4rpyp">
- <di:waypoint x="413" y="106" />
- <di:waypoint x="513" y="106" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1g7zahc_di" bpmnElement="NoHelm">
+ <di:waypoint x="721" y="106" />
+ <di:waypoint x="794" y="106" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="321" y="91" width="90" height="0" />
+ <dc:Bounds x="736" y="85" width="44" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_1frb5h2_di" bpmnElement="QueryVnf">
- <dc:Bounds x="313" y="66" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="CallActivity_1i1pfzb_di" bpmnElement="VnfAdapter">
- <dc:Bounds x="959" y="66" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ServiceTask_0fpfn71_di" bpmnElement="UpdateVfModuleStatus">
- <dc:Bounds x="1124" y="428" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId">
- <dc:Bounds x="959" y="428" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj">
- <di:waypoint x="1059" y="468" />
- <di:waypoint x="1124" y="468" />
+ <bpmndi:BPMNEdge id="SequenceFlow_1ig2ix4_di" bpmnElement="SequenceFlow_1ig2ix4">
+ <di:waypoint x="613" y="106" />
+ <di:waypoint x="671" y="106" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="950" y="409" width="90" height="0" />
+ <dc:Bounds x="652" y="85" width="0" height="12" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw">
- <di:waypoint x="1224" y="468" />
- <di:waypoint x="1265" y="468" />
- <di:waypoint x="1265" y="468" />
- <di:waypoint x="1300" y="468" />
+ <bpmndi:BPMNEdge id="SequenceFlow_0q1janp_di" bpmnElement="YesHelm">
+ <di:waypoint x="696" y="131" />
+ <di:waypoint x="696" y="210" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="1138" y="424" width="90" height="0" />
+ <dc:Bounds x="688" y="177" width="47" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_1v8zx4s_di" bpmnElement="CreateNetworkPolicies">
- <dc:Bounds x="324" y="428" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5">
- <di:waypoint x="424" y="468" />
- <di:waypoint x="477" y="468" />
+ <bpmndi:BPMNEdge id="SequenceFlow_1io8r33_di" bpmnElement="SequenceFlow_1io8r33">
+ <di:waypoint x="959" y="366" />
+ <di:waypoint x="746" y="366" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="309" y="409" width="90" height="0" />
+ <dc:Bounds x="569" y="297" width="90" height="20" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_015ayw5_di" bpmnElement="UpdateVnfIpv4OamAddress">
- <dc:Bounds x="477" y="428" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv">
- <di:waypoint x="577" y="468" />
- <di:waypoint x="646" y="468" />
+ <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu">
+ <di:waypoint x="894" y="468" />
+ <di:waypoint x="959" y="468" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="470" y="409" width="90" height="0" />
+ <dc:Bounds x="785" y="399" width="90" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_0mlfsc9_di" bpmnElement="UpdateVnfManagementV6Address">
- <dc:Bounds x="646" y="428" width="100" height="80" />
- </bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_1i03uy2_di" bpmnElement="SequenceFlow_1i03uy2">
<di:waypoint x="746" y="468" />
<di:waypoint x="794" y="468" />
@@ -202,93 +168,129 @@
<dc:Bounds x="628" y="409" width="90" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_0wctnhw_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
- <dc:Bounds x="794" y="428" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu">
- <di:waypoint x="894" y="468" />
- <di:waypoint x="959" y="468" />
+ <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv">
+ <di:waypoint x="577" y="468" />
+ <di:waypoint x="646" y="468" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="785" y="399" width="90" height="0" />
+ <dc:Bounds x="470" y="409" width="90" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_01zrt6x_di" bpmnElement="ServiceTask_01zrt6x">
- <dc:Bounds x="665" y="326" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_1io8r33_di" bpmnElement="SequenceFlow_1io8r33">
- <di:waypoint x="665" y="366" />
- <di:waypoint x="563" y="366" />
+ <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5">
+ <di:waypoint x="424" y="468" />
+ <di:waypoint x="477" y="468" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="569" y="297" width="90" height="20" />
+ <dc:Bounds x="309" y="409" width="90" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ServiceTask_00d84m7_di" bpmnElement="ServiceTask_00d84m7">
- <dc:Bounds x="463" y="326" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_1yn8o6d_di" bpmnElement="SequenceFlow_1yn8o6d">
- <di:waypoint x="463" y="366" />
- <di:waypoint x="255" y="366" />
- <di:waypoint x="255" y="463" />
- <di:waypoint x="324" y="463" />
+ <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw">
+ <di:waypoint x="1224" y="468" />
+ <di:waypoint x="1265" y="468" />
+ <di:waypoint x="1265" y="468" />
+ <di:waypoint x="1300" y="468" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="225" y="361" width="90" height="20" />
+ <dc:Bounds x="1138" y="424" width="90" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ExclusiveGateway_1g3vemz_di" bpmnElement="CheckIfIsHelm" isMarkerVisible="true">
- <dc:Bounds x="690.2114427860697" y="81.35572139303483" width="50" height="50" />
- <bpmndi:BPMNLabel>
- <dc:Bounds x="673" y="48" width="84" height="12" />
- </bpmndi:BPMNLabel>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="ServiceTask_0tag50w_di" bpmnElement="CnfAdapter">
- <dc:Bounds x="665" y="166" width="100" height="80" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_0q1janp_di" bpmnElement="YesHelm">
- <di:waypoint x="715" y="131" />
- <di:waypoint x="715" y="166" />
+ <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj">
+ <di:waypoint x="1059" y="468" />
+ <di:waypoint x="1124" y="468" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="730" y="136" width="0" height="12" />
+ <dc:Bounds x="950" y="409" width="90" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_1mg8eym_di" bpmnElement="SequenceFlow_1mg8eym">
- <di:waypoint x="715" y="246" />
- <di:waypoint x="715" y="326" />
+ <bpmndi:BPMNEdge id="SequenceFlow_1s4rpyp_di" bpmnElement="SequenceFlow_1s4rpyp">
+ <di:waypoint x="413" y="106" />
+ <di:waypoint x="513" y="106" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="846" y="291.5" width="0" height="12" />
+ <dc:Bounds x="321" y="91" width="90" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_1ig2ix4_di" bpmnElement="SequenceFlow_1ig2ix4">
- <di:waypoint x="613" y="106" />
- <di:waypoint x="691" y="106" />
+ <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl">
+ <di:waypoint x="192" y="106" />
+ <di:waypoint x="313" y="106" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="652" y="85" width="0" height="12" />
+ <dc:Bounds x="156" y="91" width="0" height="0" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_1g7zahc_di" bpmnElement="NoHelm">
- <di:waypoint x="740" y="106" />
- <di:waypoint x="794" y="106" />
+ <bpmndi:BPMNEdge id="Flow_10aq7a8_di" bpmnElement="Flow_10aq7a8">
+ <di:waypoint x="646" y="366" />
+ <di:waypoint x="374" y="366" />
+ <di:waypoint x="374" y="428" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_1il4743_di" bpmnElement="Flow_1il4743">
+ <di:waypoint x="646" y="250" />
+ <di:waypoint x="200" y="250" />
+ <di:waypoint x="200" y="468" />
+ <di:waypoint x="324" y="468" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="StartEvent_0kxwniy_di" bpmnElement="CreateVfModuleBB_Start">
+ <dc:Bounds x="156" y="88" width="36" height="36" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="767" y="85" width="0" height="12" />
+ <dc:Bounds x="77" y="124" width="0" height="0" />
</bpmndi:BPMNLabel>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_0dehck5_di" bpmnElement="SequenceFlow_0dehck5">
- <di:waypoint x="894" y="106" />
- <di:waypoint x="959" y="106" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_13t22km_di" bpmnElement="QueryVfModule">
+ <dc:Bounds x="513" y="66" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_0qdq7wj_di" bpmnElement="CreateVfModuleBB_End">
+ <dc:Bounds x="1300" y="450" width="36" height="36" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="926.5" y="85" width="0" height="12" />
+ <dc:Bounds x="1176" y="446" width="90" height="0" />
</bpmndi:BPMNLabel>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_0uetprw_di" bpmnElement="SequenceFlow_0uetprw">
- <di:waypoint x="1009" y="146" />
- <di:waypoint x="1009" y="366" />
- <di:waypoint x="765" y="366" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_1dgenhy_di" bpmnElement="CreateVfModule">
+ <dc:Bounds x="794" y="66" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_1frb5h2_di" bpmnElement="QueryVnf">
+ <dc:Bounds x="313" y="66" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="CallActivity_1i1pfzb_di" bpmnElement="VnfAdapter">
+ <dc:Bounds x="959" y="66" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_0fpfn71_di" bpmnElement="UpdateVfModuleStatus">
+ <dc:Bounds x="1124" y="428" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId">
+ <dc:Bounds x="959" y="428" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_1v8zx4s_di" bpmnElement="CreateNetworkPolicies">
+ <dc:Bounds x="324" y="428" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_015ayw5_di" bpmnElement="UpdateVnfIpv4OamAddress">
+ <dc:Bounds x="477" y="428" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_0mlfsc9_di" bpmnElement="UpdateVnfManagementV6Address">
+ <dc:Bounds x="646" y="428" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_0wctnhw_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
+ <dc:Bounds x="794" y="428" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_01zrt6x_di" bpmnElement="ServiceTask_01zrt6x">
+ <dc:Bounds x="959" y="326" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_00d84m7_di" bpmnElement="ServiceTask_00d84m7">
+ <dc:Bounds x="646" y="326" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_0tag50w_di" bpmnElement="CnfAdapter">
+ <dc:Bounds x="646" y="210" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ExclusiveGateway_1g3vemz_di" bpmnElement="CheckIfIsHelm" isMarkerVisible="true">
+ <dc:Bounds x="671" y="81" width="50" height="50" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="1024" y="228" width="0" height="12" />
+ <dc:Bounds x="655" y="48" width="82" height="14" />
</bpmndi:BPMNLabel>
- </bpmndi:BPMNEdge>
+ </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_10eqhmz_di" bpmnElement="Activity_10eqhmz" isExpanded="true">
<dc:Bounds x="240" y="590" width="340" height="180" />
</bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="Flow_03q6ty9_di" bpmnElement="Flow_03q6ty9">
+ <di:waypoint x="460" y="680" />
+ <di:waypoint x="512" y="680" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_1sqy91r_di" bpmnElement="Flow_1sqy91r">
+ <di:waypoint x="316" y="680" />
+ <di:waypoint x="360" y="680" />
+ </bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_108oetk_di" bpmnElement="Event_108oetk">
<dc:Bounds x="512" y="662" width="36" height="36" />
</bpmndi:BPMNShape>
@@ -298,14 +300,6 @@
<bpmndi:BPMNShape id="Activity_1p8hxyt_di" bpmnElement="Activity_1p8hxyt">
<dc:Bounds x="360" y="640" width="100" height="80" />
</bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="Flow_1sqy91r_di" bpmnElement="Flow_1sqy91r">
- <di:waypoint x="316" y="680" />
- <di:waypoint x="360" y="680" />
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="Flow_03q6ty9_di" bpmnElement="Flow_03q6ty9">
- <di:waypoint x="460" y="680" />
- <di:waypoint x="512" y="680" />
- </bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy
index 9100f2773b..e2d9c16328 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy
@@ -149,16 +149,17 @@ class AllocateSliceSubnet extends AbstractServiceTaskProcessor {
def prepareInitOperationStatus = { DelegateExecution execution ->
logger.debug(Prefix + "prepareInitOperationStatus Start")
- String serviceId = execution.getVariable("dummyServiceId")
+ String modelUuid = execution.getVariable("modelUuid")
String jobId = execution.getVariable("jobId")
String nsiId = execution.getVariable("nsiId")
- logger.debug("Generated new job for Service Instance serviceId:" + serviceId + " jobId:" + jobId)
+ logger.debug("Generated new job for Service Instance serviceId:" + modelUuid + " jobId:" + jobId)
ResourceOperationStatus initStatus = new ResourceOperationStatus()
- initStatus.setServiceId(serviceId)
- initStatus.setOperationId(jobId)
- initStatus.setResourceTemplateUUID(nsiId)
- initStatus.setOperType("Allocate")
+ initStatus.setServiceId(nsiId) // set nsiId to this field
+ initStatus.setOperationId(jobId) // set jobId to this field
+ initStatus.setResourceTemplateUUID(modelUuid) // set modelUuid to this field
+ initStatus.setOperType("ALLOCATE")
+ //initStatus.setResourceInstanceID() // set nssiId to this field
requestDBUtil.prepareInitResourceOperationStatus(execution, initStatus)
logger.debug(Prefix + "prepareInitOperationStatus Exit")
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
index 4108ccecff..1d8de352fb 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
@@ -37,6 +37,7 @@ import java.sql.Timestamp
import java.util.List
import static org.apache.commons.lang3.StringUtils.isBlank
import com.google.gson.JsonObject
+import com.google.gson.JsonParser
import com.fasterxml.jackson.databind.ObjectMapper
import org.onap.aaiclient.client.aai.AAIObjectType
import org.onap.aaiclient.client.aai.AAIResourcesClient
@@ -48,7 +49,6 @@ import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.T
import javax.ws.rs.NotFoundException
import org.onap.so.beans.nsmf.AllocateTnNssi
import org.onap.so.beans.nsmf.DeAllocateNssi
-import org.onap.so.beans.nsmf.EsrInfo
import org.onap.so.beans.nsmf.ServiceInfo
import org.onap.so.bpmn.core.UrnPropertiesReader
import org.onap.aai.domain.yang.ServiceInstance
@@ -65,12 +65,11 @@ class AnNssmfUtils {
JsonUtils jsonUtil = new JsonUtils()
public String buildSelectRANNSSIRequest(String requestId, String messageType, String UUID,String invariantUUID,
String name, Map<String, Object> profileInfo, List<String> nsstInfoList, JsonArray capabilitiesList, Boolean preferReuse){
-
+ JsonParser parser = new JsonParser()
def transactionId = requestId
logger.debug( "transactionId is: " + transactionId)
String correlator = requestId
String callbackUrl = UrnPropertiesReader.getVariable("mso.adapters.oof.callback.endpoint") + "/" + messageType + "/" + correlator
- ObjectMapper objectMapper = new ObjectMapper();
String profileJson = objectMapper.writeValueAsString(profileInfo);
String nsstInfoListString = objectMapper.writeValueAsString(nsstInfoList);
//Prepare requestInfo object
@@ -91,8 +90,8 @@ class AnNssmfUtils {
JsonObject json = new JsonObject()
json.add("requestInfo", requestInfo)
json.add("NSTInfo", ranNsstInfo)
- json.addProperty("serviceProfile", profileJson)
- json.addProperty("NSSTInfo", nsstInfoListString)
+ json.add("serviceProfile", (JsonObject) parser.parse(profileJson))
+ //json.add("NSSTInfo", (JsonArray) parser.parse(nsstInfoListString))
json.add("subnetCapabilities", capabilitiesList)
json.addProperty("preferReuse", preferReuse)
@@ -100,29 +99,33 @@ class AnNssmfUtils {
}
public String buildCreateTNNSSMFSubnetCapabilityRequest() {
- EsrInfo esrInfo = new EsrInfo()
- esrInfo.setNetworkType("TN")
- esrInfo.setVendor("ONAP")
+ JsonObject esrInfo = new JsonObject()
+ esrInfo.addProperty("networkType", "tn")
+ esrInfo.addProperty("vendor", "ONAP_internal")
JsonArray subnetTypes = new JsonArray()
subnetTypes.add("TN_FH")
subnetTypes.add("TN_MH")
JsonObject response = new JsonObject()
- response.add("subnetCapabilityQuery", subnetTypes)
- response.addProperty("esrInfo", objectMapper.writeValueAsString(esrInfo))
+ JsonObject subnetTypesObj = new JsonObject()
+ subnetTypesObj.add("subnetTypes", subnetTypes)
+ response.add("subnetCapabilityQuery", subnetTypesObj)
+ response.add("esrInfo", esrInfo)
return response.toString()
}
public String buildCreateANNFNSSMFSubnetCapabilityRequest() {
- EsrInfo esrInfo = new EsrInfo()
- esrInfo.setNetworkType("AN")
- esrInfo.setVendor("ONAP")
+ JsonObject esrInfo = new JsonObject()
+ esrInfo.addProperty("networkType", "an")
+ esrInfo.addProperty("vendor", "ONAP_internal")
JsonArray subnetTypes = new JsonArray()
subnetTypes.add("AN_NF")
JsonObject response = new JsonObject()
- response.add("subnetCapabilityQuery", subnetTypes)
- response.addProperty("esrInfo", objectMapper.writeValueAsString(esrInfo))
+ JsonObject subnetTypesObj = new JsonObject()
+ subnetTypesObj.add("subnetTypes", subnetTypes)
+ response.add("subnetCapabilityQuery", subnetTypesObj)
+ response.add("esrInfo", esrInfo)
return response.toString()
}
public void createDomainWiseSliceProfiles(List<String> ranConstituentSliceProfiles, DelegateExecution execution) {
@@ -190,16 +193,19 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
ANNF_sliceProfileInstance.setServiceType(serviceType)
String serviceStatus = "deactivated"
ANNF_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
- String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "plmnIdList")
+ String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "pLMNIdList")
ANNF_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
String serviceRole = "slice-profile-instance"
ANNF_sliceProfileInstance.setServiceRole(serviceRole)
- List<String> snssaiList = objectMapper.readValue(execution.getVariable("snssaiList"), List.class)
+ ArrayList<String> snssaiList = execution.getVariable("snssaiList")
String snssai = snssaiList.get(0)
ANNF_sliceProfileInstance.setEnvironmentContext(snssai)
ANNF_sliceProfileInstance.setWorkloadContext("AN-NF")
ANNF_sliceProfileInstance.setSliceProfiles(ANNF_SliceProfiles)
- logger.debug("completed ANNF sliceprofileinstance build "+ ANNF_sliceProfileInstance.toString())
+ String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "resourceSharingLevel")
+ ANNF_sliceProfileInstance.setServiceFunction(serviceFunctionAnnf)
+ logger.debug("completed ANNF sliceprofileinstance build : "+ ANNF_sliceProfileInstance.toString())
+
//TNFH slice profile instance creation
TNFH_sliceProfileInstance.setServiceInstanceId(TNFH_sliceProfileInstanceId)
sliceInstanceName = "sliceprofile_"+TNFH_sliceProfileId
@@ -207,13 +213,16 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
serviceType = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "sST")
TNFH_sliceProfileInstance.setServiceType(serviceType)
TNFH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
- serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "plmnIdList")
+ serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "pLMNIdList")
TNFH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
TNFH_sliceProfileInstance.setServiceRole(serviceRole)
TNFH_sliceProfileInstance.setEnvironmentContext(snssai)
TNFH_sliceProfileInstance.setWorkloadContext("TN-FH")
TNFH_sliceProfileInstance.setSliceProfiles(TNFH_SliceProfiles)
- logger.debug("completed TNFH sliceprofileinstance build "+TNFH_sliceProfileInstance)
+ String serviceFunctionTnFH = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "resourceSharingLevel")
+ TNFH_sliceProfileInstance.setServiceFunction(serviceFunctionTnFH)
+ logger.debug("completed TNFH sliceprofileinstance build : "+TNFH_sliceProfileInstance)
+
//TNMH slice profile instance creation
TNMH_sliceProfileInstance.setServiceInstanceId(TNMH_sliceProfileInstanceId)
sliceInstanceName = "sliceprofile_"+TNMH_sliceProfileId
@@ -221,13 +230,16 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
serviceType = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "sST")
TNMH_sliceProfileInstance.setServiceType(serviceType)
TNMH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
- serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "plmnIdList")
+ serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "pLMNIdList")
TNMH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
TNMH_sliceProfileInstance.setServiceRole(serviceRole)
TNMH_sliceProfileInstance.setEnvironmentContext(snssai)
TNMH_sliceProfileInstance.setWorkloadContext("TN-MH")
TNMH_sliceProfileInstance.setSliceProfiles(TNMH_SliceProfiles)
- logger.debug("completed TNMH sliceprofileinstance build "+TNMH_sliceProfileInstance)
+ String serviceFunctionTnMH = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "resourceSharingLevel")
+ TNMH_sliceProfileInstance.setServiceFunction(serviceFunctionTnMH)
+ logger.debug("completed TNMH sliceprofileinstance build : "+TNMH_sliceProfileInstance)
+
String msg = ""
try {
@@ -261,12 +273,10 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
result.setJitter(profile.get("jitter"))
result.setLatency(profile.get("latency"))
result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
- result.setSNssai(profile.get("sNSSAI"))
result.setUeMobilityLevel(profile.get("uEMobilityLevel"))
result.setMaxNumberOfUEs(profile.get("maxNumberofUEs"))
result.setActivityFactor(profile.get("activityFactor"))
result.setCoverageAreaTAList(profile.get("coverageAreaTAList"))
- result.setCsAvailability(profile.get("cSAvailabilityTarget"))
result.setExpDataRateDL(profile.get("expDataRateDL"))
result.setExpDataRateUL(profile.get("expDataRateUL"))
result.setSurvivalTime(profile.get("survivalTime"))
@@ -280,7 +290,6 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
result.setJitter(profile.get("jitter"))
result.setLatency(profile.get("latency"))
result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
- result.setSNssai(profile.get("sNSSAI"))
result.setProfileId(execution.getVariable("TNFH_sliceProfileId"))
break
case "TN-MH":
@@ -288,7 +297,6 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
result.setJitter(profile.get("jitter"))
result.setLatency(profile.get("latency"))
result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
- result.setSNssai(profile.get("sNSSAI"))
result.setProfileId(execution.getVariable("TNMH_sliceProfileId"))
break
default:
@@ -307,13 +315,13 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
String msg
AAIResourcesClient client = new AAIResourcesClient()
try {
- AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(instanceId).relationshipAPI())
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(instanceId)).relationshipAPI()
client.create(uri, relationship)
} catch (BpmnError e) {
throw e
} catch (Exception ex) {
- msg = "Exception in CreateCommunicationService.createRelationShipInAAI. " + ex.getMessage()
+ msg = "Exception in AN NSSMF Utils : CreateRelationShipInAAI. " + ex.getMessage()
logger.info(msg)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
}
@@ -333,10 +341,9 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
}
public String buildCreateNSSMFRequest(DelegateExecution execution, String domainType, String action) {
- EsrInfo esrInfo = new EsrInfo()
- esrInfo.setNetworkType("TN")
- esrInfo.setVendor("ONAP")
- String esrInfoString = objectMapper.writeValueAsString(esrInfo)
+ JsonObject esrInfo = new JsonObject()
+ esrInfo.addProperty("networkType", "tn")
+ esrInfo.addProperty("vendor", "ONAP_internal")
JsonObject response = new JsonObject()
JsonObject allocateTnNssi = new JsonObject()
JsonObject serviceInfo = new JsonObject()
@@ -404,7 +411,7 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
serviceInfo.addProperty("globalSubscriberId", execution.getVariable("globalSubscriberId"))
serviceInfo.addProperty("subscriptionServiceType", execution.getVariable("subscriptionServiceType"))
- response.addProperty("esrInfo", esrInfoString)
+ response.add("esrInfo", esrInfo)
response.add("serviceInfo", serviceInfo)
response.add("allocateTnNssi", allocateTnNssi)
return response.toString()
@@ -429,9 +436,9 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
deAllocateNssi.addProperty("sliceProfileId", execution.getVariable("TNMH_sliceProfileInstanceId"))
}
- EsrInfo esrInfo = new EsrInfo()
- esrInfo.setVendor("ONAP")
- esrInfo.setNetworkType("TN")
+ JsonObject esrInfo = new JsonObject()
+ esrInfo.addProperty("networkType", "tn")
+ esrInfo.addProperty("vendor", "ONAP_internal")
JsonObject serviceInfo = new JsonObject()
serviceInfo.addProperty("serviceInvariantUuid", null)
@@ -441,9 +448,9 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
JsonObject json = new JsonObject()
json.add("deAllocateNssi", deAllocateNssi)
- json.addProperty("esrInfo", objectMapper.writeValueAsString(esrInfo))
+ json.add("esrInfo", esrInfo)
json.add("serviceInfo", serviceInfo)
return json.toString()
}
-} \ No newline at end of file
+}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy
index 67845910eb..bb6fe212b3 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy
@@ -43,6 +43,7 @@ import org.onap.so.bpmn.core.json.JsonUtils
import org.onap.so.db.request.beans.OperationStatus
import org.slf4j.Logger
import org.slf4j.LoggerFactory
+import org.springframework.util.StringUtils
import org.springframework.web.util.UriUtils
import static org.apache.commons.lang3.StringUtils.isBlank
@@ -317,14 +318,9 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
Map<String, ?> csInputMap = new HashMap<>()
for (String csInput : csInputs) {
- def value
- if (jsonUtil.getJsonValue(csInput, "type") == "integer") {
- value = jsonUtil.getJsonValue(csInput, "default")
- csInputMap.put(jsonUtil.getJsonValue(csInput, "name"), isBlank(value) ? 0 : (value as Integer))
- } else if (jsonUtil.getJsonValue(csInput, "type") == "string") {
- csInputMap.put(jsonUtil.getJsonValue(csInput, "name"),
- jsonUtil.getJsonValue(csInput, "default"))
- }
+ String key = jsonUtil.getJsonValue(csInput, "name")
+ def value = jsonUtil.getJsonValue(csInput, "default")
+ csInputMap.put(key, getDefaultPropertiesByType(value, key))
}
csInputMap.put("expDataRateDL", expDataRateDL)
csInputMap.put("expDataRateUL", expDataRateUL)
@@ -336,6 +332,7 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
csInputMap.put("useInterval", useInterval)
execution.setVariable("csInputMap", csInputMap)
+ logger.debug(Prefix + "csInputMap is = " + csInputMap.toString())
} catch (BpmnError e) {
throw e
} catch (Exception ex) {
@@ -365,53 +362,45 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
Map<String, ?> csInputMap = execution.getVariable("csInputMap") as Map
Map<String, ?> e2eInputMap = new HashMap<>()
- String key
- def value
-
for (String e2eInput in e2eInputs) {
- key = jsonUtil.getJsonValue(e2eInput, "name")
+ String key = jsonUtil.getJsonValue(e2eInput, "name")
String type = jsonUtil.getJsonValue(e2eInput, "type")
- if (type == "integer") {
- def temp
- value = csInputMap.containsKey(key) ? csInputMap.getOrDefault(key, 0) : (isBlank(temp = jsonUtil.getJsonValue(e2eInput, "default")) ? 0 : temp)
-
- e2eInputMap.put(key, value as Integer)
- } else if(type == "string") {
- e2eInputMap.put(key, csInputMap.containsKey(key)
- ? csInputMap.getOrDefault(key, null) : (jsonUtil.getJsonValue(e2eInput, "default")))
+ def value
+ if (csInputMap.containsKey(key)) {
+ value = csInputMap.get(key)
+ } else {
+ value = jsonUtil.getJsonValue(e2eInput, "default")
}
+ e2eInputMap.put(key, getDefaultPropertiesByType(value, type))
}
//TODO temp solution
e2eInputMap.put("sNSSAI", execution.getVariable("sNSSAI_id"))
e2eInputMap.put("sST", execution.getVariable("csServiceType"))
- Integer activityFactor = 60
+ Integer activityFactor = Integer.parseInt(e2eInputMap.get("activityFactor").toString())
Integer random = new Random().nextInt(5) + 2
Integer dLThptPerUE = Integer.parseInt(csInputMap.get("expDataRateDL").toString())
Integer uLThptPerUE = Integer.parseInt(csInputMap.get("expDataRateUL").toString())
- Integer maxNumberofUEs = Integer.parseInt(csInputMap.get("maxNumberofUEs").toString())
+ Integer maxNumberofUEs = Integer.parseInt(e2eInputMap.get("maxNumberofUEs").toString())
Integer dLThptPerSlice = dLThptPerUE * maxNumberofUEs * activityFactor * random
Integer uLThptPerSlice = uLThptPerUE * maxNumberofUEs * activityFactor * random
Integer maxNumberofConns = maxNumberofUEs * activityFactor * 3
e2eInputMap.put("jitter", 10)
- e2eInputMap.put("activityFactor", activityFactor)
- e2eInputMap.put("maxNumberofUEs", maxNumberofUEs)
e2eInputMap.put("dLThptPerUE", dLThptPerUE)
e2eInputMap.put("uLThptPerUE", uLThptPerUE)
e2eInputMap.put("dLThptPerSlice", dLThptPerSlice)
e2eInputMap.put("uLThptPerSlice", uLThptPerSlice)
e2eInputMap.put("maxNumberofConns", maxNumberofConns)
- e2eInputMap.put("coverageAreaTAList", csInputMap.get("coverageAreaList"))
execution.setVariable("e2eInputMap", e2eInputMap)
execution.setVariable("e2eServiceType", e2eServiceDecomposition.getServiceType())
execution.setVariable("e2eModelInvariantUuid", e2eServiceDecomposition.getModelInfo().getModelInvariantUuid())
execution.setVariable("e2eModelUuid", e2eServiceDecomposition.getModelInfo().getModelUuid())
-
+ logger.debug(Prefix + "e2eInputMap is = " + e2eInputMap.toString())
} catch (BpmnError e) {
throw e
} catch (Exception ex) {
@@ -423,6 +412,25 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
logger.debug(Prefix + "generateE2EServiceProfile Exit")
}
+ static def getDefaultPropertiesByType(def value, String type) {
+
+ def defaultValue
+ switch (type) {
+ case "string":
+ defaultValue = ""
+ break
+ case "integer":
+ defaultValue = 0
+ break
+ case "float":
+ defaultValue = 0.0
+ break
+ default:
+ defaultValue = null
+ break
+ }
+ return StringUtils.isEmpty(value) ? defaultValue : value
+ }
/**
* call createE2EService get operation id,
@@ -453,7 +461,7 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
}
"""
execution.setVariable("CSMF_NSMFRequest", payload.replaceAll("\\s+", ""))
-
+ logger.debug(Prefix + "Sent to NSMF Request = " + payload)
} catch (BpmnError e) {
throw e
} catch (Exception ex) {
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy
index c136d52b13..e5d390e2aa 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy
@@ -354,6 +354,8 @@ public class CreateSliceService extends AbstractServiceTaskProcessor {
nstInfo.setName(nstSolution.get("NSTName") as String)
sliceTaskParams.setNSTInfo(nstInfo)
+ sliceTaskParams.setNstId(nstSolution.get("UUID") as String)
+ sliceTaskParams.setNstName(nstSolution.get("NSTName") as String)
execution.setVariable("sliceTaskParams", sliceTaskParams)
@@ -399,7 +401,10 @@ public class CreateSliceService extends AbstractServiceTaskProcessor {
OrchestrationTask orchestrationTask = objectMapper.readValue(response, OrchestrationTask.class)
String paramJson = orchestrationTask.getParams()
logger.debug("paramJson: " + paramJson)
- SliceTaskParamsAdapter sliceTaskParams = new SliceTaskParamsAdapter()
+
+ SliceTaskParamsAdapter sliceTaskParams =
+ execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+
sliceTaskParams.convertFromJson(paramJson)
execution.setVariable("sliceTaskParams", sliceTaskParams)
logger.debug("Finish processUserOptions")
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
index fc14da3a7d..e1719aa5d6 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
@@ -31,17 +31,16 @@ import org.onap.so.bpmn.core.json.JsonUtils
import org.onap.so.db.request.beans.ResourceOperationStatus
import org.slf4j.Logger
import org.slf4j.LoggerFactory
-import java.sql.Timestamp
import java.util.List
import static org.apache.commons.lang3.StringUtils.isBlank
import com.google.gson.JsonObject
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.gson.JsonArray
+import com.google.gson.JsonParser
import org.onap.aai.domain.yang.Relationship
import org.onap.aaiclient.client.aai.AAIResourcesClient
import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
import org.onap.so.beans.nsmf.AllocateTnNssi
-import org.onap.so.beans.nsmf.EsrInfo
import org.onap.so.bpmn.core.UrnPropertiesReader
import org.onap.so.bpmn.core.domain.ServiceDecomposition
import org.onap.so.bpmn.core.domain.ServiceInstance
@@ -99,8 +98,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
execution.setVariable("sliceProfile", sliceProfile)
}
String sliceProfileId = jsonUtil.getJsonValue(sliceProfile, "sliceProfileId")
- def snssaiList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "snssaiList"))
- def plmnIdList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "plmnIdList"))
+ def snssaiList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "sNSSAI"))
+ def plmnIdList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "pLMNIdList"))
def coverageAreaTAList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "coverageAreaTAList"))
if (isBlank(sliceProfileId) || (snssaiList.empty) || (plmnIdList.empty)
@@ -185,7 +184,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
List<String> nsstInfoList = new ArrayList<>()
for(ServiceProxy serviceProxy : serviceProxyList)
{
- String nsstModelUuid = serviceProxy.getModelInfo().getModelUuid()
+ String nsstModelUuid = serviceProxy.getSourceModelUuid()
String nsstModelInvariantUuid = serviceProxy.getModelInfo().getModelInvariantUuid()
String name = serviceProxy.getModelInfo().getModelName()
String nsstServiceModelInfo = """{
@@ -203,7 +202,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
logger.info(msg)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
}
- execution.setVariable("ranNsstInfoList",nsstInfoList)
+ execution.setVariable("ranNsstInfoList", objectMapper.writeValueAsString(nsstInfoList))
execution.setVariable("ranModelVersion", ranModelVersion)
execution.setVariable("ranModelName", ranModelName)
execution.setVariable("currentIndex",currentIndex)
@@ -255,7 +254,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
logger.debug( "get NSSI option OOF Url: " + urlString)
-
+ JsonParser parser = new JsonParser()
//build oof request body
boolean ranNssiPreferReuse = execution.getVariable("ranNssiPreferReuse");
String requestId = execution.getVariable("msoRequestId")
@@ -265,7 +264,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
String modelName = execution.getVariable("ranModelName")
String timeout = UrnPropertiesReader.getVariable("mso.adapters.oof.timeout", execution);
- List<String> nsstInfoList = objectMapper.readValue(execution.getVariable("nsstInfoList"), List.class)
+ List<String> nsstInfoList = objectMapper.readValue(execution.getVariable("ranNsstInfoList"), List.class)
JsonArray capabilitiesList = new JsonArray()
String FHCapabilities = execution.getVariable("FHCapabilities")
String MHCapabilities = execution.getVariable("MHCapabilities")
@@ -274,11 +273,11 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
JsonObject MH = new JsonObject()
JsonObject ANNF = new JsonObject()
FH.addProperty("domainType", "TN_FH")
- FH.addProperty("capabilityDetails", FHCapabilities)
+ FH.add("capabilityDetails", (JsonObject) parser.parse(FHCapabilities))
MH.addProperty("domainType", "TN_MH")
- MH.addProperty("capabilityDetails", MHCapabilities)
+ MH.add("capabilityDetails", (JsonObject) parser.parse(MHCapabilities))
ANNF.addProperty("domainType", "AN_NF")
- ANNF.addProperty("capabilityDetails", FHCapabilities)
+ ANNF.add("capabilityDetails", (JsonObject) parser.parse(ANNFCapabilities))
capabilitiesList.add(FH)
capabilitiesList.add(MH)
capabilitiesList.add(ANNF)
@@ -302,13 +301,18 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
String oofResponse = execution.getVariable("nssiSelection_asyncCallbackResponse")
String requestStatus = jsonUtil.getJsonValue(oofResponse, "requestStatus")
if(requestStatus.equals("completed")) {
- List<String> solution = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(oofResponse, "solutions"))
- boolean existingNSI = jsonUtil.getJsonValue(solution.get(0), "existingNSI")
+ String solutions = jsonUtil.getJsonValue(oofResponse, "solutions")
+ logger.debug("solutions value : "+solutions)
+ JsonParser parser = new JsonParser()
+ JsonArray solution = parser.parse(solutions)
+ JsonObject sol = solution.get(0)
+ boolean existingNSI = sol.get("existingNSI").getAsBoolean()
+ logger.debug("existingNSI value : "+existingNSI)
if(existingNSI) {
- def sharedNSISolution = jsonUtil.getJsonValue(solution.get(0), "sharedNSISolution")
- execution.setVariable("sharedRanNSSISolution", sharedNSISolution)
+ JsonObject sharedNSISolution = sol.get("sharedNSISolution").getAsJsonObject()
+ execution.setVariable("sharedRanNSSISolution", sharedNSISolution.toString())
logger.debug("sharedRanNSSISolution from OOF "+sharedNSISolution)
- String RANServiceInstanceId = jsonUtil.getJsonValue(solution.get(0), "sharedNSISolution.NSIId")
+ String RANServiceInstanceId = sharedNSISolution.get("NSIId").getAsString()
execution.setVariable("RANServiceInstanceId", RANServiceInstanceId)
ServiceInstance serviceInstance = new ServiceInstance();
serviceInstance.setInstanceId(RANServiceInstanceId);
@@ -317,9 +321,10 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
execution.setVariable("ranNsstServiceDecomposition", serviceDecomposition)
execution.setVariable("isRspRanNssi", true)
}else {
- def sliceProfiles = jsonUtil.getJsonValue(solution.get(0), "newNSISolution.sliceProfiles")
- execution.setVariable("RanConstituentSliceProfiles", sliceProfiles)
+ JsonObject newNSISolution = sol.get("newNSISolution").getAsJsonObject()
+ JsonArray sliceProfiles = newNSISolution.get("slice_profiles").getAsJsonArray()
logger.debug("RanConstituentSliceProfiles list from OOF "+sliceProfiles)
+ execution.setVariable("RanConstituentSliceProfiles", sliceProfiles.toString())
}
}else {
String statusMessage = jsonUtil.getJsonValue(oofResponse, "statusMessage")
@@ -362,11 +367,11 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
def createModifyNssiQueryJobStatus = { DelegateExecution execution ->
logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
- EsrInfo esrInfo = new EsrInfo()
- esrInfo.setNetworkType("AN")
- esrInfo.setVendor("ONAP")
- String esrInfoString = objectMapper.writeValueAsString(esrInfo)
- execution.setVariable("esrInfo", esrInfoString)
+ JsonObject esrInfo = new JsonObject()
+ esrInfo.addProperty("networkType", "tn")
+ esrInfo.addProperty("vendor", "ONAP_internal")
+
+ execution.setVariable("esrInfo", esrInfo.toString())
JsonObject serviceInfo = new JsonObject()
serviceInfo.addProperty("nssiId", execution.getVariable("RANServiceInstanceId"))
serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
@@ -491,12 +496,16 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
String oofResponse = execution.getVariable("nfNssiSelection_asyncCallbackResponse")
String requestStatus = jsonUtil.getJsonValue(oofResponse, "requestStatus")
if(requestStatus.equals("completed")) {
- List<String> solution = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(oofResponse, "solutions"))
+ String solutions = jsonUtil.getJsonValue(oofResponse, "solutions")
+ logger.debug("nssi solutions value : "+solutions)
+ JsonParser parser = new JsonParser()
+ JsonArray solution = parser.parse(solutions)
if(solution.size()>=1) {
- String ranNfNssiId = jsonUtil.getJsonValue(solution.get(0), "NSSIId")
- String invariantUuid = jsonUtil.getJsonValue(solution.get(0), "invariantUUID")
- String uuid = jsonUtil.getJsonValue(solution.get(0), "UUID")
- String nssiName = jsonUtil.getJsonValue(solution.get(0), "NSSIName")
+ JsonObject sol = solution.get(0)
+ String ranNfNssiId = sol.get("NSSIId").getAsString()
+ String invariantUuid = sol.get("invariantUUID").getAsString()
+ String uuid = sol.get("UUID").getAsString()
+ String nssiName = sol.get("NSSIName").getAsString()
execution.setVariable("RANNFServiceInstanceId", ranNfNssiId)
execution.setVariable("RANNFInvariantUUID", invariantUuid)
execution.setVariable("RANNFUUID", uuid)
@@ -528,7 +537,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
logger.debug(Prefix+"processRanNfModifyRsp method start")
anNssmfUtils.processRanNfModifyRsp(execution)
//create RAN NSSI
- org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new ServiceInstance();
+ org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
//AN instance creation
ANServiceInstance.setServiceInstanceId(execution.getVariable("RANServiceInstanceId"))
String sliceInstanceName = execution.getVariable("servicename")
@@ -593,8 +602,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
def updateAaiWithRANInstances = { DelegateExecution execution ->
logger.debug(Prefix+"updateAaiWithRANInstances method start")
//create RAN NSSI
- org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new ServiceInstance();
- org.onap.aai.domain.yang.ServiceInstance ANNFServiceInstance = new ServiceInstance();
+ org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
+ org.onap.aai.domain.yang.ServiceInstance ANNFServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
//AN instance creation
ANServiceInstance.setServiceInstanceId(execution.getVariable("RANServiceInstanceId"))
String sliceInstanceName = execution.getVariable("servicename")
@@ -603,15 +612,16 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
ANServiceInstance.setServiceType(serviceType)
String serviceStatus = "deactivated"
ANServiceInstance.setOrchestrationStatus(serviceStatus)
- String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "plmnIdList")
+ String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "pLMNIdList")
ANServiceInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
String serviceRole = "nssi"
ANServiceInstance.setServiceRole(serviceRole)
- List<String> snssaiList = objectMapper.readValue(execution.getVariable("snssaiList"), List.class)
+ List<String> snssaiList = execution.getVariable("snssaiList")
String snssai = snssaiList.get(0)
ANServiceInstance.setEnvironmentContext(snssai)
ANServiceInstance.setWorkloadContext("AN")
-
+ String serviceFunctionAn = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "resourceSharingLevel")
+ ANServiceInstance.setServiceFunction(serviceFunctionAn)
logger.debug("completed AN service instance build "+ ANServiceInstance.toString())
//create RAN NF NSSI
ANNFServiceInstance.setServiceInstanceId(execution.getVariable("RANNFServiceInstanceId"))
@@ -619,13 +629,15 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
ANNFServiceInstance.setServiceInstanceName(sliceInstanceName)
ANNFServiceInstance.setServiceType(serviceType)
ANNFServiceInstance.setOrchestrationStatus(serviceStatus)
- serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "plmnIdList")
+ serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "pLMNIdList")
ANNFServiceInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
ANNFServiceInstance.setServiceRole(serviceRole)
- snssaiList = objectMapper.readValue(execution.getVariable("snssaiList"), List.class)
+ snssaiList = execution.getVariable("snssaiList")
snssai = snssaiList.get(0)
ANNFServiceInstance.setEnvironmentContext(snssai)
ANNFServiceInstance.setWorkloadContext("AN-NF")
+ String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "resourceSharingLevel")
+ ANNFServiceInstance.setServiceFunction(serviceFunctionAnnf)
logger.debug("completed AN service instance build "+ ANNFServiceInstance.toString())
String msg = ""
@@ -695,11 +707,10 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
}
private void createTnAllocateNssiJobQuery(DelegateExecution execution, String domainType) {
- EsrInfo esrInfo = new EsrInfo()
- esrInfo.setNetworkType("TN")
- esrInfo.setVendor("ONAP")
- String esrInfoString = objectMapper.writeValueAsString(esrInfo)
- execution.setVariable("esrInfo", esrInfoString)
+ JsonObject esrInfo = new JsonObject()
+ esrInfo.addProperty("networkType", "tn")
+ esrInfo.addProperty("vendor", "ONAP_internal")
+ execution.setVariable("esrInfo", esrInfo.toString())
JsonObject serviceInfo = new JsonObject()
serviceInfo.addProperty("nssiId", null)
serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
@@ -853,7 +864,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
updateStatus.setResourceTemplateUUID(nsiId)
updateStatus.setResourceInstanceID(nssiId)
updateStatus.setOperType("Allocate")
- updateStatus.setProgress(100)
+ updateStatus.setProgress("100")
updateStatus.setStatus("finished")
requestDBUtil.prepareUpdateResourceOperationStatus(execution, updateStatus)
@@ -875,7 +886,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
updateStatus.setResourceTemplateUUID(nsiId)
updateStatus.setResourceInstanceID(nssiId)
updateStatus.setOperType("Allocate")
- updateStatus.setProgress(0)
+ updateStatus.setProgress("0")
updateStatus.setStatus("failed")
requestDBUtil.prepareUpdateResourceOperationStatus(execution, updateStatus)
}
@@ -883,8 +894,6 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
private String buildSdnrAllocateRequest(DelegateExecution execution, String action, String rpcName, String callbackUrl) {
String requestId = execution.getVariable("msoRequestId")
- Date date = new Date().getTime()
- Timestamp time = new Timestamp(date)
Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("ranNfSliceProfile"), Map.class)
sliceProfile.put("sliceProfileId", execution.getVariable("ANNF_sliceProfileInstanceId"))
sliceProfile.put("maxNumberofConns", sliceProfile.get("maxNumberofPDUSessions"))
@@ -897,7 +906,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
JsonObject commonHeader = new JsonObject()
JsonObject payload = new JsonObject()
JsonObject payloadInput = new JsonObject()
- commonHeader.addProperty("TimeStamp", time.toString())
+ commonHeader.addProperty("TimeStamp",new Date(System.currentTimeMillis()).format("yyyy-MM-dd'T'HH:mm:ss.sss", TimeZone.getDefault()))
commonHeader.addProperty("APIver", "1.0")
commonHeader.addProperty("RequestID", requestId)
commonHeader.addProperty("SubRequestID", "1")
@@ -912,12 +921,12 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
payload.add("input", payloadInput)
input.add("CommonHeader", commonHeader)
input.addProperty("Action", action)
- input.add("Payload", payload)
+ input.addProperty("Payload", payload.toString())
body.add("input", input)
response.add("body", body)
response.addProperty("version", "1.0")
response.addProperty("rpc-name", rpcName)
- response.addProperty("correlation-id", requestId+"-1")
+ response.addProperty("correlation-id", (requestId+"-1"))
response.addProperty("type", "request")
return response.toString()
}
@@ -979,8 +988,15 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
String DUEG_routeId = UUID.randomUUID().toString()
execution.setVariable("tranportEp_ID_DUEG", DUEG_routeId)
NetworkRoute DUEG_ep = new NetworkRoute()
- DU_ep.setRouteId(DUEG_routeId)
- DU_ep.setNextHop("Host3")
+ DUEG_ep.setRouteId(DUEG_routeId)
+ DUEG_ep.setFunction(function)
+ DUEG_ep.setRole(role)
+ DUEG_ep.setType(type)
+ DUEG_ep.setIpAddress("192.168.100.5")
+ DUEG_ep.setLogicalInterfaceId("1234")
+ DUEG_ep.setPrefixLength(prefixLength)
+ DUEG_ep.setAddressFamily(addressFamily)
+ DUEG_ep.setNextHop("Host3")
//CUIN
String CUIN_routeId = UUID.randomUUID().toString()
execution.setVariable("tranportEp_ID_CUIN", CUIN_routeId)
@@ -1005,9 +1021,9 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
logger.debug("creating DUIN endpoint . ID : "+DUIN_routeId+" node details : "+DU_ep.toString())
networkRouteUri = AAIUriFactory.createResourceUri( new AAIObjectType(AAINamespaceConstants.NETWORK, NetworkRoute.class), DUIN_routeId)
client.create(networkRouteUri, DU_ep)
- logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DU_ep.toString())
+ logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DUEG_ep.toString())
networkRouteUri = AAIUriFactory.createResourceUri( new AAIObjectType(AAINamespaceConstants.NETWORK, NetworkRoute.class), DUEG_routeId)
- client.create(networkRouteUri, DU_ep)
+ client.create(networkRouteUri, DUEG_ep)
logger.debug("creating CUIN endpoint . ID : "+CUIN_routeId+" node details : "+CUIN_ep.toString())
networkRouteUri = AAIUriFactory.createResourceUri( new AAIObjectType(AAINamespaceConstants.NETWORK, NetworkRoute.class), CUIN_routeId)
client.create(networkRouteUri, CUIN_ep)
@@ -1041,3 +1057,4 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
}
}
}
+
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
index 1d7acd31c1..1f3cf6ed52 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
@@ -20,6 +20,11 @@
package org.onap.so.bpmn.infrastructure.scripts
+import org.onap.so.beans.nsmf.ConnectionLink
+import org.onap.so.beans.nsmf.EndPoint
+import org.onap.so.beans.nsmf.NsiInfo
+import org.onap.so.beans.nsmf.SliceProfileAdapter
+import org.onap.so.beans.nsmf.TransportSliceNetwork
import org.onap.so.beans.nsmf.oof.SubnetType
import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
import javax.ws.rs.NotFoundException
@@ -36,15 +41,12 @@ import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
import org.onap.so.beans.nsmf.AllocateAnNssi
import org.onap.so.beans.nsmf.AllocateCnNssi
import org.onap.so.beans.nsmf.AllocateTnNssi
-import org.onap.so.beans.nsmf.AnSliceProfile
-import org.onap.so.beans.nsmf.CnSliceProfile
import org.onap.so.beans.nsmf.EsrInfo
import org.onap.so.beans.nsmf.NssiResponse
import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
import org.onap.so.beans.nsmf.ServiceInfo
import org.onap.so.beans.nsmf.SliceTaskInfo
import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
-import org.onap.so.beans.nsmf.TnSliceProfile
import org.onap.so.bpmn.common.scripts.ExceptionUtil
import org.onap.so.bpmn.core.json.JsonUtils
import org.slf4j.Logger
@@ -144,7 +146,10 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String msg
try {
- AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceInstanceId))
+ AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(execution.getVariable("globalSubscriberId"))
+ .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+ .serviceInstance(sliceInstanceId))
client.create(nsiServiceUri, nsi)
execution.setVariable("nsiServiceUri", nsiServiceUri)
@@ -152,7 +157,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
} catch (BpmnError e) {
throw e
} catch (Exception ex) {
- msg = "Exception in DoCreateSliceServiceInstance.instantiateSliceService. " + ex.getMessage()
+ msg = "Exception in DoAllocateNSIandNSSI.createNSIinAAI: " + ex.getMessage()
logger.info(msg)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
}
@@ -168,16 +173,30 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
*/
void createRelationship(DelegateExecution execution) {
//relation ship
- String allottedResourceId = execution.getVariable("allottedResourceId")
- SliceTaskParamsAdapter sliceParams =
- execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+ logger.debug("Enter createRelationship in DoAllocateNSIandNSSI")
+ //String allottedResourceId = execution.getVariable("allottedResourceId")
+ //SliceTaskParamsAdapter sliceParams =
+ // execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+ String msg
+ try {
+
+ AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
+ logger.debug("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri.toString())
- AAIResourceUri nsiServiceUri = execution.getVariable("nsiServiceUri") as AAIResourceUri
- logger.info("Creating Allotted resource relationship, nsiServiceUri: " + nsiServiceUri)
+ //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
- AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
+ AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
+ logger.debug("Creating Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
- client.connect(allottedResourceUri, nsiServiceUri)
+ client.connect(allottedResourceUri, nsiServiceUri)
+ } catch (BpmnError e) {
+ throw e
+ } catch (Exception ex) {
+ msg = "Exception in DoAllocateNSIandNSSI.createRelationship. " + ex.getMessage()
+ logger.info(msg)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+ }
+ logger.debug("Exit createRelationship in DoAllocateNSIandNSSI")
}
/**
@@ -196,7 +215,10 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String nsiServiceInstanceID = sliceParams.getSuggestNsiId()
//sliceParams.setServiceId(nsiServiceInstanceID)
- AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nsiServiceInstanceID))
+ AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(execution.getVariable("globalSubscriberId"))
+ .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+ .serviceInstance(nsiServiceInstanceID))
try {
AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class)
@@ -207,8 +229,9 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
}
- AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
-
+ //AAIResourceUri allottedResourceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sliceParams.suggestNsiId).allottedResource(allottedResourceId))
+ AAIResourceUri allottedResourceUri = execution.getVariable("allottedResourceUri") as AAIResourceUri
+ logger.debug("updateRelationship Allotted resource relationship, allottedResourceUri: " + allottedResourceUri.toString())
client.connect(allottedResourceUri, nsiServiceUri)
execution.setVariable("sliceTaskParams", sliceParams)
@@ -233,31 +256,23 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String serviceInstanceId = UUID.randomUUID().toString()
execution.setVariable("ranSliceProfileInstanceId", serviceInstanceId) //todo:
- String serviceType = ""
- String serviceRole = "slice-profile"
String oStatus = "deactivated"
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
// create slice profile
- ServiceInstance rspi = new ServiceInstance()
- rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
- rspi.setServiceType(serviceType)
- rspi.setServiceRole(serviceRole)
- rspi.setOrchestrationStatus(oStatus)
- rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
- rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
- rspi.setInputParameters(execution.getVariable("uuiRequest"))
- rspi.setWorkloadContext(execution.getVariable("useInterval"))
- rspi.setEnvironmentContext(execution.getVariable("sNSSAI_id"))
+ ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
//timestamp format YYYY-MM-DD hh:mm:ss
rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
- AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(globalSubscriberId)
+ .serviceSubscription(subscriptionServiceType)
+ .serviceInstance(serviceInstanceId))
client.create(uri, rspi)
execution.setVariable("sliceTaskParams", sliceParams)
@@ -275,15 +290,15 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
- AnSliceProfile anSliceProfile = sliceTaskInfo.sliceProfile
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
+ SliceProfileAdapter anSliceProfile = sliceTaskInfo.sliceProfile
String profileId = UUID.randomUUID().toString()
anSliceProfile.setSliceProfileId(profileId)
SliceProfile sliceProfile = new SliceProfile()
sliceProfile.setProfileId(profileId)
- sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList as String)
+ sliceProfile.setCoverageAreaTAList(anSliceProfile.coverageAreaTAList)
//todo:...
AAIResourceUri uri = AAIUriFactory.createResourceUri(
AAIFluentTypeBuilder.business().customer(globalSubscriberId)
@@ -304,12 +319,24 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
//todo:
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<AnSliceProfile> sliceTaskInfo = sliceParams.anSliceTaskInfo
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
- allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile
+ allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
+ allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
+ allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
+ allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
+ NsiInfo nsiInfo = new NsiInfo()
+ nsiInfo.nsiId = sliceParams.suggestNsiId
+ allocateAnNssi.nsiInfo = nsiInfo
+ //endPoint
+ EndPoint endPoint = new EndPoint()
+ endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
+ endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
+ endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
+ allocateAnNssi.setEndPoint(endPoint)
EsrInfo esrInfo = new EsrInfo()
//todo: vendor and network
@@ -348,33 +375,25 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String serviceInstanceId = UUID.randomUUID().toString()
execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
- String serviceType = ""
- String serviceRole = "slice-profile"
String oStatus = "deactivated"
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
// create slice profile
- ServiceInstance rspi = new ServiceInstance()
- rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
- rspi.setServiceType(serviceType)
- rspi.setServiceRole(serviceRole)
- rspi.setOrchestrationStatus(oStatus)
- rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
- rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
- rspi.setInputParameters(uuiRequest)
- rspi.setWorkloadContext(useInterval)
- rspi.setEnvironmentContext(sNSSAI_id)
+ ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
//timestamp format YYYY-MM-DD hh:mm:ss
rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
execution.setVariable("communicationServiceInstance", rspi)
- AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(globalSubscriberId)
+ .serviceSubscription(subscriptionServiceType)
+ .serviceInstance(serviceInstanceId))
client.create(uri, rspi)
execution.setVariable("sliceTaskParams", sliceParams)
}
@@ -392,8 +411,8 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
- CnSliceProfile cnSliceProfile = sliceTaskInfo.sliceProfile
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
+ SliceProfileAdapter cnSliceProfile = sliceTaskInfo.sliceProfile
String profileId = UUID.randomUUID().toString()
cnSliceProfile.setSliceProfileId(profileId)
@@ -402,7 +421,11 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
sliceProfile.setProfileId(profileId)
sliceProfile.setCoverageAreaTAList(cnSliceProfile.coverageAreaTAList as String)
//todo:...
- AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(globalSubscriberId)
+ .serviceSubscription(subscriptionServiceType)
+ .serviceInstance(sliceTaskInfo.sliceInstanceId)
+ .sliceProfile(profileId))
client.create(uri, sliceProfile)
execution.setVariable("sliceTaskParams", sliceParams)
}
@@ -416,7 +439,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
//todo:
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<CnSliceProfile> sliceTaskInfo = sliceParams.cnSliceTaskInfo
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
@@ -424,8 +447,16 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
allocateCnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
allocateCnNssi.nssiId = sliceTaskInfo.suggestNssiId
allocateCnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
- allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile
- allocateCnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId
+ allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
+ NsiInfo nsiInfo = new NsiInfo()
+ nsiInfo.nsiId = sliceParams.suggestNsiId
+ allocateCnNssi.nsiInfo = nsiInfo
+ // endPoint
+ EndPoint endPoint = new EndPoint()
+ endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
+ endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
+ endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
+ allocateCnNssi.setEndPoint(endPoint)
EsrInfo esrInfo = new EsrInfo()
//todo: vendor and network
@@ -462,37 +493,29 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String globalSubscriberId = execution.getVariable("globalSubscriberId")
String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
- String serviceType = ""
- String serviceRole = "slice-profile"
String oStatus = "deactivated"
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
String serviceInstanceId = UUID.randomUUID().toString()
sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
//execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
// create slice profile
- ServiceInstance rspi = new ServiceInstance()
- rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
- rspi.setServiceType(serviceType)
- rspi.setServiceRole(serviceRole)
- rspi.setOrchestrationStatus(oStatus)
- rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
- rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
- rspi.setInputParameters(uuiRequest)
- rspi.setWorkloadContext(useInterval)
- rspi.setEnvironmentContext(sNSSAI_id)
+ ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, oStatus)
//timestamp format YYYY-MM-DD hh:mm:ss
rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
execution.setVariable("communicationServiceInstance", rspi)
- AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(serviceInstanceId))
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(globalSubscriberId)
+ .serviceSubscription(subscriptionServiceType)
+ .serviceInstance(serviceInstanceId))
client.create(uri, rspi)
execution.setVariable("sliceTaskParams", sliceParams)
@@ -510,16 +533,20 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
- TnSliceProfile tnSliceProfile = sliceTaskInfo.sliceProfile
+ SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
String profileId = UUID.randomUUID().toString()
tnSliceProfile.setSliceProfileId(profileId)
SliceProfile sliceProfile = new SliceProfile()
sliceProfile.setProfileId(profileId)
//todo:...
- AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(sliceTaskInfo.sliceInstanceId).sliceProfile(profileId))
+ AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(globalSubscriberId)
+ .serviceSubscription(subscriptionServiceType)
+ .serviceInstance(sliceTaskInfo.sliceInstanceId)
+ .sliceProfile(profileId))
client.create(uri, sliceProfile)
execution.setVariable("sliceTaskParams", sliceParams)
@@ -534,16 +561,30 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
//todo:
SliceTaskParamsAdapter sliceParams =
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
- SliceTaskInfo<TnSliceProfile> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
+ SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnBHSliceTaskInfo
NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
//todo: AllocateTnNssi
- //todo: endpointId -> set into tn
- allocateTnNssi.setTransportSliceNetworks()
- allocateTnNssi.setNetworkSliceInfos()
+ //todo: endPointId -> set into tn
+ List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
+ TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
+ List<ConnectionLink> connectionLinks = new ArrayList<>()
+ ConnectionLink connectionLink = new ConnectionLink()
+ connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
+ connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
+ connectionLinks.add(connectionLink)
+ transportSliceNetwork.setConnectionLinks(connectionLinks)
+ transportSliceNetworks.add(transportSliceNetwork)
+ allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
+ allocateTnNssi.setNetworkSliceInfos()
+ allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
+ NsiInfo nsiInfo = new NsiInfo()
+ nsiInfo.setNsiId(sliceParams.suggestNsiId)
+ nsiInfo.setNsiName(sliceParams.suggestNsiName)
+ allocateTnNssi.setNsiInfo(nsiInfo)
//allocateTnNssi.networkSliceInfos
@@ -591,7 +632,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
String serviceProfileInstanceId = sliceParams.serviceId
//nsi id
- //todo: aai -> nssi -> relationship -> endpointId -> set into tn
+ //todo: aai -> nssi -> relationship -> endPointId -> set into tn
String endPointId = getEndpointIdFromAAI(execution, nssiId)
execution.setVariable("endPointIdAn", endPointId)
@@ -625,7 +666,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
String serviceProfileInstanceId = sliceParams.serviceId
//nsi id
- //todo: aai -> nssi -> relationship -> endpointId -> set into tn
+ //todo: aai -> nssi -> relationship -> endPointId -> set into tn
String endPointId = getEndpointIdFromAAI(execution, nssiId)
execution.setVariable("endPointIdCn", endPointId)
@@ -653,7 +694,10 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
//sliceParams.setServiceId(nsiServiceInstanceID)
- AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nssiId))
+ AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(execution.getVariable("globalSubscriberId"))
+ .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+ .serviceInstance(nssiId))
String endpointId = null
@@ -666,7 +710,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
} else {
ServiceInstance nssiInstance = si.get()
- //todo: handle relationship and return endpointId
+ //todo: handle relationship and return endPointId
if (nssiInstance.relationshipList == null) {
String msg = "relationshipList of " + nssiId + " is null"
logger.debug(msg)
@@ -730,14 +774,39 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
//relation ship
Relationship relationship = new Relationship()
- AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(targetId))
+ AAIResourceUri targetInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(execution.getVariable("globalSubscriberId"))
+ .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+ .serviceInstance(targetId))
logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
relationship.setRelatedLink(targetInstanceUri.build().toString())
- AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId)).relationshipAPI()
+ AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+ .customer(execution.getVariable("globalSubscriberId"))
+ .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+ .serviceInstance(sourceId))
+ .relationshipAPI()
client.create(sourceInstanceUri, relationship)
}
+ static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
+ // create slice profile
+ ServiceInstance rspi = new ServiceInstance()
+ rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
+ rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
+ rspi.setServiceRole("slice-profile")
+ rspi.setOrchestrationStatus(oStatus)
+ rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
+ rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
+ rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID)
+ rspi.setWorkloadContext(sliceTaskInfo.subnetType.subnetType)
+ rspi.setEnvironmentContext(sliceTaskInfo.sliceProfile.getSNSSAIList())
+
+ //timestamp format YYYY-MM-DD hh:mm:ss
+ rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
+ return rspi
+ }
+
}
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy
index 896d7ff4b1..e5c1b56d55 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy
@@ -99,8 +99,12 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
if (response != null) {
JobStatusResponse jobStatusResponse = objectMapper.readValue(response, JobStatusResponse.class)
- execution.setVariable("nssiAllocateStatus", jobStatusResponse)
+ if (StringUtils.isBlank(nssiId)) {
+ nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
+ execution.setVariable("nssiAllocateResult", nssiAllocateResult)
+ }
+ execution.setVariable("nssiAllocateStatus", jobStatusResponse)
if (jobStatusResponse.getResponseDescriptor().getProgress() == 100) {
execution.setVariable("jobFinished", true)
}
@@ -119,8 +123,9 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
sliceTaskInfo.progress = response.getProgress()
- sliceTaskInfo.status = response.getStatus()
+ sliceTaskInfo.status = response.getStatus().toLowerCase()
sliceTaskInfo.statusDescription = response.getStatusDescription()
+ sliceTaskInfo.endPointId = response.getEndPointId()
updateNssiResult(sliceParams, subnetType, sliceTaskInfo)
String paramJson = sliceParams.convertToJson()
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceInstance.groovy
index fc80a9f658..ec70bd3780 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceInstance.groovy
@@ -246,6 +246,7 @@ class DoCreateSliceServiceInstance extends AbstractServiceTaskProcessor{
client.create(allottedResourceUri, resource)
+ execution.setVariable("allottedResourceId", allottedResourceId)
}
}catch (Exception ex) {
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy
index 2cce68a2b6..9450227467 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy
@@ -22,13 +22,12 @@ package org.onap.so.bpmn.infrastructure.scripts
import com.fasterxml.jackson.databind.ObjectMapper
import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.onap.so.beans.nsmf.AnSliceProfile
-import org.onap.so.beans.nsmf.CnSliceProfile
import org.onap.so.beans.nsmf.EsrInfo
import org.onap.so.beans.nsmf.NetworkType
import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest
+import org.onap.so.beans.nsmf.QuerySubnetCapability
+import org.onap.so.beans.nsmf.SliceProfileAdapter
import org.onap.so.beans.nsmf.SliceTaskParamsAdapter
-import org.onap.so.beans.nsmf.TnSliceProfile
import org.onap.so.beans.nsmf.oof.SubnetCapability
import org.onap.so.beans.nsmf.oof.SubnetType
import org.onap.so.beans.nsmf.oof.TemplateInfo
@@ -45,6 +44,7 @@ import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.util.StringUtils
+
class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
private static final Logger logger = LoggerFactory.getLogger(DoCreateSliceServiceOption.class)
@@ -185,6 +185,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
execution.setVariable("sliceTaskParams", sliceParams)
execution.setVariable("subnetCapabilities", subnetCapabilities)
+ execution.setVariable("queryNsiFirst", true)
logger.debug("sliceTaskParams= " + sliceParams.toString())
}
@@ -290,13 +291,12 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest()
List<String> subnetTypes = new ArrayList<>()
-
subnetTypes.add(subnetType.subnetType)
- Map<String, Object> paramMap = new HashMap<>()
- paramMap.put("subnetTypes", subnetTypes)
+ QuerySubnetCapability req = new QuerySubnetCapability()
+ req.setSubnetTypes(subnetTypes)
- request.setSubnetCapabilityQuery(paramMap)
+ request.setSubnetCapabilityQuery(req)
EsrInfo esrInfo = new EsrInfo()
esrInfo.setVendor(vendor)
@@ -362,66 +362,73 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
Map<String, Object> resMap = objectMapper.readValue(oofResponse, Map.class)
String requestStatus = resMap.get("requestStatus")
- if (StringUtils.isEmpty(requestStatus)) {
+ if (!StringUtils.isEmpty(requestStatus) && requestStatus == "error") {
exceptionUtil.buildWorkflowException(execution, 7000, "get nsi from oof error: " + oofResponse)
+ return
}
List<Map<String, Object>> nsiSolutions = (List<Map<String, Object>>) resMap.get("solutions")
Map<String, Object> solution = nsiSolutions.get(0)
- String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
- Boolean isSharable = resourceSharingLevel == "shared"
+ //String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
+ //Boolean isSharable = resourceSharingLevel == "shared"
if (solution != null) {
- if (isSharable && solution.get("existingNSI")) {
- //sharedNSISolution
- processSharedNSI(solution, sliceTaskParams)
- execution.setVariable("needQuerySliceProfile", true)
- }
- else {
- if(execution.getVariable("needQuerySliceProfile")){
+ if (execution.getVariable("queryNsiFirst")) {
+ if (solution.get("existingNSI")) {
+ execution.setVariable("needQuerySliceProfile", true)
+ } else {
+ processNewNSI(solution, sliceTaskParams)
execution.setVariable("needQuerySliceProfile", false)
}
- processNewNSI(solution, sliceTaskParams)
+ execution.setVariable("queryNsiFirst", false)
+ } else {
+ processSharedNSI(solution, sliceTaskParams)
+ execution.setVariable("needQuerySliceProfile", false)
}
}
execution.setVariable("sliceTaskParams", sliceTaskParams)
+ logger.debug("after req to oof for nis select, sliceTaskParams = " + sliceTaskParams)
logger.debug("*** Completed options Call to OOF ***")
}
- private void processSharedNSI(Map<String, Object> solution, SliceTaskParamsAdapter sliceParams) {
+ private static void processSharedNSI(Map<String, Object> solution, SliceTaskParamsAdapter sliceParams) {
Map<String, Object> sharedNSISolution = solution.get("sharedNSISolution") as Map
-
String nsiId = sharedNSISolution.get("NSIId")
String nsiName = sharedNSISolution.get("NSIName")
sliceParams.setSuggestNsiId(nsiId)
sliceParams.setSuggestNsiName(nsiName)
+ List<Map> sliceProfiles = sharedNSISolution.get("sliceProfiles") as List<Map>
+ handleSliceProfiles(sliceProfiles, sliceParams)
}
- private void processNewNSI(Map<String, Object> solution, SliceTaskParamsAdapter sliceParams) {
+ private static void processNewNSI(Map<String, Object> solution, SliceTaskParamsAdapter sliceParams) {
Map<String, Object> newNSISolution = solution.get("newNSISolution") as Map
List<Map> sliceProfiles = newNSISolution.get("sliceProfiles") as List<Map>
+ handleSliceProfiles(sliceProfiles, sliceParams)
+ }
+
+ static def handleSliceProfiles(List<Map> sliceProfiles, SliceTaskParamsAdapter sliceParams) {
for (Map sliceProfile : sliceProfiles) {
String domainType = sliceProfile.get("domainType")
+ sliceProfile.remove("domainType")
+ SliceProfileAdapter adapter = objectMapper.readValue(objectMapper.writeValueAsString(sliceProfile), SliceProfileAdapter.class)
switch (domainType.toLowerCase()) {
case "tn-bh":
- sliceParams.tnBHSliceTaskInfo.sliceProfile = sliceProfile as TnSliceProfile
+ sliceParams.tnBHSliceTaskInfo.sliceProfile = adapter
break
case "an-nf":
case "an":
- sliceParams.anSliceTaskInfo.sliceProfile = sliceProfile as AnSliceProfile
+ sliceParams.anSliceTaskInfo.sliceProfile = adapter
break
case "cn":
- sliceParams.cnSliceTaskInfo.sliceProfile = sliceProfile as CnSliceProfile
+ sliceParams.cnSliceTaskInfo.sliceProfile = adapter
break
default:
break
}
-
- //todo
-
}
}
@@ -485,7 +492,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
String selection = resMap.get("selection")
if ("NSMF".equalsIgnoreCase(selection)) {
- execution.setVariable("NEED_CN_NSSI_SELECTION", true)
+ //execution.setVariable("NEED_CN_NSSI_SELECTION", true)
}
}
@@ -597,7 +604,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
TemplateInfo nsstInfo = nssiNeedHandlerInfo.get("nsstInfo") as TemplateInfo
Map<String, Object> profileInfo = nssiNeedHandlerInfo.get("sliceProfile") as Map
- profileInfo.remove("profileId")
+ //profileInfo.remove("profileId")
String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
logger.debug( "get NSI option OOF Url: " + urlString)
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
index 8a276ed330..88db2161f7 100644
--- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
+++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
@@ -321,17 +321,17 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
String status,
String progress,
String statusDescription) {
- String serviceId = execution.getVariable("dummyServiceId")
+ String modelUuid = execution.getVariable("modelUuid")
String ssInstanceId = execution.getVariable("sliceServiceInstanceId")
String jobId = execution.getVariable("jobId")
String nsiId = execution.getVariable("nsiId")
ResourceOperationStatus roStatus = new ResourceOperationStatus()
- roStatus.setServiceId(serviceId)
+ roStatus.setServiceId(nsiId)
roStatus.setOperationId(jobId)
- roStatus.setResourceTemplateUUID(nsiId)
+ roStatus.setResourceTemplateUUID(modelUuid)
roStatus.setResourceInstanceID(ssInstanceId)
- roStatus.setOperType("Allocate")
+ roStatus.setOperType("ALLOCATE")
roStatus.setProgress(progress)
roStatus.setStatus(status)
roStatus.setStatusDescription(statusDescription)
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn
index 9656c86ae5..1a9281f7d9 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn
@@ -5,7 +5,7 @@
<bpmn:outgoing>SequenceFlow_03s744c</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:intermediateCatchEvent id="IntermediateCatchEvent_0vilb24" name="Waiting for confirmation">
- <bpmn:outgoing>SequenceFlow_060j650</bpmn:outgoing>
+ <bpmn:outgoing>SequenceFlow_0sub2c2</bpmn:outgoing>
<bpmn:linkEventDefinition id="LinkEventDefinition_197u5pe" name="WaitingForConfirmation" />
</bpmn:intermediateCatchEvent>
<bpmn:scriptTask id="ScriptTask_1tc44ge" name="PreProcess Incoming Request" scriptFormat="groovy">
@@ -44,6 +44,8 @@ css.processUserOptions(execution)</bpmn:script>
<camunda:in source="sliceTaskParams" target="sliceTaskParams" />
<camunda:in source="sliceTaskParams" target="sliceTaskParams" />
<camunda:out source="sliceTaskParams" target="sliceTaskParams" />
+ <camunda:out source="allottedResourceId" target="allottedResourceId" />
+ <camunda:out source="allottedResourceUri" target="allottedResourceUri" />
</bpmn:extensionElements>
<bpmn:incoming>SequenceFlow_1dfon41</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0jhqtls</bpmn:outgoing>
@@ -281,6 +283,7 @@ css.prepareUpdateOrchestrationTask(execution)</bpmn:script>
<camunda:out source="rolledBack" target="rolledBack" />
<camunda:in source="allottedResourceId" target="allottedResourceId" />
<camunda:out source="sliceTaskParams" target="sliceTaskParams" />
+ <camunda:in source="allottedResourceUri" target="allottedResourceUri" />
</bpmn:extensionElements>
<bpmn:incoming>SequenceFlow_1bevt3a</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0mlrlbv</bpmn:outgoing>
@@ -355,7 +358,6 @@ css.prepareCreateOrchestrationTask(execution)</bpmn:script>
</bpmn:intermediateCatchEvent>
<bpmn:sequenceFlow id="SequenceFlow_14c2tav" sourceRef="IntermediateCatchEvent_0gceuxu" targetRef="ScriptTask_1ayg9y8" />
<bpmn:sequenceFlow id="SequenceFlow_00kcej9" sourceRef="CallActivity_0n47zoh" targetRef="IntermediateThrowEvent_1v96asi" />
- <bpmn:sequenceFlow id="SequenceFlow_060j650" sourceRef="IntermediateCatchEvent_0vilb24" targetRef="ScriptTask_04qudo2" />
<bpmn:intermediateThrowEvent id="IntermediateThrowEvent_0lpvnze" name="Goto Create Slice Service">
<bpmn:incoming>SequenceFlow_12wo878</bpmn:incoming>
<bpmn:linkEventDefinition id="LinkEventDefinition_1oxsvp3" name="CreateSliceService" />
@@ -369,20 +371,12 @@ def css = new CreateSliceService()
css.processNSTSolutions(execution)</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="SequenceFlow_1f6dyxo" sourceRef="ScriptTask_13roglo" targetRef="CallActivity_0v4mw2x" />
- <bpmn:receiveTask id="ReceiveTask_02qzb6i" name="Waiting for confirmation" />
<bpmn:endEvent id="EndEvent_0bz8a65">
- <bpmn:incoming>SequenceFlow_1vesvto</bpmn:incoming>
+ <bpmn:incoming>SequenceFlow_1fk2cn3</bpmn:incoming>
<bpmn:errorEventDefinition id="ErrorEventDefinition_1hni1r1" errorRef="Error_0p2naox" />
</bpmn:endEvent>
- <bpmn:boundaryEvent id="BoundaryEvent_0p4swyp" attachedToRef="ReceiveTask_02qzb6i">
- <bpmn:outgoing>SequenceFlow_1vesvto</bpmn:outgoing>
- <bpmn:timerEventDefinition id="TimerEventDefinition_112p48l">
- <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">PT2H</bpmn:timeDuration>
- </bpmn:timerEventDefinition>
- </bpmn:boundaryEvent>
- <bpmn:sequenceFlow id="SequenceFlow_1vesvto" sourceRef="BoundaryEvent_0p4swyp" targetRef="EndEvent_0bz8a65" />
<bpmn:scriptTask id="ScriptTask_04qudo2" name="Prepare Get User Options" scriptFormat="groovy">
- <bpmn:incoming>SequenceFlow_060j650</bpmn:incoming>
+ <bpmn:incoming>SequenceFlow_031cwkd</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_0ti386y</bpmn:outgoing>
<bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
def css = new CreateSliceService()
@@ -427,10 +421,36 @@ def css = new CreateSliceService()
css.prepareSelectNSTRequest(execution)</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="SequenceFlow_02sve8o" sourceRef="ScriptTask_1ayg9y8" targetRef="CallActivity_0xf2g6c" />
+ <bpmn:subProcess id="SubProcess_1sxkpqq" name="Wait for Confim Message">
+ <bpmn:incoming>SequenceFlow_0sub2c2</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_031cwkd</bpmn:outgoing>
+ <bpmn:startEvent id="StartEvent_1hd68zf">
+ <bpmn:outgoing>SequenceFlow_0recnor</bpmn:outgoing>
+ </bpmn:startEvent>
+ <bpmn:endEvent id="EndEvent_05npq16">
+ <bpmn:incoming>SequenceFlow_1htsa6t</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_1iti8re" name="Catch Confim Message">
+ <bpmn:incoming>SequenceFlow_0recnor</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1htsa6t</bpmn:outgoing>
+ <bpmn:messageEventDefinition id="MessageEventDefinition_1rxlviw" messageRef="Message_0c4b2r5" />
+ </bpmn:intermediateCatchEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_1htsa6t" name="" sourceRef="IntermediateCatchEvent_1iti8re" targetRef="EndEvent_05npq16" />
+ <bpmn:sequenceFlow id="SequenceFlow_0recnor" name="" sourceRef="StartEvent_1hd68zf" targetRef="IntermediateCatchEvent_1iti8re" />
+ </bpmn:subProcess>
+ <bpmn:boundaryEvent id="BoundaryEvent_0xqq1ch" name="Timeout" attachedToRef="SubProcess_1sxkpqq">
+ <bpmn:outgoing>SequenceFlow_1fk2cn3</bpmn:outgoing>
+ <bpmn:timerEventDefinition id="TimerEventDefinition_0jxhpup">
+ <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">PT2H</bpmn:timeDuration>
+ </bpmn:timerEventDefinition>
+ </bpmn:boundaryEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_1fk2cn3" sourceRef="BoundaryEvent_0xqq1ch" targetRef="EndEvent_0bz8a65" />
+ <bpmn:sequenceFlow id="SequenceFlow_0sub2c2" sourceRef="IntermediateCatchEvent_0vilb24" targetRef="SubProcess_1sxkpqq" />
+ <bpmn:sequenceFlow id="SequenceFlow_031cwkd" sourceRef="SubProcess_1sxkpqq" targetRef="ScriptTask_04qudo2" />
</bpmn:process>
- <bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" />
<bpmn:error id="Error_03akl5v" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
<bpmn:error id="Error_0p2naox" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
+ <bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateSliceService">
<bpmndi:BPMNEdge id="SequenceFlow_0kixzdj_di" bpmnElement="SequenceFlow_0kixzdj">
@@ -446,20 +466,20 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
<di:waypoint x="274" y="965" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_10ng1vx_di" bpmnElement="SequenceFlow_10ng1vx">
- <di:waypoint x="1294" y="805" />
+ <di:waypoint x="1320" y="805" />
<di:waypoint x="1396" y="805" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_19lsayh_di" bpmnElement="SequenceFlow_19lsayh">
- <di:waypoint x="1124" y="805" />
- <di:waypoint x="1194" y="805" />
+ <di:waypoint x="1174" y="805" />
+ <di:waypoint x="1220" y="805" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_0477975_di" bpmnElement="SequenceFlow_0477975">
- <di:waypoint x="1294" y="620" />
+ <di:waypoint x="1320" y="620" />
<di:waypoint x="1396" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_0thd6ny_di" bpmnElement="SequenceFlow_0thd6ny">
- <di:waypoint x="1124" y="620" />
- <di:waypoint x="1194" y="620" />
+ <di:waypoint x="1160" y="620" />
+ <di:waypoint x="1220" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_1qv8qw1_di" bpmnElement="SequenceFlow_1qv8qw1">
<di:waypoint x="1174" y="965" />
@@ -504,23 +524,23 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
<di:waypoint x="1220" y="350" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_038lb9m_di" bpmnElement="SequenceFlow_038lb9m">
- <di:waypoint x="884" y="645" />
- <di:waypoint x="884" y="805" />
- <di:waypoint x="1024" y="805" />
+ <di:waypoint x="984" y="645" />
+ <di:waypoint x="984" y="805" />
+ <di:waypoint x="1074" y="805" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="886" y="722" width="27" height="14" />
+ <dc:Bounds x="986" y="722" width="27" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_12t5exy_di" bpmnElement="SequenceFlow_12t5exy">
- <di:waypoint x="909" y="620" />
- <di:waypoint x="1024" y="620" />
+ <di:waypoint x="1009" y="620" />
+ <di:waypoint x="1060" y="620" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="911" y="602" width="42" height="14" />
+ <dc:Bounds x="998" y="602" width="42" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_197cm2e_di" bpmnElement="SequenceFlow_197cm2e">
- <di:waypoint x="804" y="620" />
- <di:waypoint x="859" y="620" />
+ <di:waypoint x="930" y="620" />
+ <di:waypoint x="959" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="SequenceFlow_07e12rt_di" bpmnElement="SequenceFlow_07e12rt">
<di:waypoint x="350" y="122" />
@@ -543,12 +563,12 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ScriptTask_1jgtb0y_di" bpmnElement="ScriptTask_1jgtb0y">
- <dc:Bounds x="704" y="580" width="100" height="80" />
+ <dc:Bounds x="830" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ExclusiveGateway_0elbczl_di" bpmnElement="ExclusiveGateway_0elbczl" isMarkerVisible="true">
- <dc:Bounds x="859" y="595" width="50" height="50" />
+ <dc:Bounds x="959" y="595" width="50" height="50" />
<bpmndi:BPMNLabel>
- <dc:Bounds x="846" y="577" width="78" height="14" />
+ <dc:Bounds x="946" y="577" width="78" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="CallActivity_139l55g_di" bpmnElement="CallActivity_139l55g">
@@ -620,16 +640,16 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
<dc:Bounds x="1220" y="310" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ScriptTask_12h8542_di" bpmnElement="ScriptTask_12h8542">
- <dc:Bounds x="1024" y="580" width="100" height="80" />
+ <dc:Bounds x="1060" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="CallActivity_0o89wmf_di" bpmnElement="CallActivity_0o89wmf">
- <dc:Bounds x="1194" y="580" width="100" height="80" />
+ <dc:Bounds x="1220" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="CallActivity_0jdzpem_di" bpmnElement="CallActivity_0jdzpem">
- <dc:Bounds x="1194" y="765" width="100" height="80" />
+ <dc:Bounds x="1220" y="765" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="ScriptTask_1mscu5w_di" bpmnElement="ScriptTask_1mscu5w">
- <dc:Bounds x="1024" y="765" width="100" height="80" />
+ <dc:Bounds x="1074" y="765" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="IntermediateCatchEvent_0pkvfun_di" bpmnElement="IntermediateCatchEvent_0pkvfun">
<dc:Bounds x="177" y="947" width="36" height="36" />
@@ -700,10 +720,6 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
<di:waypoint x="1320" y="350" />
<di:waypoint x="1402" y="350" />
</bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge id="SequenceFlow_060j650_di" bpmnElement="SequenceFlow_060j650">
- <di:waypoint x="213" y="620" />
- <di:waypoint x="394" y="620" />
- </bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="IntermediateThrowEvent_0lpvnze_di" bpmnElement="IntermediateThrowEvent_0lpvnze">
<dc:Bounds x="1402" y="106" width="36" height="36" />
<bpmndi:BPMNLabel>
@@ -721,32 +737,22 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
<di:waypoint x="810" y="350" />
<di:waypoint x="880" y="350" />
</bpmndi:BPMNEdge>
- <bpmndi:BPMNShape id="ReceiveTask_02qzb6i_di" bpmnElement="ReceiveTask_02qzb6i">
- <dc:Bounds x="254" y="580" width="100" height="80" />
- </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_0bz8a65_di" bpmnElement="EndEvent_0bz8a65">
- <dc:Bounds x="286" y="757" width="36" height="36" />
+ <dc:Bounds x="354" y="772" width="36" height="36" />
</bpmndi:BPMNShape>
- <bpmndi:BPMNShape id="BoundaryEvent_0p4swyp_di" bpmnElement="BoundaryEvent_0p4swyp">
- <dc:Bounds x="286" y="642" width="36" height="36" />
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge id="SequenceFlow_1vesvto_di" bpmnElement="SequenceFlow_1vesvto">
- <di:waypoint x="304" y="678" />
- <di:waypoint x="304" y="757" />
- </bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="ScriptTask_04qudo2_di" bpmnElement="ScriptTask_04qudo2">
- <dc:Bounds x="394" y="580" width="100" height="80" />
+ <dc:Bounds x="550" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_0ti386y_di" bpmnElement="SequenceFlow_0ti386y">
- <di:waypoint x="494" y="620" />
- <di:waypoint x="534" y="620" />
+ <di:waypoint x="650" y="620" />
+ <di:waypoint x="688" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="CallActivity_1vu3zcv_di" bpmnElement="CallActivity_1vu3zcv">
- <dc:Bounds x="534" y="580" width="100" height="80" />
+ <dc:Bounds x="688" y="580" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="SequenceFlow_1whq7vc_di" bpmnElement="SequenceFlow_1whq7vc">
- <di:waypoint x="634" y="620" />
- <di:waypoint x="704" y="620" />
+ <di:waypoint x="788" y="620" />
+ <di:waypoint x="830" y="620" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="CallActivity_0xf2g6c_di" bpmnElement="CallActivity_0xf2g6c">
<dc:Bounds x="520" y="310" width="100" height="80" />
@@ -762,6 +768,47 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
<di:waypoint x="410" y="350" />
<di:waypoint x="520" y="350" />
</bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="SubProcess_1sxkpqq_di" bpmnElement="SubProcess_1sxkpqq" isExpanded="true">
+ <dc:Bounds x="240" y="540" width="280" height="160" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="BoundaryEvent_0xqq1ch_di" bpmnElement="BoundaryEvent_0xqq1ch">
+ <dc:Bounds x="354" y="682" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="395" y="712" width="40" height="14" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="StartEvent_1hd68zf_di" bpmnElement="StartEvent_1hd68zf">
+ <dc:Bounds x="272" y="602" width="36" height="36" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_05npq16_di" bpmnElement="EndEvent_05npq16">
+ <dc:Bounds x="460" y="602" width="36" height="36" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="IntermediateCatchEvent_1iti8re_di" bpmnElement="IntermediateCatchEvent_1iti8re">
+ <dc:Bounds x="367" y="602" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="353" y="644" width="67" height="27" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1htsa6t_di" bpmnElement="SequenceFlow_1htsa6t">
+ <di:waypoint x="403" y="620" />
+ <di:waypoint x="460" y="620" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0recnor_di" bpmnElement="SequenceFlow_0recnor">
+ <di:waypoint x="308" y="620" />
+ <di:waypoint x="367" y="620" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1fk2cn3_di" bpmnElement="SequenceFlow_1fk2cn3">
+ <di:waypoint x="372" y="718" />
+ <di:waypoint x="372" y="772" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0sub2c2_di" bpmnElement="SequenceFlow_0sub2c2">
+ <di:waypoint x="213" y="620" />
+ <di:waypoint x="240" y="620" />
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_031cwkd_di" bpmnElement="SequenceFlow_031cwkd">
+ <di:waypoint x="520" y="620" />
+ <di:waypoint x="550" y="620" />
+ </bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterCreateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterCreateTasks.java
index 663b097b78..685dbe2dca 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterCreateTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterCreateTasks.java
@@ -121,8 +121,7 @@ public class VnfAdapterCreateTasks {
try {
volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID);
} catch (BBObjectNotFoundException bbException) {
- logger.error("Exception occurred if bb object not found in VnfAdapterCreateTasks createVfModule ",
- bbException);
+ logger.info("Volume Group not found in GBB. ");
}
CloudRegion cloudRegion = gBBInput.getCloudRegion();
RequestContext requestContext = gBBInput.getRequestContext();
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
index 43a85051be..554385d043 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
@@ -78,6 +78,7 @@ public class WorkflowActionBBTasks {
private static final String ROLLBACKTOCREATEDNOCONFIGURATION = "RollbackToCreatedNoConfiguration";
private static final String REPLACEINSTANCE = "replaceInstance";
private static final String VFMODULE = "VfModule";
+ private static final String CONFIGURATION_PATTERN = "(Ad|De)(.*)FabricConfiguration(.*)";
protected String maxRetries = "mso.rainyDay.maxRetries";
private static final Logger logger = LoggerFactory.getLogger(WorkflowActionBBTasks.class);
@@ -99,19 +100,26 @@ public class WorkflowActionBBTasks {
private RequestsDbListenerRunner requestsDbListener;
public void selectBB(DelegateExecution execution) {
- List<ExecuteBuildingBlock> flowsToExecute =
- (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
- execution.setVariable("MacroRollback", false);
-
- flowManipulatorListenerRunner.modifyFlows(flowsToExecute, new DelegateExecutionImpl(execution));
- int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
+ try {
+ List<ExecuteBuildingBlock> flowsToExecute =
+ (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+ execution.setVariable("MacroRollback", false);
+ try {
+ flowManipulatorListenerRunner.modifyFlows(flowsToExecute, new DelegateExecutionImpl(execution));
+ } catch (NullPointerException ex) {
+ workflowAction.buildAndThrowException(execution, "Error in FlowManipulator Modify Flows", ex);
+ }
+ int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
- ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence);
+ ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence);
- execution.setVariable("buildingBlock", ebb);
- currentSequence++;
- execution.setVariable(COMPLETED, currentSequence >= flowsToExecute.size());
- execution.setVariable(G_CURRENT_SEQUENCE, currentSequence);
+ execution.setVariable("buildingBlock", ebb);
+ currentSequence++;
+ execution.setVariable(COMPLETED, currentSequence >= flowsToExecute.size());
+ execution.setVariable(G_CURRENT_SEQUENCE, currentSequence);
+ } catch (Exception e) {
+ workflowAction.buildAndThrowException(execution, "Internal Error occured during selectBB", e);
+ }
}
public void updateFlowStatistics(DelegateExecution execution) {
@@ -414,12 +422,9 @@ public class WorkflowActionBBTasks {
String handlingCode = (String) execution.getVariable(HANDLINGCODE);
final boolean aLaCarte = (boolean) execution.getVariable(G_ALACARTE);
int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
- String requestAction = (String) execution.getVariable(G_ACTION);
ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence - 1);
String bbFlowName = ebb.getBuildingBlock().getBpmnFlowName();
- if ("ActivateVfModuleBB".equalsIgnoreCase(bbFlowName) && aLaCarte && "Success".equalsIgnoreCase(handlingCode)
- && !(requestAction.equalsIgnoreCase("replaceInstance")
- || requestAction.equalsIgnoreCase("replaceInstanceRetainAssignments"))) {
+ if ("ActivateVfModuleBB".equalsIgnoreCase(bbFlowName) && aLaCarte && "Success".equalsIgnoreCase(handlingCode)) {
postProcessingExecuteBBActivateVfModule(execution, ebb, flowsToExecute);
}
}
@@ -427,6 +432,7 @@ public class WorkflowActionBBTasks {
protected void postProcessingExecuteBBActivateVfModule(DelegateExecution execution, ExecuteBuildingBlock ebb,
List<ExecuteBuildingBlock> flowsToExecute) {
try {
+ String requestAction = (String) execution.getVariable(G_ACTION);
String serviceInstanceId = ebb.getWorkflowResourceIds().getServiceInstanceId();
String vnfId = ebb.getWorkflowResourceIds().getVnfId();
String vfModuleId = ebb.getResourceId();
@@ -441,26 +447,44 @@ public class WorkflowActionBBTasks {
for (Vnfc vnfc : vnfcs) {
String modelCustomizationId = vnfc.getModelCustomizationId();
logger.debug("Processing Vnfc: {}", modelCustomizationId);
- CvnfcConfigurationCustomization fabricConfig = catalogDbClient.getCvnfcCustomization(serviceModelUUID,
- vnfCustomizationUUID, vfModuleCustomizationUUID, modelCustomizationId);
- if (fabricConfig != null && fabricConfig.getConfigurationResource() != null
- && fabricConfig.getConfigurationResource().getToscaNodeType() != null
- && fabricConfig.getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
- String configurationId = getConfigurationId(vnfc);
- ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
- configurationResourceKeys.setCvnfcCustomizationUUID(modelCustomizationId);
- configurationResourceKeys.setVfModuleCustomizationUUID(vfModuleCustomizationUUID);
- configurationResourceKeys.setVnfResourceCustomizationUUID(vnfCustomizationUUID);
- configurationResourceKeys.setVnfcName(vnfc.getVnfcName());
- ExecuteBuildingBlock addConfigBB = getExecuteBBForConfig(ADD_FABRIC_CONFIGURATION_BB, ebb,
- configurationId, configurationResourceKeys);
- flowsToExecute.add(addConfigBB);
- flowsToExecute.forEach(executeBB -> logger.info("Flows to Execute After Post Processing: {}",
- executeBB.getBuildingBlock().getBpmnFlowName()));
- execution.setVariable("flowsToExecute", flowsToExecute);
- execution.setVariable(COMPLETED, false);
+ if (requestAction.equalsIgnoreCase("replaceInstance")
+ || requestAction.equalsIgnoreCase("replaceInstanceRetainAssignments")) {
+ List<ExecuteBuildingBlock> configBBs = flowsToExecute.stream()
+ .filter(item -> item.getBuildingBlock().getBpmnFlowName().matches(CONFIGURATION_PATTERN))
+ .collect(Collectors.toList());
+ if (configBBs != null && configBBs.size() > 0) {
+ for (ExecuteBuildingBlock bb : configBBs) {
+ if (bb.getConfigurationResourceKeys() != null) {
+ bb.getConfigurationResourceKeys().setCvnfcCustomizationUUID(modelCustomizationId);
+ bb.getConfigurationResourceKeys().setVnfcName(vnfc.getVnfcName());
+ }
+ }
+ execution.setVariable("flowsToExecute", flowsToExecute);
+ execution.setVariable(COMPLETED, false);
+ }
} else {
- logger.debug("No cvnfcCustomization found for customizationId: {}", modelCustomizationId);
+ CvnfcConfigurationCustomization fabricConfig = catalogDbClient.getCvnfcCustomization(
+ serviceModelUUID, vnfCustomizationUUID, vfModuleCustomizationUUID, modelCustomizationId);
+ if (fabricConfig != null && fabricConfig.getConfigurationResource() != null
+ && fabricConfig.getConfigurationResource().getToscaNodeType() != null && fabricConfig
+ .getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
+ String configurationId = getConfigurationId(vnfc);
+ ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
+ configurationResourceKeys.setCvnfcCustomizationUUID(modelCustomizationId);
+ configurationResourceKeys.setVfModuleCustomizationUUID(vfModuleCustomizationUUID);
+ configurationResourceKeys.setVnfResourceCustomizationUUID(vnfCustomizationUUID);
+ configurationResourceKeys.setVnfcName(vnfc.getVnfcName());
+ ExecuteBuildingBlock addConfigBB = getExecuteBBForConfig(ADD_FABRIC_CONFIGURATION_BB, ebb,
+ configurationId, configurationResourceKeys);
+ flowsToExecute.add(addConfigBB);
+ flowsToExecute.stream()
+ .forEach(executeBB -> logger.info("Flows to Execute After Post Processing: {}",
+ executeBB.getBuildingBlock().getBpmnFlowName()));
+ execution.setVariable("flowsToExecute", flowsToExecute);
+ execution.setVariable(COMPLETED, false);
+ } else {
+ logger.debug("No cvnfcCustomization found for customizationId: {}", modelCustomizationId);
+ }
}
}
} catch (EntityNotFoundException e) {
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/cnf/CnfAdapterClient.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/cnf/CnfAdapterClient.java
index b74aa9056d..6765999924 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/cnf/CnfAdapterClient.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/cnf/CnfAdapterClient.java
@@ -54,14 +54,14 @@ public class CnfAdapterClient {
@Autowired
private Environment env;
- private static final String INSTANCE_CREATE_PATH = "/api/multicloud-k8s/v1/v1/instance";
+ private static final String INSTANCE_CREATE_PATH = "/api/cnf-adapter/v1/instance";
@Retryable(value = {HttpServerErrorException.class}, maxAttempts = 3, backoff = @Backoff(delay = 3000))
public InstanceResponse createVfModule(InstanceRequest request) throws CnfAdapterClientException {
try {
// String uri = env.getRequiredProperty("mso.cnf.adapter.endpoint"); //TODO: This needs to be added as well
// for configuration
- String uri = "https://localhost:32780"; // TODO: What is the correct uri?
+ String uri = "http://cnf-adapter:8090"; // TODO: What is the correct uri?
String endpoint = UriBuilder.fromUri(uri).path(INSTANCE_CREATE_PATH).build().toString();
HttpEntity<?> entity = getHttpEntity(request);
ResponseEntity<InstanceResponse> result =
@@ -81,7 +81,7 @@ public class CnfAdapterClient {
try {
// String uri = env.getRequiredProperty("mso.cnf.adapter.endpoint"); //TODO: This needs to be added as well
// for configuration
- String uri = "https://localhost:32780"; // TODO: What is the correct uri?
+ String uri = "http://cnf-adapter:8090"; // TODO: What is the correct uri?
String endpoint = UriBuilder.fromUri(uri).path("/api/cnf-adapter/v1/healthcheck").build().toString();
HttpEntity<?> entity = new HttpEntity<>(getHttpHeaders());
ResponseEntity<InstanceResponse> result =
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/AttributeNameValue.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/AttributeNameValue.java
index 6278d48e03..7291b713ca 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/AttributeNameValue.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/AttributeNameValue.java
@@ -21,18 +21,16 @@
package org.onap.so.client.adapter.vnf.mapper;
import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonProperty;
public class AttributeNameValue implements Serializable {
private static final long serialVersionUID = -5215028275587848311L;
+ @JsonProperty("attribute_name")
private String attributeName;
+ @JsonProperty("attribute_value")
private transient Object attributeValue;
- public AttributeNameValue(String attributeName, Object attributeValue) {
- this.attributeName = attributeName;
- this.attributeValue = attributeValue;
- }
-
public String getAttributeName() {
return attributeName;
}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java
index 59da22f8e1..7c686bd165 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java
@@ -235,7 +235,10 @@ public class VnfAdapterVfModuleObjectMapper {
logger.error("No value tag found for attribute: {}", attributeName);
throw new MissingValueTagException("No value tag found for " + attributeName);
}
- directives.append(new AttributeNameValue(attributeName, attributeValue.toString()));
+ String nameValue = new StringBuilder().append("{\"attribute_name\": \"").append(attributeName)
+ .append("\", \"attribute_value\": \"").append(attributeValue.toString()).append("\"}")
+ .toString();
+ directives.append(nameValue);
if (i < (srcMap.size() - 1 + noOfDirectivesSize))
directives.append(", ");
i++;
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
index 3290bb3dce..b7529bdeb8 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
@@ -29,6 +29,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
+import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
@@ -47,23 +48,30 @@ import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
+import org.onap.so.client.namingservice.NamingRequestObject;
+import org.onap.so.db.catalog.beans.ConfigurationResource;
+import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
import org.onap.so.db.catalog.beans.VnfResourceCustomization;
import org.onap.so.db.request.beans.InfraActiveRequests;
import org.onap.so.serviceinstancebeans.ModelInfo;
import org.onap.so.serviceinstancebeans.RequestDetails;
import org.springframework.core.env.Environment;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class WorkflowActionBBTasksTest extends BaseTaskTest {
@@ -96,6 +104,9 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
+ @Mock
+ private DelegateExecution mockExecution;
+
@Before
public void before() throws Exception {
execution = new DelegateExecutionFake();
@@ -602,7 +613,207 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
}
@Test
- public void postProcessingExecuteBBActivateVfModuleTest() throws CloneNotSupportedException {
+ public void postProcessingExecuteBBActivateVfModuleNotReplaceInstanceTest() throws CloneNotSupportedException {
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("1");
+ workflowResourceIds.setVnfId("1");
+
+ BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+ ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
+ ebbActivateVfModule.setWorkflowResourceIds(workflowResourceIds);
+ ebbActivateVfModule.setResourceId("1");
+
+ ServiceInstance service = new ServiceInstance();
+ service.setServiceInstanceName("name");
+ service.setModelVersionId("1");
+ doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById("1");
+
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVnfName("name");
+ vnf.setModelCustomizationId("1");
+ doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf("1");
+
+ VfModule vfModule = new VfModule();
+ vfModule.setVfModuleName("name");
+ vfModule.setModelCustomizationId("1");
+ doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("1", "1");
+
+ List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+ org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+ vnfc.setModelInvariantId("1");
+ vnfc.setVnfcName("name");
+ vnfc.setModelCustomizationId("2");
+ vnfcs.add(vnfc);
+ doReturn(vnfcs).when(workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+ CvnfcConfigurationCustomization vfModuleCustomization = new CvnfcConfigurationCustomization();
+ ConfigurationResource configuration = new ConfigurationResource();
+ configuration.setToscaNodeType("FabricConfiguration");
+ configuration.setModelUUID("1");
+ vfModuleCustomization.setConfigurationResource(configuration);
+
+ doReturn(vfModuleCustomization).when(catalogDbClient).getCvnfcCustomization("1", "1", "1", "2");
+
+ prepareDelegateExecution();
+ List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+ flowsToExecute.add(ebbActivateVfModule);
+
+ execution.setVariable("requestAction", "createInstance");
+ execution.setVariable("completed", true);
+
+ ArgumentCaptor<DelegateExecution> executionCaptor = ArgumentCaptor.forClass(DelegateExecution.class);
+ ArgumentCaptor<ExecuteBuildingBlock> bbCaptor = ArgumentCaptor.forClass(ExecuteBuildingBlock.class);
+ ArgumentCaptor<List> listCaptor = ArgumentCaptor.forClass(List.class);
+ workflowActionBBTasks.postProcessingExecuteBBActivateVfModule(execution, ebbActivateVfModule, flowsToExecute);
+ verify(workflowActionBBTasks, times(1)).postProcessingExecuteBBActivateVfModule(executionCaptor.capture(),
+ bbCaptor.capture(), listCaptor.capture());
+ assertEquals(false, executionCaptor.getAllValues().get(0).getVariable("completed"));
+ assertEquals(2, ((ArrayList) executionCaptor.getAllValues().get(0).getVariable("flowsToExecute")).size());
+ assertEquals("2",
+ ((ExecuteBuildingBlock) ((ArrayList) executionCaptor.getAllValues().get(0)
+ .getVariable("flowsToExecute")).get(1)).getConfigurationResourceKeys()
+ .getCvnfcCustomizationUUID());
+ assertEquals("AddFabricConfigurationBB", ((ExecuteBuildingBlock) ((ArrayList) executionCaptor.getAllValues()
+ .get(0).getVariable("flowsToExecute")).get(1)).getBuildingBlock().getBpmnFlowName());
+ }
+
+ @Test
+ public void postProcessingExecuteBBActivateVfModuleReplaceInstanceHasConfigurationTest()
+ throws CloneNotSupportedException {
+
+ BuildingBlock bbAddFabric = new BuildingBlock().setBpmnFlowName("AddFabricConfigurationBB");
+ ExecuteBuildingBlock ebbAddFabric = new ExecuteBuildingBlock().setBuildingBlock(bbAddFabric);
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("1");
+ workflowResourceIds.setVnfId("1");
+ ebbAddFabric.setWorkflowResourceIds(workflowResourceIds);
+ ebbAddFabric.setResourceId("1");
+
+ BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+ ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
+ ebbActivateVfModule.setWorkflowResourceIds(workflowResourceIds);
+ ebbActivateVfModule.setResourceId("1");
+ ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
+ ebbAddFabric.setConfigurationResourceKeys(configurationResourceKeys);
+
+ ServiceInstance service = new ServiceInstance();
+ service.setServiceInstanceName("name");
+ service.setModelVersionId("1");
+ doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById("1");
+
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVnfName("name");
+ vnf.setModelCustomizationId("1");
+ doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf("1");
+
+ VfModule vfModule = new VfModule();
+ vfModule.setVfModuleName("name");
+ vfModule.setModelCustomizationId("1");
+ doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("1", "1");
+
+ List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+ org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+ vnfc.setModelInvariantId("1");
+ vnfc.setVnfcName("name");
+ vnfc.setModelCustomizationId("2");
+ vnfcs.add(vnfc);
+ doReturn(vnfcs).when(workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+ CvnfcConfigurationCustomization vfModuleCustomization = new CvnfcConfigurationCustomization();
+ ConfigurationResource configuration = new ConfigurationResource();
+ configuration.setToscaNodeType("FabricConfiguration");
+ configuration.setModelUUID("1");
+ vfModuleCustomization.setConfigurationResource(configuration);
+
+ doReturn(vfModuleCustomization).when(catalogDbClient).getCvnfcCustomization("1", "1", "1", "2");
+
+ prepareDelegateExecution();
+ List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+ flowsToExecute.add(ebbActivateVfModule);
+ flowsToExecute.add(ebbAddFabric);
+
+ ArgumentCaptor<DelegateExecution> executionCaptor = ArgumentCaptor.forClass(DelegateExecution.class);
+ ArgumentCaptor<ExecuteBuildingBlock> bbCaptor = ArgumentCaptor.forClass(ExecuteBuildingBlock.class);
+ ArgumentCaptor<List> listCaptor = ArgumentCaptor.forClass(List.class);
+
+ execution.setVariable("requestAction", "replaceInstance");
+ execution.setVariable("completed", true);
+ workflowActionBBTasks.postProcessingExecuteBBActivateVfModule(execution, ebbActivateVfModule, flowsToExecute);
+ verify(workflowActionBBTasks, times(1)).postProcessingExecuteBBActivateVfModule(executionCaptor.capture(),
+ bbCaptor.capture(), listCaptor.capture());
+ assertEquals(false, executionCaptor.getAllValues().get(0).getVariable("completed"));
+ assertEquals(2, ((ArrayList) executionCaptor.getAllValues().get(0).getVariable("flowsToExecute")).size());
+ assertEquals("2",
+ ((ExecuteBuildingBlock) ((ArrayList) executionCaptor.getAllValues().get(0)
+ .getVariable("flowsToExecute")).get(1)).getConfigurationResourceKeys()
+ .getCvnfcCustomizationUUID());
+ }
+
+ @Test
+ public void postProcessingExecuteBBActivateVfModuleReplaceInstanceHasNoConfigurationTest()
+ throws CloneNotSupportedException {
+
+ WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+ workflowResourceIds.setServiceInstanceId("1");
+ workflowResourceIds.setVnfId("1");
+
+ BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+ ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
+ ebbActivateVfModule.setWorkflowResourceIds(workflowResourceIds);
+ ebbActivateVfModule.setResourceId("1");
+
+ ServiceInstance service = new ServiceInstance();
+ service.setServiceInstanceName("name");
+ service.setModelVersionId("1");
+ doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById("1");
+
+ GenericVnf vnf = new GenericVnf();
+ vnf.setVnfName("name");
+ vnf.setModelCustomizationId("1");
+ doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf("1");
+
+ VfModule vfModule = new VfModule();
+ vfModule.setVfModuleName("name");
+ vfModule.setModelCustomizationId("1");
+ doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("1", "1");
+
+ List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+ org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+ vnfc.setModelInvariantId("1");
+ vnfc.setVnfcName("name");
+ vnfc.setModelCustomizationId("2");
+ vnfcs.add(vnfc);
+ doReturn(vnfcs).when(workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+ CvnfcConfigurationCustomization vfModuleCustomization = new CvnfcConfigurationCustomization();
+ ConfigurationResource configuration = new ConfigurationResource();
+ configuration.setToscaNodeType("FabricConfiguration");
+ configuration.setModelUUID("1");
+ vfModuleCustomization.setConfigurationResource(configuration);
+
+ doReturn(vfModuleCustomization).when(catalogDbClient).getCvnfcCustomization("1", "1", "1", "2");
+
+ prepareDelegateExecution();
+ List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+ flowsToExecute.add(ebbActivateVfModule);
+
+ ArgumentCaptor<DelegateExecution> executionCaptor = ArgumentCaptor.forClass(DelegateExecution.class);
+ ArgumentCaptor<ExecuteBuildingBlock> bbCaptor = ArgumentCaptor.forClass(ExecuteBuildingBlock.class);
+ ArgumentCaptor<List> listCaptor = ArgumentCaptor.forClass(List.class);
+
+ execution.setVariable("requestAction", "replaceInstance");
+ execution.setVariable("completed", true);
+
+ workflowActionBBTasks.postProcessingExecuteBBActivateVfModule(execution, ebbActivateVfModule, flowsToExecute);
+ verify(workflowActionBBTasks, times(1)).postProcessingExecuteBBActivateVfModule(executionCaptor.capture(),
+ bbCaptor.capture(), listCaptor.capture());
+ assertEquals(true, executionCaptor.getAllValues().get(0).getVariable("completed"));
+ }
+
+
+
+ @Test
+ public void getExecuteBBForConfigTest() throws CloneNotSupportedException {
BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
diff --git a/common/pom.xml b/common/pom.xml
index 74e51805ad..6e265925c3 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -293,6 +293,16 @@
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
+ <dependency>
+ <groupId>javax.cache</groupId>
+ <artifactId>cache-api</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ehcache</groupId>
+ <artifactId>ehcache</artifactId>
+ <version>3.8.1</version>
+ </dependency>
</dependencies>
<dependencyManagement>
<dependencies>
@@ -366,4 +376,4 @@
</plugin>
</plugins>
</build>
-</project> \ No newline at end of file
+</project>
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java b/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java
index 5b070bb00f..3b542faf7f 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java
@@ -26,11 +26,12 @@ import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
+@Deprecated
public class AdditionalProperties implements Serializable {
private static final long serialVersionUID = -4020397418955518175L;
- private SliceProfile sliceProfile;
+ private TnSliceProfile sliceProfile;
private List<EndPoint> endPoints;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java b/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java
index dc8e69121e..f966098b18 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java
@@ -47,5 +47,5 @@ public class AllocateAnNssi implements Serializable {
private NsiInfo nsiInfo;
- private Map<String, Object> endPoint;
+ private EndPoint endPoint;
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java b/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java
index f5b926f627..fdbff2fd42 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java
@@ -49,5 +49,5 @@ public class AllocateCnNssi implements Serializable {
private NsiInfo nsiInfo;
- private Map<String, Object> endPoint;
+ private EndPoint endPoint;
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java b/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java
index f85cb0cd85..1b0986ca0d 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java
@@ -30,7 +30,13 @@ public class AllocateTnNssi implements Serializable {
private static final long serialVersionUID = -7069801712339914746L;
+ private TnSliceProfile sliceProfile;
+
private List<NetworkSliceInfo> networkSliceInfos;
private List<TransportSliceNetwork> transportSliceNetworks;
+
+ private NsiInfo nsiInfo;
+
+ private String scriptName;
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AnPerfReq.java b/common/src/main/java/org/onap/so/beans/nsmf/AnPerfReq.java
deleted file mode 100644
index e2c2e999ec..0000000000
--- a/common/src/main/java/org/onap/so/beans/nsmf/AnPerfReq.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2020 Huawei Technologies Co., Ltd. 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.beans.nsmf;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import java.io.Serializable;
-
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class AnPerfReq implements Serializable {
-
- private static final long serialVersionUID = -7415880702887244040L;
-
- private PerfReqEmbb perfReqEmbb;
-
- private PerfReqUrllc perfReqUrllc;
-
- public PerfReqEmbb getPerfReqEmbb() {
- return perfReqEmbb;
- }
-
- public void setPerfReqEmbb(PerfReqEmbb perfReqEmbb) {
- this.perfReqEmbb = perfReqEmbb;
- }
-
- public PerfReqUrllc getPerfReqUrllc() {
- return perfReqUrllc;
- }
-
- public void setPerfReqUrllc(PerfReqUrllc perfReqUrllc) {
- this.perfReqUrllc = perfReqUrllc;
- }
-}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java
index eef0396205..3d0f70805c 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java
@@ -31,24 +31,27 @@ import java.util.List;
@Data
@ToString
public class AnSliceProfile implements Serializable {
+ /*
+ * Reference 3GPP TS 28.541 V16.5.0.
+ */
private static final long serialVersionUID = -3057342171549542794L;
@JsonProperty(value = "sliceProfileId", required = true)
private String sliceProfileId;
- @JsonProperty(value = "sNSSAIList", required = true)
+ @JsonProperty(value = "snssaiList", required = true)
private List<String> sNSSAIList;
- @JsonProperty(value = "pLMNIdList", required = true)
+ @JsonProperty(value = "plmnIdList", required = true)
private List<String> pLMNIdList;
@JsonProperty(value = "perfReq", required = true)
- private AnPerfReq perfReq;
+ private PerfReq perfReq;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@JsonProperty(value = "maxNumberofUEs")
- private long maxNumberofUEs;
+ private int maxNumberOfUEs;
@JsonProperty(value = "coverageAreaTAList")
private List<Integer> coverageAreaTAList;
@@ -58,7 +61,7 @@ public class AnSliceProfile implements Serializable {
private int latency;
@JsonProperty(value = "uEMobilityLevel")
- private UeMobilityLevel uEMobilityLevel;
+ private UeMobilityLevel ueMobilityLevel;
@JsonProperty(value = "resourceSharingLevel")
private ResourceSharingLevel resourceSharingLevel;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java
index 3bd155d512..efb447bc00 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java
@@ -21,100 +21,44 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import java.io.Serializable;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class CnSliceProfile {
+@Data
+public class CnSliceProfile implements Serializable {
+ private static final long serialVersionUID = 6627071735572539536L;
+
+ @JsonProperty(value = "snssaiList", required = true)
private List<String> snssaiList;
private String sliceProfileId;
- private List<String> plmnIdList;
+ @JsonProperty(value = "plmnIdList", required = true)
+ private List<String> pLMNIdList;
+ @JsonProperty(value = "perfReq", required = true)
private PerfReq perfReq;
- @JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private int maxNumberofUEs;
+ @JsonProperty(value = "maxNumberofUEs")
+ private int maxNumberOfUEs;
+ @JsonProperty(value = "coverageAreaTAList")
private List<String> coverageAreaTAList;
- @JsonInclude(JsonInclude.Include.NON_DEFAULT)
+ @JsonProperty(value = "latency")
private int latency;
+ @JsonProperty(value = "uEMobilityLevel")
private UeMobilityLevel ueMobilityLevel;
+ @JsonProperty(value = "resourceSharingLevel")
private ResourceSharingLevel resourceSharingLevel;
- public String getSliceProfileId() {
- return sliceProfileId;
- }
-
- public void setSliceProfileId(String sliceProfileId) {
- this.sliceProfileId = sliceProfileId;
- }
-
- public List<String> getPlmnIdList() {
- return plmnIdList;
- }
-
- public void setPlmnIdList(List<String> plmnIdList) {
- this.plmnIdList = plmnIdList;
- }
-
- public PerfReq getPerfReq() {
- return perfReq;
- }
-
- public void setPerfReq(PerfReq perfReq) {
- this.perfReq = perfReq;
- }
-
- public int getMaxNumberofUEs() {
- return maxNumberofUEs;
- }
-
- public void setMaxNumberofUEs(int maxNumberofUEs) {
- this.maxNumberofUEs = maxNumberofUEs;
- }
-
- public List<String> getCoverageAreaTAList() {
- return coverageAreaTAList;
- }
-
- public void setCoverageAreaTAList(List<String> coverageAreaTAList) {
- this.coverageAreaTAList = coverageAreaTAList;
- }
-
- public int getLatency() {
- return latency;
- }
-
- public void setLatency(int latency) {
- this.latency = latency;
- }
-
- public UeMobilityLevel getUeMobilityLevel() {
- return ueMobilityLevel;
- }
-
- public void setUeMobilityLevel(UeMobilityLevel ueMobilityLevel) {
- this.ueMobilityLevel = ueMobilityLevel;
- }
-
- public ResourceSharingLevel getResourceSharingLevel() {
- return resourceSharingLevel;
- }
-
- public void setResourceSharingLevel(ResourceSharingLevel resourceSharingLevel) {
- this.resourceSharingLevel = resourceSharingLevel;
- }
-
- public List<String> getSnssaiList() {
- return snssaiList;
- }
+ @JsonProperty(value = "maxNumberofPDUSession")
+ private int maxNumberOfPDUSession;
- public void setSnssaiList(List<String> snssaiList) {
- this.snssaiList = snssaiList;
- }
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java b/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java
index 99a8525974..3bf2ffb8eb 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java
@@ -20,33 +20,15 @@
package org.onap.so.beans.nsmf;
+import lombok.Data;
import java.io.Serializable;
-
+@Data
public class ConnectionLink implements Serializable {
+
private static final long serialVersionUID = -1834584960407180427L;
private String transportEndpointA;
private String transportEndpointB;
-
- public static long getSerialVersionUID() {
- return serialVersionUID;
- }
-
- public String getTransportEndpointA() {
- return transportEndpointA;
- }
-
- public void setTransportEndpointA(String transportEndpointA) {
- this.transportEndpointA = transportEndpointA;
- }
-
- public String getTransportEndpointB() {
- return transportEndpointB;
- }
-
- public void setTransportEndpointB(String transportEndpointB) {
- this.transportEndpointB = transportEndpointB;
- }
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java b/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java
index dab9b3a990..90bfc0eae0 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java
@@ -20,17 +20,28 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
import java.io.Serializable;
-import java.util.Map;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
public class EndPoint implements Serializable {
private static final long serialVersionUID = 2479795890807020491L;
- private String nodeId;
+ @JsonProperty(value = "ipAddress")
+ private String ipAddress;
- private Map<String, Object> additionalInfo;
+ @JsonProperty(value = "logicInterfaceId")
+ private String logicInterfaceId;
+
+ @JsonProperty(value = "nextHopInfo")
+ private String nextHopInfo;
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java b/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java
index 92acdaa90d..270a55e349 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java
@@ -21,9 +21,11 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
import java.io.Serializable;
@JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
public class NssiResponse implements Serializable {
private static final long serialVersionUID = 2723440188640857903L;
@@ -32,19 +34,5 @@ public class NssiResponse implements Serializable {
private String jobId;
- public String getNssiId() {
- return nssiId;
- }
-
- public void setNssiId(String nssiId) {
- this.nssiId = nssiId;
- }
-
- public String getJobId() {
- return jobId;
- }
-
- public void setJobId(String jobId) {
- this.jobId = jobId;
- }
+ private String status;
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/PerfReq.java b/common/src/main/java/org/onap/so/beans/nsmf/PerfReq.java
index c67f193a02..6697c8d8a0 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/PerfReq.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/PerfReq.java
@@ -21,10 +21,13 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import java.io.Serializable;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class PerfReq {
+public class PerfReq implements Serializable {
+
+ private static final long serialVersionUID = 8463835350563510267L;
private List<PerfReqEmbb> perfReqEmbbList;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/PerfReqEmbb.java b/common/src/main/java/org/onap/so/beans/nsmf/PerfReqEmbb.java
index f6e945e368..1db009cdb9 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/PerfReqEmbb.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/PerfReqEmbb.java
@@ -25,6 +25,9 @@ import java.io.Serializable;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PerfReqEmbb implements Serializable {
+ /*
+ * Reference 3GPP TS 28.541 V16.5.0, Section 6.4.1.
+ */
private static final long serialVersionUID = 8886635511695277599L;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java b/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java
index 9e4b4edce3..06f97a8484 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java
@@ -21,118 +21,31 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
import java.io.Serializable;
@JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
public class PerfReqUrllc implements Serializable {
private static final long serialVersionUID = 3133479142915485943L;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private int e2eLatency;
+ private String survivalTime;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private int jitter;
-
- @JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private int survivalTime;
-
- @JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private float csAvailability;
+ private int expDataRate;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private float reliability;
+ private String transferIntervalTarget;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private int expDataRate;
-
- private String payloadSize;
+ private String msgSizeByte;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private int trafficDensity;
+ private String csReliabilityMeanTime;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
- private int connDensity;
-
- private String serviceAreaDimension;
-
- public int getE2eLatency() {
- return e2eLatency;
- }
-
- public void setE2eLatency(int e2eLatency) {
- this.e2eLatency = e2eLatency;
- }
-
- public int getJitter() {
- return jitter;
- }
-
- public void setJitter(int jitter) {
- this.jitter = jitter;
- }
-
- public int getSurvivalTime() {
- return survivalTime;
- }
-
- public void setSurvivalTime(int survivalTime) {
- this.survivalTime = survivalTime;
- }
-
- public float getReliability() {
- return reliability;
- }
-
- public void setReliability(float reliability) {
- this.reliability = reliability;
- }
-
- public int getExpDataRate() {
- return expDataRate;
- }
-
- public void setExpDataRate(int expDataRate) {
- this.expDataRate = expDataRate;
- }
-
- public String getPayloadSize() {
- return payloadSize;
- }
-
- public void setPayloadSize(String payloadSize) {
- this.payloadSize = payloadSize;
- }
-
- public int getTrafficDensity() {
- return trafficDensity;
- }
-
- public void setTrafficDensity(int trafficDensity) {
- this.trafficDensity = trafficDensity;
- }
-
- public int getConnDensity() {
- return connDensity;
- }
-
- public void setConnDensity(int connDensity) {
- this.connDensity = connDensity;
- }
-
- public String getServiceAreaDimension() {
- return serviceAreaDimension;
- }
-
- public void setServiceAreaDimension(String serviceAreaDimension) {
- this.serviceAreaDimension = serviceAreaDimension;
- }
-
- public float getCsAvailability() {
- return csAvailability;
- }
+ private float csAvailabilityTarget;
- public void setCsAvailability(float csAvailability) {
- this.csAvailability = csAvailability;
- }
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java b/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java
index 66bfbdcea9..4fc593268a 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java
@@ -21,9 +21,12 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import java.io.Serializable;
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class PnfErrorList {
+public class PnfErrorList implements Serializable {
+
+ private static final long serialVersionUID = 1506455363755909867L;
private String pnfId;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java b/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java
index 2456d540ce..17ef210c4e 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java
@@ -31,7 +31,6 @@ public class ResponseDescriptor implements Serializable {
private static final long serialVersionUID = 6330527958947215910L;
- @JsonInclude(JsonInclude.Include.NON_DEFAULT)
private int progress;
private String status;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java b/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java
index c71441a80a..ee027bca13 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java
@@ -21,10 +21,13 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import java.io.Serializable;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class ResponseHistory {
+public class ResponseHistory implements Serializable {
+
+ private static final long serialVersionUID = -1005342539496792450L;
private int progress;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java
new file mode 100644
index 0000000000..90cee2794a
--- /dev/null
+++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java
@@ -0,0 +1,180 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2020 Huawei Technologies Co., Ltd. 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.beans.nsmf;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.ToString;
+import org.springframework.beans.BeanUtils;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Data
+@ToString
+public class SliceProfileAdapter implements Serializable {
+
+ private static final long serialVersionUID = -6412175980642584804L;
+
+ @JsonProperty(value = "sliceProfileId")
+ private String sliceProfileId;
+
+ @JsonProperty(value = "sNSSAI")
+ private String sNSSAIList = "";
+
+ @JsonProperty(value = "pLMNIdList")
+ private String pLMNIdList = "";
+
+ @JsonProperty(value = "maxNumberofUEs")
+ private int maxNumberOfUEs;
+
+ @JsonProperty(value = "coverageAreaTAList")
+ private String coverageAreaTAList = "";
+
+ @JsonProperty(value = "latency")
+ private int latency;
+
+ @JsonProperty(value = "uEMobilityLevel")
+ private String ueMobilityLevel;
+
+ @JsonProperty(value = "resourceSharingLevel")
+ private String resourceSharingLevel;
+
+ @JsonProperty(value = "maxBandwidth")
+ private int maxBandwidth;
+
+ @JsonProperty(value = "sST")
+ private String sST;
+
+ @JsonProperty(value = "activityFactor")
+ private int activityFactor;
+
+ @JsonProperty(value = "survivalTime")
+ private String survivalTime;
+
+ @JsonProperty(value = "expDataRateUL")
+ private int expDataRateUL;
+
+ @JsonProperty(value = "expDataRateDL")
+ private int expDataRateDL;
+
+ @JsonProperty(value = "areaTrafficCapUL")
+ private int areaTrafficCapUL;
+
+ @JsonProperty(value = "areaTrafficCapDL")
+ private int areaTrafficCapDL;
+
+ @JsonProperty(value = "jitter")
+ private int jitter;
+
+ @JsonProperty(value = "csAvailabilityTarget")
+ private float csAvailabilityTarget;
+
+ @JsonProperty(value = "expDataRate")
+ private int expDataRate;
+
+ @JsonProperty(value = "maxNumberofPDUSession")
+ private int maxNumberOfPDUSession;
+
+ @JsonProperty(value = "overallUserDensity")
+ private int overallUserDensity;
+
+ @JsonProperty(value = "cSReliabilityMeanTime")
+ private String csReliabilityMeanTime;
+
+ @JsonProperty(value = "msgSizeByte")
+ private String msgSizeByte;
+
+ @JsonProperty(value = "transferIntervalTarget")
+ private String transferIntervalTarget;
+
+ @JsonProperty(value = "ipAddress")
+ private String ipAddress;
+
+ @JsonProperty(value = "logicInterfaceId")
+ private String logicInterfaceId;
+
+ @JsonProperty(value = "nextHopInfo")
+ private String nextHopInfo;
+
+ public AnSliceProfile trans2AnProfile() {
+ AnSliceProfile anSliceProfile = new AnSliceProfile();
+ BeanUtils.copyProperties(this, anSliceProfile);
+ anSliceProfile.setSNSSAIList(Arrays.asList(this.sNSSAIList.split("\\|")));
+ anSliceProfile.setPLMNIdList(Arrays.asList(this.pLMNIdList.split("\\|")));
+
+ String[] areas = this.coverageAreaTAList.split("\\|");
+ Integer[] areasRes = new Integer[areas.length];
+ for (int i = 0; i < areas.length; i++) {
+ areasRes[i] = str2Code(areas[i]);
+ }
+ anSliceProfile.setCoverageAreaTAList(Arrays.asList(areasRes));
+
+ anSliceProfile.setUeMobilityLevel(UeMobilityLevel.fromString(this.ueMobilityLevel));
+ anSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel));
+ anSliceProfile.setPerfReq(generatePerfReq());
+
+ return anSliceProfile;
+ }
+
+ private Integer str2Code(String area) {
+ return area.hashCode() >> 16;
+ }
+
+ public CnSliceProfile trans2CnProfile() {
+ CnSliceProfile cnSliceProfile = new CnSliceProfile();
+ BeanUtils.copyProperties(this, cnSliceProfile);
+ cnSliceProfile.setSnssaiList(Arrays.asList(this.sNSSAIList.split("\\|")));
+ cnSliceProfile.setCoverageAreaTAList(Arrays.asList(this.coverageAreaTAList.split("\\|")));
+ cnSliceProfile.setPLMNIdList(Arrays.asList(this.pLMNIdList.split("\\|")));
+ cnSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel));
+
+ cnSliceProfile.setPerfReq(generatePerfReq());
+ return cnSliceProfile;
+ }
+
+ private PerfReq generatePerfReq() {
+ PerfReq perfReq = new PerfReq();
+ if ("embb".equalsIgnoreCase(sST)) {
+ List<PerfReqEmbb> perfReqEmbbs = new ArrayList<>();
+ PerfReqEmbb perfReqEmbb = new PerfReqEmbb();
+ BeanUtils.copyProperties(this, perfReqEmbb);
+ perfReqEmbbs.add(perfReqEmbb);
+ perfReq.setPerfReqEmbbList(perfReqEmbbs);
+ } else if ("ullc".equalsIgnoreCase(sST)) {
+ List<PerfReqUrllc> perfReqUrllcs = new ArrayList<>();
+ PerfReqUrllc perfReqUrllc = new PerfReqUrllc();
+ BeanUtils.copyProperties(this, perfReqUrllc);
+ perfReqUrllcs.add(perfReqUrllc);
+ perfReq.setPerfReqUrllcList(perfReqUrllcs);
+ }
+ return perfReq;
+ }
+
+ public TnSliceProfile trans2TnProfile() {
+ TnSliceProfile tnSliceProfile = new TnSliceProfile();
+ BeanUtils.copyProperties(this, tnSliceProfile);
+ tnSliceProfile.setSNSSAIList(Arrays.asList(this.sNSSAIList.split("\\|")));
+ tnSliceProfile.setPLMNIdList(Arrays.asList(this.pLMNIdList.split("\\|")));
+ return tnSliceProfile;
+ }
+}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java
index 9b6406d57f..18d6007176 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java
@@ -52,4 +52,6 @@ public class SliceTaskInfo<T> implements Serializable {
private SubnetType subnetType;
+ private String endPointId;
+
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java
index e97aa704eb..bfd4627b47 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java
@@ -19,6 +19,7 @@
*/
package org.onap.so.beans.nsmf;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.JsonObject;
import lombok.*;
@@ -56,15 +57,15 @@ public class SliceTaskParamsAdapter implements Serializable {
private TemplateInfo NSTInfo = new TemplateInfo();
- private SliceTaskInfo<TnSliceProfile> tnBHSliceTaskInfo = new SliceTaskInfo<>();
+ private SliceTaskInfo<SliceProfileAdapter> tnBHSliceTaskInfo = new SliceTaskInfo<>();
- private SliceTaskInfo<TnSliceProfile> tnMHSliceTaskInfo = new SliceTaskInfo<>();
+ private SliceTaskInfo<SliceProfileAdapter> tnMHSliceTaskInfo = new SliceTaskInfo<>();
- private SliceTaskInfo<TnSliceProfile> tnFHSliceTaskInfo = new SliceTaskInfo<>();
+ private SliceTaskInfo<SliceProfileAdapter> tnFHSliceTaskInfo = new SliceTaskInfo<>();
- private SliceTaskInfo<CnSliceProfile> cnSliceTaskInfo = new SliceTaskInfo<>();
+ private SliceTaskInfo<SliceProfileAdapter> cnSliceTaskInfo = new SliceTaskInfo<>();
- private SliceTaskInfo<AnSliceProfile> anSliceTaskInfo = new SliceTaskInfo<>();
+ private SliceTaskInfo<SliceProfileAdapter> anSliceTaskInfo = new SliceTaskInfo<>();
@SuppressWarnings("unchecked")
public void convertFromJson(String jsonString) throws IOException {
@@ -80,24 +81,24 @@ public class SliceTaskParamsAdapter implements Serializable {
this.setServiceProfile(replaceHeader(paramMap, "ServiceProfile."));
- TnSliceProfile tnBHSliceProfile = mapper.readValue(
- mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.BH.")), TnSliceProfile.class);
+ SliceProfileAdapter tnBHSliceProfile = mapper.readValue(
+ mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.BH.")), SliceProfileAdapter.class);
this.tnBHSliceTaskInfo.setSliceProfile(tnBHSliceProfile);
- TnSliceProfile tnMHSliceProfile = mapper.readValue(
- mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.MH.")), TnSliceProfile.class);
+ SliceProfileAdapter tnMHSliceProfile = mapper.readValue(
+ mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.MH.")), SliceProfileAdapter.class);
this.tnMHSliceTaskInfo.setSliceProfile(tnMHSliceProfile);
- TnSliceProfile tnFHSliceProfile = mapper.readValue(
- mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.FH.")), TnSliceProfile.class);
+ SliceProfileAdapter tnFHSliceProfile = mapper.readValue(
+ mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.FH.")), SliceProfileAdapter.class);
this.tnFHSliceTaskInfo.setSliceProfile(tnFHSliceProfile);
- CnSliceProfile cnSliceProfile = mapper.readValue(
- mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.CN.")), CnSliceProfile.class);
+ SliceProfileAdapter cnSliceProfile = mapper.readValue(
+ mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.CN.")), SliceProfileAdapter.class);
this.cnSliceTaskInfo.setSliceProfile(cnSliceProfile);
- AnSliceProfile anSliceProfile = mapper.readValue(
- mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.AN.")), AnSliceProfile.class);
+ SliceProfileAdapter anSliceProfile = mapper.readValue(
+ mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.AN.")), SliceProfileAdapter.class);
this.anSliceTaskInfo.setSliceProfile(anSliceProfile);
this.tnBHSliceTaskInfo.setSuggestNssiId(paramMap.get("TN.BH.SuggestNSSIId"));
@@ -148,33 +149,31 @@ public class SliceTaskParamsAdapter implements Serializable {
for (Map.Entry<String, Object> entry : serviceProfile.entrySet()) {
jsonObject.addProperty("ServiceProfile." + entry.getKey(), entry.getValue().toString());
}
-
Map<String, Object> sliceProfileAn = bean2Map(anSliceTaskInfo.getSliceProfile());
-
for (Map.Entry<String, Object> entry : sliceProfileAn.entrySet()) {
- jsonObject.addProperty("SliceProfile.AN." + entry.getKey(), entry.getValue().toString());
+ String value = entry.getValue() == null ? "" : entry.getValue().toString();
+ jsonObject.addProperty("SliceProfile.AN." + entry.getKey(), value);
}
-
Map<String, Object> sliceProfileCn = bean2Map(cnSliceTaskInfo.getSliceProfile());
for (Map.Entry<String, Object> entry : sliceProfileCn.entrySet()) {
- jsonObject.addProperty("SliceProfile.CN." + entry.getKey(), entry.getValue().toString());
+ String value = entry.getValue() == null ? "" : entry.getValue().toString();
+ jsonObject.addProperty("SliceProfile.CN." + entry.getKey(), value);
}
-
Map<String, Object> sliceProfileTnBH = bean2Map(tnBHSliceTaskInfo.getSliceProfile());
for (Map.Entry<String, Object> entry : sliceProfileTnBH.entrySet()) {
- jsonObject.addProperty("SliceProfile.TN.BH." + entry.getKey(), entry.getValue().toString());
+ String value = entry.getValue() == null ? "" : entry.getValue().toString();
+ jsonObject.addProperty("SliceProfile.TN.BH." + entry.getKey(), value);
}
-
Map<String, Object> sliceProfileTnMH = bean2Map(tnMHSliceTaskInfo.getSliceProfile());
for (Map.Entry<String, Object> entry : sliceProfileTnMH.entrySet()) {
- jsonObject.addProperty("SliceProfile.TN.MH." + entry.getKey(), entry.getValue().toString());
+ String value = entry.getValue() == null ? "" : entry.getValue().toString();
+ jsonObject.addProperty("SliceProfile.TN.MH." + entry.getKey(), value);
}
-
Map<String, Object> sliceProfileTnFH = bean2Map(tnFHSliceTaskInfo.getSliceProfile());
for (Map.Entry<String, Object> entry : sliceProfileTnFH.entrySet()) {
- jsonObject.addProperty("SliceProfile.TN.FH." + entry.getKey(), entry.getValue().toString());
+ String value = entry.getValue() == null ? "" : entry.getValue().toString();
+ jsonObject.addProperty("SliceProfile.TN.FH." + entry.getKey(), value);
}
-
jsonObject.addProperty("TN.BH.SuggestNSSIId", tnBHSliceTaskInfo.getSuggestNssiId());
jsonObject.addProperty("TN.BH.SuggestNSSIName", tnBHSliceTaskInfo.getSuggestNssiName());
jsonObject.addProperty("TN.BH.progress", tnBHSliceTaskInfo.getProgress());
@@ -182,7 +181,6 @@ public class SliceTaskParamsAdapter implements Serializable {
jsonObject.addProperty("TN.BH.statusDescription", tnBHSliceTaskInfo.getStatusDescription());
jsonObject.addProperty("TN.BH.ScriptName", tnBHSliceTaskInfo.getScriptName());
-
jsonObject.addProperty("TN.MH.SuggestNSSIId", tnMHSliceTaskInfo.getSuggestNssiId());
jsonObject.addProperty("TN.MH.SuggestNSSIName", tnMHSliceTaskInfo.getSuggestNssiName());
jsonObject.addProperty("TN.MH.progress", tnMHSliceTaskInfo.getProgress());
@@ -190,7 +188,6 @@ public class SliceTaskParamsAdapter implements Serializable {
jsonObject.addProperty("TN.MH.statusDescription", tnMHSliceTaskInfo.getStatusDescription());
jsonObject.addProperty("TN.MH.ScriptName", tnMHSliceTaskInfo.getScriptName());
-
jsonObject.addProperty("TN.FH.SuggestNSSIId", tnFHSliceTaskInfo.getSuggestNssiId());
jsonObject.addProperty("TN.FH.SuggestNSSIName", tnFHSliceTaskInfo.getSuggestNssiName());
jsonObject.addProperty("TN.FH.progress", tnFHSliceTaskInfo.getProgress());
@@ -198,7 +195,6 @@ public class SliceTaskParamsAdapter implements Serializable {
jsonObject.addProperty("TN.FH.statusDescription", tnFHSliceTaskInfo.getStatusDescription());
jsonObject.addProperty("TN.FH.ScriptName", tnFHSliceTaskInfo.getScriptName());
-
jsonObject.addProperty("CN.SuggestNSSIId", cnSliceTaskInfo.getSuggestNssiId());
jsonObject.addProperty("CN.SuggestNSSIName", cnSliceTaskInfo.getSuggestNssiName());
jsonObject.addProperty("CN.progress", cnSliceTaskInfo.getProgress());
@@ -206,7 +202,6 @@ public class SliceTaskParamsAdapter implements Serializable {
jsonObject.addProperty("CN.statusDescription", cnSliceTaskInfo.getStatusDescription());
jsonObject.addProperty("CN.ScriptName", cnSliceTaskInfo.getScriptName());
-
jsonObject.addProperty("AN.SuggestNSSIId", anSliceTaskInfo.getSuggestNssiId());
jsonObject.addProperty("AN.SuggestNSSIName", anSliceTaskInfo.getSuggestNssiName());
jsonObject.addProperty("AN.progress", anSliceTaskInfo.getProgress());
@@ -219,7 +214,7 @@ public class SliceTaskParamsAdapter implements Serializable {
/**
* change T t to {@link Map}
- *
+ *
* @param t input
* @param <T> Object
* @return {@link Map}
@@ -234,9 +229,18 @@ public class SliceTaskParamsAdapter implements Serializable {
Field[] fields = t.getClass().getDeclaredFields();
for (Field field : fields) {
String name = field.getName();
- Method method = t.getClass().getMethod("get" + name);
+ String key = name;
+ if (name == null || "".equals(name) || "serialVersionUID".equalsIgnoreCase(name)) {
+ continue;
+ }
+ JsonProperty annotation = field.getAnnotation(JsonProperty.class);
+ if (annotation != null && !annotation.value().equals(JsonProperty.USE_DEFAULT_NAME)) {
+ key = annotation.value();
+ }
+
+ Method method = t.getClass().getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1));
Object value = method.invoke(t);
- resMap.put(name, value);
+ resMap.put(key, value);
}
} catch (Exception e) {
@@ -247,7 +251,7 @@ public class SliceTaskParamsAdapter implements Serializable {
/**
* replace of slice profile
- *
+ *
* @param paramMap params map
* @param header starts of key
* @return Map
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java
index ccd6001957..f904e1c466 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java
@@ -21,16 +21,31 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
-public class TnSliceProfile {
+public class TnSliceProfile implements Serializable {
+
+ private static final long serialVersionUID = 3767943556195823439L;
private String sliceProfileId;
- private String bandwidth;
+ @JsonProperty(value = "maxBandwidth")
+ private int maxBandwidth;
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
private int latency;
+
+ @JsonProperty(value = "snssaiList", required = true)
+ private List<String> sNSSAIList;
+
+ @JsonProperty(value = "plmnIdList", required = true)
+ private List<String> pLMNIdList;
+
+ @JsonProperty(value = "jitter")
+ private int jitter;
}
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java b/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java
index aa2579edf8..c0dd4250b8 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java
@@ -25,6 +25,7 @@ import java.util.List;
@Data
public class TransportSliceNetwork implements Serializable {
+
private static final long serialVersionUID = 809947462399806990L;
private List<ConnectionLink> connectionLinks;
diff --git a/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java b/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java
index 6388ca6106..a3330e67b4 100644
--- a/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java
+++ b/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java
@@ -21,9 +21,12 @@
package org.onap.so.beans.nsmf;
import com.fasterxml.jackson.annotation.JsonInclude;
+import java.io.Serializable;
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class VnfErrorList {
+public class VnfErrorList implements Serializable {
+
+ private static final long serialVersionUID = -2907819676875489281L;
private String vnfInstanceId;
diff --git a/common/src/main/java/org/onap/so/client/AddCacheHeaders.java b/common/src/main/java/org/onap/so/client/AddCacheHeaders.java
new file mode 100644
index 0000000000..1a41be1233
--- /dev/null
+++ b/common/src/main/java/org/onap/so/client/AddCacheHeaders.java
@@ -0,0 +1,28 @@
+package org.onap.so.client;
+
+import java.io.IOException;
+import java.util.Collections;
+import javax.annotation.Priority;
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientResponseContext;
+import javax.ws.rs.client.ClientResponseFilter;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+@Priority(1)
+public class AddCacheHeaders implements ClientResponseFilter {
+
+ private final CacheProperties props;
+
+ public AddCacheHeaders(CacheProperties props) {
+ this.props = props;
+ }
+
+ public void filter(ClientRequestContext request, ClientResponseContext response) throws IOException {
+ if (request.getMethod().equalsIgnoreCase("GET")) {
+ response.getHeaders().putIfAbsent("Cache-Control",
+ Collections.singletonList("public, max-age=" + (props.getMaxAge() / 1000)));
+ }
+
+ }
+}
diff --git a/common/src/main/java/org/onap/so/client/CacheFactory.java b/common/src/main/java/org/onap/so/client/CacheFactory.java
new file mode 100644
index 0000000000..6bc4858463
--- /dev/null
+++ b/common/src/main/java/org/onap/so/client/CacheFactory.java
@@ -0,0 +1,25 @@
+package org.onap.so.client;
+
+
+import java.util.concurrent.TimeUnit;
+import javax.cache.configuration.Factory;
+import javax.cache.expiry.Duration;
+import javax.cache.expiry.ExpiryPolicy;
+import javax.cache.expiry.TouchedExpiryPolicy;
+
+public class CacheFactory implements Factory<ExpiryPolicy> {
+
+ private static final long serialVersionUID = 8948728679233836929L;
+
+ private final CacheProperties props;
+
+ public CacheFactory(CacheProperties props) {
+ this.props = props;
+ }
+
+ @Override
+ public ExpiryPolicy create() {
+ return TouchedExpiryPolicy.factoryOf(new Duration(TimeUnit.MILLISECONDS, props.getMaxAge())).create();
+ }
+
+}
diff --git a/common/src/main/java/org/onap/so/client/CacheProperties.java b/common/src/main/java/org/onap/so/client/CacheProperties.java
new file mode 100644
index 0000000000..4fb2a87a5b
--- /dev/null
+++ b/common/src/main/java/org/onap/so/client/CacheProperties.java
@@ -0,0 +1,13 @@
+package org.onap.so.client;
+
+public interface CacheProperties {
+
+
+ default Long getMaxAge() {
+ return 60000L;
+ }
+
+ default String getCacheName() {
+ return "default-http-cache";
+ }
+}
diff --git a/common/src/main/java/org/onap/so/client/RestClient.java b/common/src/main/java/org/onap/so/client/RestClient.java
index ece1333f83..be0a0f3f9e 100644
--- a/common/src/main/java/org/onap/so/client/RestClient.java
+++ b/common/src/main/java/org/onap/so/client/RestClient.java
@@ -34,10 +34,12 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
+import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation.Builder;
+import javax.ws.rs.client.ResponseProcessingException;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
@@ -186,8 +188,20 @@ public abstract class RestClient {
return APPLICATION_MERGE_PATCH_JSON;
}
+ protected ClientBuilder getClientBuilder() {
+ ClientBuilder builder = ClientBuilder.newBuilder();
+ if (props.isCachingEnabled()) {
+ enableCaching(builder);
+ }
+ return builder.readTimeout(props.getReadTimeout(), TimeUnit.MILLISECONDS);
+ }
+
+ protected ClientBuilder enableCaching(ClientBuilder builder) {
+ return builder;
+ }
+
protected Client getClient() {
- return ClientBuilder.newBuilder().build();
+ return getClientBuilder().build();
}
protected abstract ONAPComponentsList getTargetEntity();
@@ -201,7 +215,6 @@ public abstract class RestClient {
metricLogClientFilter = new SOMetricLogClientFilter();
mdcSetup.setTargetEntity(getTargetEntity());
client.register(metricLogClientFilter);
-
if (!path.isPresent()) {
webTarget = client.target(host.toString());
} else {
@@ -225,6 +238,9 @@ public abstract class RestClient {
result.add(e -> {
return e.getCause() instanceof ConnectException;
});
+ result.add(e -> {
+ return e.getCause() instanceof ResponseProcessingException;
+ });
return result;
}
diff --git a/common/src/main/java/org/onap/so/client/RestClientSSL.java b/common/src/main/java/org/onap/so/client/RestClientSSL.java
index 1e8953892e..c6252e4652 100644
--- a/common/src/main/java/org/onap/so/client/RestClientSSL.java
+++ b/common/src/main/java/org/onap/so/client/RestClientSSL.java
@@ -56,7 +56,7 @@ public abstract class RestClientSSL extends RestClient {
}
}
// Use default SSL context
- client = ClientBuilder.newBuilder().sslContext(SSLContext.getDefault()).build();
+ client = getClientBuilder().sslContext(SSLContext.getDefault()).build();
logger.info("RestClientSSL using default SSL context!");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
diff --git a/common/src/main/java/org/onap/so/client/RestProperties.java b/common/src/main/java/org/onap/so/client/RestProperties.java
index 9e4e99cb4e..a7a0ef614c 100644
--- a/common/src/main/java/org/onap/so/client/RestProperties.java
+++ b/common/src/main/java/org/onap/so/client/RestProperties.java
@@ -40,4 +40,21 @@ public interface RestProperties {
public default boolean mapNotFoundToEmpty() {
return false;
}
+
+ /**
+ * Time in milliseconds
+ *
+ * @return
+ */
+ public default Long getReadTimeout() {
+ return Long.valueOf(60000);
+ }
+
+ public default boolean isCachingEnabled() {
+ return false;
+ }
+
+ public default CacheProperties getCacheProperties() {
+ return new CacheProperties() {};
+ }
}
diff --git a/common/src/test/java/org/onap/so/client/RestClientTest.java b/common/src/test/java/org/onap/so/client/RestClientTest.java
index cd00a9e4de..d40576b69f 100644
--- a/common/src/test/java/org/onap/so/client/RestClientTest.java
+++ b/common/src/test/java/org/onap/so/client/RestClientTest.java
@@ -21,6 +21,8 @@
package org.onap.so.client;
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.spy;
@@ -28,7 +30,13 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Map;
+import java.util.Optional;
import javax.ws.rs.NotFoundException;
+import javax.ws.rs.ProcessingException;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriBuilderException;
@@ -37,21 +45,26 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
-import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.onap.logging.filter.base.ONAPComponents;
+import org.onap.logging.filter.base.ONAPComponentsList;
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
@RunWith(MockitoJUnitRunner.class)
public class RestClientTest {
private final HttpClientFactory httpClientFactory = new HttpClientFactory();
- @Mock
- private RestProperties props;
@Rule
public ExpectedException thrown = ExpectedException.none();
+ @Rule
+ public WireMockRule wireMockRule = new WireMockRule(
+ WireMockConfiguration.options().dynamicPort().extensions(new ResponseTemplateTransformer(false)));
+
@Test
public void retries() throws Exception {
RestClient spy = buildSpy();
@@ -80,6 +93,50 @@ public class RestClientTest {
}
+ @Test
+ public void timeoutTest() throws URISyntaxException {
+ wireMockRule.stubFor(get("/chunked/delayed")
+ .willReturn(aResponse().withStatus(200).withBody("Hello world!").withChunkedDribbleDelay(2, 300)));
+
+
+ RestProperties props = new RestProperties() {
+
+ @Override
+ public URL getEndpoint() throws MalformedURLException {
+ return new URL(String.format("http://localhost:%s", wireMockRule.port()));
+ }
+
+ @Override
+ public String getSystemName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Long getReadTimeout() {
+ return Long.valueOf(100);
+ }
+ };
+ RestClient client = new RestClient(props, Optional.of(new URI("/chunked/delayed"))) {
+
+ @Override
+ protected void initializeHeaderMap(Map<String, String> headerMap) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ protected ONAPComponentsList getTargetEntity() {
+ return ONAPComponents.EXTERNAL;
+ }
+
+ };
+
+ thrown.expect(ProcessingException.class);
+ client.get();
+
+ }
+
private RestClient buildSpy() throws MalformedURLException, IllegalArgumentException, UriBuilderException {
RestClient client = httpClientFactory.newJsonClient(UriBuilder.fromUri("http://localhost/test").build().toURL(),
ONAPComponents.BPMN);
diff --git a/common/src/test/resources/logback-test.xml b/common/src/test/resources/logback-test.xml
index b52e6be022..3c5f259817 100644
--- a/common/src/test/resources/logback-test.xml
+++ b/common/src/test/resources/logback-test.xml
@@ -19,61 +19,60 @@
-->
<configuration>
- <property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}"/>
- <property name="p_lvl" value="%level"/>
- <property name="p_log" value="%logger"/>
- <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/>
- <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/>
- <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/>
- <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/>
- <property name="p_thr" value="%thread"/>
- <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/>
+ <property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}" />
+ <property name="p_lvl" value="%level" />
+ <property name="p_log" value="%logger" />
+ <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}" />
+ <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}" />
+ <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}" />
+ <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}" />
+ <property name="p_thr" value="%thread" />
+ <property name="pattern"
+ value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n" />
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>${pattern}</pattern>
- </encoder>
- </appender>
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>${pattern}</pattern>
+ </encoder>
+ </appender>
- <appender name="test"
- class="org.onap.so.utils.TestAppender" />
+ <appender name="test" class="org.onap.so.utils.TestAppender" />
- <logger name="com.att.ecomp.audit" level="info" additivity="false">
- <appender-ref ref="STDOUT" />
- </logger>
+ <logger name="com.att.ecomp.audit" level="info" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
- <logger name="com.att.eelf.metrics" level="info" additivity="false">
- <appender-ref ref="STDOUT" />
- </logger>
+ <logger name="com.att.eelf.metrics" level="info" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
- <logger name="com.att.eelf.error" level="WARN" additivity="false">
- <appender-ref ref="STDOUT" />
- </logger>
+ <logger name="com.att.eelf.error" level="WARN" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
- <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
- <appender-ref ref="STDOUT" />
- <appender-ref ref="test" />
- </logger>
-
- <logger name="org.flywaydb" level="DEBUG" additivity="false">
- <appender-ref ref="STDOUT" />
- </logger>
-
+ <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
+ <appender-ref ref="STDOUT" />
+ <appender-ref ref="test" />
+ </logger>
- <logger name="ch.vorburger" level="WARN" additivity="false">
- <appender-ref ref="STDOUT" />
- </logger>
-
- <logger name="org.reflections" level="ERROR" additivity="false">
- <appender-ref ref="STDOUT" />
- </logger>
-
+ <logger name="org.flywaydb" level="DEBUG" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
- <root level="WARN">
- <appender-ref ref="STDOUT" />
- <appender-ref ref="test" />
- </root>
+
+ <logger name="ch.vorburger" level="WARN" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
+
+ <logger name="org.reflections" level="ERROR" additivity="false">
+ <appender-ref ref="STDOUT" />
+ </logger>
+
+ <root level="WARN">
+ <appender-ref ref="STDOUT" />
+ <appender-ref ref="test" />
+ </root>
</configuration> \ No newline at end of file
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index ed8c7de674..b43997af12 100644
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -10,6 +10,201 @@ Service Orchestrator Release Notes
The SO provides the highest level of service orchestration in the ONAP architecture.
+=============
+Release Notes
+=============
+
+Version: 1.7.10
+==============
+
+:Release Date: 2020-11-19
+
+SO Release Image Versions
+--------------------------
+ - so-bpmn-infra
+
+ :Version: 1.7.10
+
+ - so-catalog-db-adapter
+
+ :Version: 1.7.10
+
+ - so-monitoring
+
+ :Version: 1.7.10
+
+ - so/nssmf-adapter
+
+ :Version: 1.7.10
+
+ - so/openstack-adapter
+
+ :Version: 1.7.10
+
+ - so/request-db-adapter
+
+ :Version: 1.7.10
+
+ - so/sdc-controller
+
+ :Version: 1.7.10
+
+ - so/sdnc-adapter
+
+ :Version: 1.7.10
+
+ - so/vnfm-adapter
+
+ :Version: 1.7.10
+
+ - so/api-handler-infra
+
+ :Version: 1.7.10
+
+ - so/api-handler-infra
+
+ :Version: 1.7.10
+
+ - so/so-etsi-nfvo-ns-lcm
+
+ :Version: 1.7.7
+
+ - so/so-oof-adapter
+
+ :Version: 1.7.6
+
+ - so/cnf-adapter
+
+ :Version: 1.7.10
+
+Release Purpose
+----------------
+SO Guilin Release
+
+**Epics**
+
+* `SO-3167 <https://jira.onap.org/browse/SO-3167>`_ - Design ETSI SOL007 compliant Network Service Descriptor packages
+* `SO-3208 <https://jira.onap.org/browse/SO-3208>`_ - SOL003 Adapter maintenance Enhancements
+* `SO-3036 <https://jira.onap.org/browse/SO-3036>`_ - SO impacts for E2E Network Slicing use case in Guilin
+* `SO-2936 <https://jira.onap.org/browse/SO-2936>`_ - PNF PnP: SO macro flow - use existing PNF instance in a Service Instance
+* `SO-2843 <https://jira.onap.org/browse/SO-2843>`_ - Support NS LCM and Workflows Management
+* `SO-2842 <https://jira.onap.org/browse/SO-2842>`_ - Support for SOL005 NBI API Handler
+* `SO-2841 <https://jira.onap.org/browse/SO-2841>`_ - Support SO NFVO Microservice Plugin Capabilities
+* `SO-2840 <https://jira.onap.org/browse/SO-2840>`_ - Support for ETSI NFV NFVO Orchestrator in ONAP SO (ONAP SO ETSI-Aligned Hierarchical Orchestration)
+* `SO-2841 <https://jira.onap.org/browse/SO-2681>`_ - SO direct Catalog Management Support - Guilin
+* `SO-2046 <https://jira.onap.org/browse/SO-2046>`_ - support Java 11 upgrade
+
+
+**Stories**
+
+The full list of implemented tasks is available on `JIRA GUILIN STORY <https://jira.onap.org/issues/?jql=project%20%3D%20%22Service%20Orchestrator%22%20%20AND%20issuetype%20%3D%20story%20AND%20fixVersion%20%3D%20%22Guilin%20Release%22>`_
+Listed below are key functional jira stories handled in the Guilin release:
+
+* `SO-2950 <https://jira.onap.org/browse/SO-2950>`_ - Asynchronous service activation response handling support in MDONS
+* `SO-3028 <https://jira.onap.org/browse/SO-3028>`_ - SO supports the OVP 2.0 test platform
+* `SO-2930 <https://jira.onap.org/browse/SO-2930>`_ - Service level workflow execution API
+* `SO-2929 <https://jira.onap.org/browse/SO-2929>`_ - Service level workflow retrieving API
+* `SO-2928 <https://jira.onap.org/browse/SO-2928>`_ - Service model retrieving API
+* `SO-2927 <https://jira.onap.org/browse/SO-2927>`_ - Generic service level upgrade workflow
+* `SO-2926 <https://jira.onap.org/browse/SO-2926>`_ - New Service Level postCheck building block
+* `SO-2925 <https://jira.onap.org/browse/SO-2925>`_ - New Service Level Upgrade building block
+* `SO-2924 <https://jira.onap.org/browse/SO-2924>`_ - New Service Level Preparation building block
+* `SO-2981 <https://jira.onap.org/browse/SO-2981>`_ - PNF Plug & Play in R7 - SO Building Block Work
+* `SO-3026 <https://jira.onap.org/browse/SO-3026>`_ - Adapter for the SO to interact with the K8S plugin
+* `SO-3025 <https://jira.onap.org/browse/SO-3025>`_ - SO should support CNFO
+* `SO-3039 <https://jira.onap.org/browse/SO-3039>`_ - Containers must crash properly when a failure occurs
+* `SO-3040 <https://jira.onap.org/browse/SO-3040>`_ - ONAP container repository (nexus) must not contain upstream docker images
+* `SO-3029 <https://jira.onap.org/browse/SO-3029>`_ - SO support Multi Tenancy
+* `SO-3077 <https://jira.onap.org/browse/SO-3077>`_ - ONAP shall use STDOUT for logs collection - REQ-374
+
+**Tasks**
+
+The full list of implemented tasks is available on `JIRA GUILIN TASKS <https://jira.onap.org/issues/?jql=project%20%3D%20%22Service%20Orchestrator%22%20%20AND%20issuetype%20%3D%20Task%20AND%20fixVersion%20%3D%20%22Guilin%20Release%22>`_
+Listed below are highest and high piority jira tasks handled in the Guilin release:
+
+* `SO-3205 <https://jira.onap.org/browse/SO-3205>`_ - E2E Network Slicing: Improvements for NST/NSI Selection callback
+* `SO-3120 <https://jira.onap.org/browse/SO-3120>`_ - Create swagger api for software upgrade in SO
+* `SO-2915 <https://jira.onap.org/browse/SO-2915>`_ - Upgrade Vulnerable Direct Dependencies
+
+
+**Bug Fixes**
+
+The full list of fixed bugs is available on `JIRA GUILIN BUGS
+<https://jira.onap.org/issues/?jql=project%20%3D%20%22Service%20Orchestrator%22%20%20AND%20issuetype%20%3D%20Bug%20AND%20fixVersion%20%3D%20%22Guilin%20Release%22>`_
+Listed below are highest and high piority jira tasks handled in the Guilin release:
+
+* `SO-3375 <https://jira.onap.org/browse/SO-3375>`_ - FlowManipulatorListenerRunner does not invoke for controller execution config-deploy
+* `SO-3369 <https://jira.onap.org/browse/SO-3369>`_ - Fix basic vm test case in onap
+* `SO-3364 <https://jira.onap.org/browse/SO-3364>`_ - SO sends rest request to cds twice per one operation
+* `SO-3360 <https://jira.onap.org/browse/SO-3360>`_ - SO-OpenStack-Adapter attempts to create wrong vserver-to-vnfc relation in AAI
+* `SO-3357 <https://jira.onap.org/browse/SO-3357>`_ - ControllerExecutionBB is triggered, when running a`la carte DeleteVFModule
+* `SO-3352 <https://jira.onap.org/browse/SO-3352>`_ - Exception in org.onap.so.bpmn.infrastructure.workflow.tasks.OrchestrationStatusValidator.validateOrchestrationStatus Orchestration Status Validation failed
+* `SO-3351 <https://jira.onap.org/browse/SO-3351>`_ - Staging image is present in OOM master branch
+* `SO-3346 <https://jira.onap.org/browse/SO-3346>`_ - vFW CNF AssignVfModuleBB has failed
+* `SO-3342 <https://jira.onap.org/browse/SO-3342>`_ - VnfAdapter is configured by default to v1 version whereas v2 version is more complete
+* `SO-3341 <https://jira.onap.org/browse/SO-3341>`_ - Exception of Writing NSSI to AAI for ExternalNssmfManager
+* `SO-3339 <https://jira.onap.org/browse/SO-3339>`_ - Transport Slicing integration: network-policy is missing under allotted-resource
+* `SO-3326 <https://jira.onap.org/browse/SO-3326>`_ - Transport Slicing integration: AAI Exception in DeAllocate TN NSSI WF
+* `SO-3322 <https://jira.onap.org/browse/SO-3322>`_ - PNF service instantiation using building blocks fails during ActivateServiceInstanceBB building block execution
+* `SO-3321 <https://jira.onap.org/browse/SO-3321>`_ - Transport Slicing integration: SO sets wrong subscription-service-type in SDNC payload
+* `SO-3313 <https://jira.onap.org/browse/SO-3313>`_ - SO getting disto error while SDC distribution
+* `SO-3310 <https://jira.onap.org/browse/SO-3310>`_ - Transport Slicing Integration: null pointer exception in saving SDNC rollback data
+* `SO-3309 <https://jira.onap.org/browse/SO-3309>`_ - Transport Slicing integration: unable to get prefix environment variable from execution in TnNssmfUntils
+* `SO-3308 <https://jira.onap.org/browse/SO-3308>`_ - Transport Slicing integration: MSOWorkflowException: mso-request-id not provided
+* `SO-3304 <https://jira.onap.org/browse/SO-3304>`_ - Exception in org.onap.so.bpmn.infrastructure.aai.tasks.AAICreateTasks.createServiceInstance ModelMapper configuration errors
+* `SO-3296 <https://jira.onap.org/browse/SO-3296>`_ - SO has python 2.7 pods
+* `SO-3294 <https://jira.onap.org/browse/SO-3294>`_ - Parameters exception of Deallocating NSSI
+* `SO-3293 <https://jira.onap.org/browse/SO-3293>`_ - Allocate TN NSSI fails to create relationship between allotted-resource and logical-links
+* `SO-3290 <https://jira.onap.org/browse/SO-3290>`_ - SO-VNFM certificates expired
+* `SO-3284 <https://jira.onap.org/browse/SO-3284>`_ - Exceptions in Allocate TN NSSI work flow
+* `SO-3275 <https://jira.onap.org/browse/SO-3275>`_ - Fix 3gppservices URI path in API-Handler
+* `SO-3274 <https://jira.onap.org/browse/SO-3274>`_ - Parameters exception of Allocating NSSI
+* `SO-3271 <https://jira.onap.org/browse/SO-3271>`_ - SO/BB PNF - skip_post_instantiation_configuration is not processed properly.
+* `SO-3270 <https://jira.onap.org/browse/SO-3270>`_ - BB workflow failing sporadically during post instantiation
+* `SO-3266 <https://jira.onap.org/browse/SO-3266>`_ - BPMN config assign bb - NullPointerException in ControllerExecution
+* `SO-3261 <https://jira.onap.org/browse/SO-3261>`_ - Encountering NullPointerException, WorkFlow failure after Java 11 upgrade Code refactorig on SO-bpmn-infra code base.
+* `SO-3243 <https://jira.onap.org/browse/SO-3243>`_ - SO-bpmn-infra Container after Java 11 upgrade encountering SunCertPathBuilder Exception: unable to find valid certification path to requested target in CSIT
+* `SO-3236 <https://jira.onap.org/browse/SO-3236>`_ - SO has java 8 pods
+* `SO-3216 <https://jira.onap.org/browse/SO-3216>`_ - Integration E2E VNF test fails due to missing EdgeRule in AAI call
+* `SO-3196 <https://jira.onap.org/browse/SO-3196>`_ - [SO] so-sdc-controller fails to connect to aai due to cert issue
+* `SO-3193 <https://jira.onap.org/browse/SO-3193>`_ - Macro Workflow fails in AssignVnfBB in step HomingBB
+* `SO-2941 <https://jira.onap.org/browse/SO-2941>`_ - Docker are not built anymore
+* `SO-2939 <https://jira.onap.org/browse/SO-2939>`_ - Master branch uses SNAPSHOT version that are not available anymore
+* `SO-2809 <https://jira.onap.org/browse/SO-2809>`_ - SO build is failing due to unable to download org.onap.appc.client:client-lib:jar:1.7.1-SNAPSHOT
+* `SO-2797 <https://jira.onap.org/browse/SO-2797>`_ - BB workflow with post instantiation is not working
+
+
+Security Notes
+--------------
+
+*Fixed Security Issues*
+
+*Known Security Issues*
+
+*Known Vulnerabilities in Used Modules*
+
+Quick Links:
+
+- `SO project page <https://wiki.onap.org/display/DW/Service+Orchestrator+Project>`__
+- `Passing Badge information for SDC <https://bestpractices.coreinfrastructure.org/en/projects/1702>`__
+
+**Known Issues**
+
+ N/A
+
+**Upgrade Notes**
+
+ N/A
+
+**Deprecation Notes**
+
+ SO modules Ve-Vnfm-adapter and appc-orchestrator are deprectaed for the Guilin release.
+
+**Other**
+
+ N/A
+***************************************************************************************
+
Version: 1.6.4
-----------------------
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheControlFeature.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheControlFeature.java
new file mode 100644
index 0000000000..1e7c3e7f71
--- /dev/null
+++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheControlFeature.java
@@ -0,0 +1,137 @@
+package org.onap.aaiclient.client;
+
+import java.io.Closeable;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Properties;
+import javax.annotation.PreDestroy;
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.configuration.Factory;
+import javax.cache.configuration.FactoryBuilder;
+import javax.cache.configuration.MutableCacheEntryListenerConfiguration;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.expiry.ExpiryPolicy;
+import javax.cache.integration.CacheLoader;
+import javax.cache.integration.CacheWriter;
+import javax.cache.spi.CachingProvider;
+import javax.ws.rs.core.Feature;
+import javax.ws.rs.core.FeatureContext;
+import javax.ws.rs.ext.Provider;
+import org.apache.cxf.jaxrs.client.cache.CacheControlClientReaderInterceptor;
+import org.apache.cxf.jaxrs.client.cache.CacheControlClientRequestFilter;
+import org.apache.cxf.jaxrs.client.cache.Entry;
+import org.apache.cxf.jaxrs.client.cache.Key;
+
+
+@Provider
+public class CacheControlFeature implements Feature, Closeable {
+ private CachingProvider provider;
+ private CacheManager manager;
+ private Cache<Key, Entry> cache;
+ private boolean cacheResponseInputStream;
+ private Factory<ExpiryPolicy> expiryPolicy;
+
+ @Override
+ public boolean configure(final FeatureContext context) {
+ // TODO: read context properties to exclude some patterns?
+ final Cache<Key, Entry> entryCache = createCache(context.getConfiguration().getProperties());
+ context.register(new CacheControlClientRequestFilter(entryCache));
+ CacheControlClientReaderInterceptor reader = new CacheControlClientReaderInterceptor(entryCache);
+ reader.setCacheResponseInputStream(cacheResponseInputStream);
+ context.register(reader);
+ return true;
+ }
+
+ @PreDestroy // TODO: check it is called
+ public void close() {
+ for (final Closeable c : Arrays.asList(cache, manager, provider)) {
+ try {
+ if (c != null) {
+ c.close();
+ }
+ } catch (final Exception e) {
+ // no-op
+ }
+ }
+ }
+
+ private Cache<Key, Entry> createCache(final Map<String, Object> properties) {
+ final Properties props = new Properties();
+ props.putAll(properties);
+
+ final String prefix = this.getClass().getName() + ".";
+ final String uri = props.getProperty(prefix + "config-uri");
+ final String name = props.getProperty(prefix + "name", this.getClass().getName());
+
+ final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+
+ provider = Caching.getCachingProvider();
+ try {
+ synchronized (contextClassLoader) {
+ manager = provider.getCacheManager(uri == null ? provider.getDefaultURI() : new URI(uri),
+ contextClassLoader, props);
+ if (manager.getCache(name) == null) {
+ final MutableConfiguration<Key, Entry> configuration = new MutableConfiguration<Key, Entry>()
+ .setReadThrough("true".equalsIgnoreCase(props.getProperty(prefix + "readThrough", "false")))
+ .setWriteThrough(
+ "true".equalsIgnoreCase(props.getProperty(prefix + "writeThrough", "false")))
+ .setManagementEnabled(
+ "true".equalsIgnoreCase(props.getProperty(prefix + "managementEnabled", "false")))
+ .setStatisticsEnabled(
+ "true".equalsIgnoreCase(props.getProperty(prefix + "statisticsEnabled", "false")))
+ .setStoreByValue(
+ "true".equalsIgnoreCase(props.getProperty(prefix + "storeByValue", "false")));
+
+ final String loader = props.getProperty(prefix + "loaderFactory");
+ if (loader != null) {
+ @SuppressWarnings("unchecked")
+ Factory<? extends CacheLoader<Key, Entry>> f =
+ newInstance(contextClassLoader, loader, Factory.class);
+ configuration.setCacheLoaderFactory(f);
+ }
+ final String writer = props.getProperty(prefix + "writerFactory");
+ if (writer != null) {
+ @SuppressWarnings("unchecked")
+ Factory<? extends CacheWriter<Key, Entry>> f =
+ newInstance(contextClassLoader, writer, Factory.class);
+ configuration.setCacheWriterFactory(f);
+ }
+ if (expiryPolicy != null) {
+
+ configuration.setExpiryPolicyFactory(expiryPolicy);
+ }
+ configuration.addCacheEntryListenerConfiguration(new MutableCacheEntryListenerConfiguration(
+ FactoryBuilder.factoryOf(new CacheLogger()), null, true, true));
+
+ cache = manager.createCache(name, configuration);
+ } else {
+ cache = manager.getCache(name);
+ }
+ return cache;
+ }
+ } catch (final URISyntaxException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T> T newInstance(final ClassLoader contextClassLoader, final String clazz, final Class<T> cast) {
+ try {
+ return (T) contextClassLoader.loadClass(clazz).newInstance();
+ } catch (final Exception e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
+ public void setCacheResponseInputStream(boolean cacheStream) {
+ this.cacheResponseInputStream = cacheStream;
+ }
+
+ public void setExpiryPolicyFactory(Factory<ExpiryPolicy> f) {
+ this.expiryPolicy = f;
+ }
+}
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheLogger.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheLogger.java
new file mode 100644
index 0000000000..f3dc610125
--- /dev/null
+++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheLogger.java
@@ -0,0 +1,53 @@
+package org.onap.aaiclient.client;
+
+import java.io.Serializable;
+import javax.cache.event.CacheEntryCreatedListener;
+import javax.cache.event.CacheEntryEvent;
+import javax.cache.event.CacheEntryExpiredListener;
+import javax.cache.event.CacheEntryListenerException;
+import javax.cache.event.CacheEntryRemovedListener;
+import javax.cache.event.CacheEntryUpdatedListener;
+import org.apache.cxf.jaxrs.client.cache.Entry;
+import org.apache.cxf.jaxrs.client.cache.Key;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CacheLogger implements CacheEntryExpiredListener<Key, Entry>, CacheEntryCreatedListener<Key, Entry>,
+ CacheEntryUpdatedListener<Key, Entry>, CacheEntryRemovedListener<Key, Entry>, Serializable {
+
+ private static final long serialVersionUID = 1L;
+ private static final Logger logger = LoggerFactory.getLogger(CacheLogger.class);
+
+ @Override
+ public void onExpired(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+ throws CacheEntryListenerException {
+ for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+ logger.debug("{} expired key: {}", event.getSource().getName(), event.getKey().getUri());
+ }
+ }
+
+ @Override
+ public void onRemoved(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+ throws CacheEntryListenerException {
+ for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+ logger.debug("{} removed key: {}", event.getSource().getName(), event.getKey().getUri());
+ }
+ }
+
+ @Override
+ public void onUpdated(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+ throws CacheEntryListenerException {
+ for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+ logger.debug("{} updated key: {}", event.getSource().getName(), event.getKey().getUri());
+ }
+ }
+
+ @Override
+ public void onCreated(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+ throws CacheEntryListenerException {
+ for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+ logger.debug("{} created key: {}", event.getSource().getName(), event.getKey().getUri());
+ }
+ }
+
+}
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/FlushCache.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/FlushCache.java
new file mode 100644
index 0000000000..0f290ff620
--- /dev/null
+++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/FlushCache.java
@@ -0,0 +1,41 @@
+package org.onap.aaiclient.client;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientResponseContext;
+import javax.ws.rs.client.ClientResponseFilter;
+import org.apache.cxf.jaxrs.client.cache.Key;
+import org.onap.so.client.CacheProperties;
+
+public class FlushCache implements ClientResponseFilter {
+
+ private static final Set<String> modifyMethods =
+ new HashSet<>(Arrays.asList(HttpMethod.DELETE, HttpMethod.PATCH, HttpMethod.PUT, HttpMethod.POST));
+
+ private final CacheProperties props;
+
+ public FlushCache(CacheProperties props) {
+ this.props = props;
+ }
+
+ @Override
+ public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
+
+ if (responseContext.getStatus() >= 200 && responseContext.getStatus() <= 299) {
+ if (FlushCache.modifyMethods.contains(requestContext.getMethod())) {
+
+ CacheManager cacheManager = Caching.getCachingProvider().getCacheManager(
+ Caching.getCachingProvider().getDefaultURI(), Thread.currentThread().getContextClassLoader());
+ cacheManager.getCache(props.getCacheName()).remove(
+ new Key(requestContext.getUri(), requestContext.getAcceptableMediaTypes().get(0).toString()));
+ }
+ }
+ }
+
+}
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIProperties.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIProperties.java
index ac8a6e6e52..9c7798f4c5 100644
--- a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIProperties.java
+++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIProperties.java
@@ -20,6 +20,7 @@
package org.onap.aaiclient.client.aai;
+import org.onap.so.client.CacheProperties;
import org.onap.so.client.RestProperties;
public interface AAIProperties extends RestProperties {
@@ -34,4 +35,15 @@ public interface AAIProperties extends RestProperties {
public default boolean mapNotFoundToEmpty() {
return true;
}
+
+ default CacheProperties getCacheProperties() {
+ return new AAICacheProperties() {};
+ }
+
+ public interface AAICacheProperties extends CacheProperties {
+
+ default String getCacheName() {
+ return "aai-http-cache";
+ }
+ }
}
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java
index c2422085aa..c22f2f5f8e 100644
--- a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java
+++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java
@@ -23,8 +23,13 @@ package org.onap.aaiclient.client.graphinventory;
import java.net.URI;
import java.util.Map;
import java.util.Optional;
+import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;
+import org.onap.aaiclient.client.CacheControlFeature;
+import org.onap.aaiclient.client.FlushCache;
import org.onap.logging.filter.base.ONAPComponentsList;
+import org.onap.so.client.AddCacheHeaders;
+import org.onap.so.client.CacheFactory;
import org.onap.so.client.ResponseExceptionMapper;
import org.onap.so.client.RestClientSSL;
import org.onap.so.client.RestProperties;
@@ -41,6 +46,21 @@ public abstract class GraphInventoryRestClient extends RestClientSSL {
super(props, Optional.of(uri));
}
+
+ protected ClientBuilder enableCaching(ClientBuilder builder) {
+ builder.register(new AddCacheHeaders(props.getCacheProperties()));
+ builder.register(new FlushCache(props.getCacheProperties()));
+ CacheControlFeature cacheControlFeature = new CacheControlFeature();
+ cacheControlFeature.setCacheResponseInputStream(true);
+ cacheControlFeature.setExpiryPolicyFactory(new CacheFactory(props.getCacheProperties()));
+ builder.property("org.onap.aaiclient.client.CacheControlFeature.name",
+ props.getCacheProperties().getCacheName());
+
+ builder.register(cacheControlFeature);
+
+ return builder;
+ }
+
@Override
public abstract ONAPComponentsList getTargetEntity();
diff --git a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java
index b73454fe67..d0f7847726 100644
--- a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java
+++ b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java
@@ -25,7 +25,11 @@ import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.matching;
+import static com.github.tomakehurst.wiremock.client.WireMock.put;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
+import static com.github.tomakehurst.wiremock.client.WireMock.verify;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
import static org.hamcrest.CoreMatchers.containsString;
import static org.mockito.ArgumentMatchers.any;
@@ -35,8 +39,10 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.net.URL;
import java.util.HashMap;
import javax.ws.rs.core.Response;
import org.junit.Rule;
@@ -48,6 +54,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.onap.aaiclient.client.defaultproperties.DefaultAAIPropertiesImpl;
import org.onap.aaiclient.client.graphinventory.GraphInventoryPatchConverter;
import org.onap.aaiclient.client.graphinventory.exceptions.GraphInventoryPatchDepthExceededException;
+import org.onap.so.client.RestClient;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
import com.google.common.collect.ImmutableMap;
@@ -96,4 +103,113 @@ public class AAIRestClientTest {
wireMockRule.verify(getRequestedFor(urlPathEqualTo("/test")).withHeader("X-FromAppId", equalTo("MSO"))
.withHeader("X-TransactionId", matching(".*")).withHeader("test", equalTo("value")));
}
+
+
+ @Test
+ public void cacheGetTest() throws URISyntaxException, InterruptedException {
+
+ wireMockRule.stubFor(get(urlPathMatching("/cached"))
+ .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "text/plain").withBody("value")));
+
+ AAIProperties props = new AAIProperties() {
+
+ @Override
+ public URL getEndpoint() throws MalformedURLException {
+ return new URL(String.format("http://localhost:%s", wireMockRule.port()));
+ }
+
+ @Override
+ public String getSystemName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean isCachingEnabled() {
+ return true;
+ }
+
+ @Override
+ public AAIVersion getDefaultVersion() {
+ return AAIVersion.LATEST;
+ }
+
+ @Override
+ public String getAuth() {
+ return null;
+ }
+
+ @Override
+ public String getKey() {
+ return null;
+ }
+
+ };
+ RestClient client = new AAIRestClient(props, new URI("/cached"), new HashMap<String, String>());
+
+ Response response = client.get();
+
+ response.readEntity(String.class);
+ response = client.get();
+ response.readEntity(String.class);
+ verify(1, getRequestedFor(urlEqualTo("/cached")));
+
+ }
+
+ @Test
+ public void cachePutTest() throws URISyntaxException, InterruptedException {
+
+ wireMockRule.stubFor(put(urlPathMatching("/cached/1")).willReturn(aResponse().withStatus(200)));
+
+ wireMockRule.stubFor(get(urlPathMatching("/cached/1"))
+ .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody("{}")));
+
+ AAIProperties props = new AAIProperties() {
+
+ @Override
+ public URL getEndpoint() throws MalformedURLException {
+ return new URL(String.format("http://localhost:%s", wireMockRule.port()));
+ }
+
+ @Override
+ public String getSystemName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean isCachingEnabled() {
+ return true;
+ }
+
+ @Override
+ public AAIVersion getDefaultVersion() {
+ return AAIVersion.LATEST;
+ }
+
+ @Override
+ public String getAuth() {
+ return null;
+ }
+
+ @Override
+ public String getKey() {
+ return null;
+ }
+
+ };
+
+ RestClient client = new AAIRestClient(props, new URI("/cached/1"), new HashMap<String, String>());
+
+
+ Response response = client.get();
+
+ response.readEntity(String.class);
+ client.put("wow");
+
+ client.get();
+ response.readEntity(String.class);
+ verify(2, getRequestedFor(urlEqualTo("/cached/1")));
+
+ }
}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/AaiClientPropertiesImpl.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/AaiClientPropertiesImpl.java
index 822627863a..1492baf1cd 100644
--- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/AaiClientPropertiesImpl.java
+++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/AaiClientPropertiesImpl.java
@@ -24,6 +24,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import org.onap.aaiclient.client.aai.AAIProperties;
import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
import org.onap.so.spring.SpringContextHelper;
import org.springframework.context.ApplicationContext;
@@ -32,6 +33,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
private String aaiEndpoint;
private String auth;
private String key;
+ private Long readTimeout;
+ private boolean enableCaching;
+ private Long cacheMaxAge;
public AaiClientPropertiesImpl() {
@@ -39,6 +43,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
aaiEndpoint = context.getEnvironment().getProperty("mso.aai.endpoint");
this.auth = context.getEnvironment().getProperty("aai.auth");
this.key = context.getEnvironment().getProperty("mso.msoKey");
+ this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+ this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+ this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
}
@Override
@@ -65,4 +72,24 @@ public class AaiClientPropertiesImpl implements AAIProperties {
public String getKey() {
return this.key;
}
+
+ @Override
+ public Long getReadTimeout() {
+ return this.readTimeout;
+ }
+
+ @Override
+ public boolean isCachingEnabled() {
+ return this.enableCaching;
+ }
+
+ @Override
+ public CacheProperties getCacheProperties() {
+ return new AAICacheProperties() {
+ @Override
+ public Long getMaxAge() {
+ return cacheMaxAge;
+ }
+ };
+ }
}
diff --git a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java
index 54d757ad05..3e7995417d 100644
--- a/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java
+++ b/mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java
@@ -118,7 +118,7 @@ public class VnfResourceCustomization implements Serializable {
private String blueprintVersion;
@Column(name = "SKIP_POST_INSTANTIATION_CONFIGURATION")
- private Boolean skipPostInstConf;
+ private boolean skipPostInstConf;
@Column(name = "VNFCINSTANCEGROUP_ORDER")
private String vnfcInstanceGroupOrder;
@@ -327,11 +327,11 @@ public class VnfResourceCustomization implements Serializable {
this.blueprintVersion = blueprintVersion;
}
- public Boolean isSkipPostInstConf() {
+ public boolean isSkipPostInstConf() {
return skipPostInstConf;
}
- public void setSkipPostInstConf(Boolean skipPostInstConf) {
+ public void setSkipPostInstConf(boolean skipPostInstConf) {
this.skipPostInstConf = skipPostInstConf;
}
diff --git a/releases/1.7.10.yaml b/releases/1.7.10.yaml
new file mode 100644
index 0000000000..42fd852a47
--- /dev/null
+++ b/releases/1.7.10.yaml
@@ -0,0 +1,33 @@
+---
+distribution_type: 'container'
+container_release_tag: '1.7.10'
+project: 'so'
+log_dir: 'so-maven-docker-stage-master/531/'
+ref: '0543ae167581c15403f2f3d7835981d0a4e4b356'
+containers:
+ - name: 'so/vnfm-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/catalog-db-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/request-db-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/openstack-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/sdnc-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/vfc-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/sdc-controller'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/bpmn-infra'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/so-monitoring'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/api-handler-infra'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/nssmf-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/mso-cnf-adapter'
+ version: '1.7.8-20201113T1715'
+ - name: 'so/so-oof-adapter'
+ version: '1.7.8-20201113T1715' \ No newline at end of file
diff --git a/releases/1.7.8.yaml b/releases/1.7.8.yaml
new file mode 100644
index 0000000000..8e093d770a
--- /dev/null
+++ b/releases/1.7.8.yaml
@@ -0,0 +1,33 @@
+---
+distribution_type: 'container'
+container_release_tag: '1.7.9'
+project: 'so'
+log_dir: 'so-maven-docker-stage-master/523/'
+ref: 'd9c2a8645009b7080302f01b7e13e1480060eebd'
+containers:
+ - name: 'so/vnfm-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/catalog-db-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/request-db-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/openstack-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/sdnc-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/vfc-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/sdc-controller'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/bpmn-infra'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/so-monitoring'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/api-handler-infra'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/nssmf-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/mso-cnf-adapter'
+ version: '1.7.8-20201110T1841'
+ - name: 'so/so-oof-adapter'
+ version: '1.7.8-20201110T1841' \ No newline at end of file
diff --git a/so-etsi-nfvo/so-etsi-nfvo-ns-lcm/so-etsi-nfvo-ns-lcm-bpmn-flows/src/main/java/org/onap/so/etsi/nfvo/ns/lcm/bpmn/flows/extclients/aai/AaiPropertiesImpl.java b/so-etsi-nfvo/so-etsi-nfvo-ns-lcm/so-etsi-nfvo-ns-lcm-bpmn-flows/src/main/java/org/onap/so/etsi/nfvo/ns/lcm/bpmn/flows/extclients/aai/AaiPropertiesImpl.java
index 3df3580907..0aa14c711f 100644
--- a/so-etsi-nfvo/so-etsi-nfvo-ns-lcm/so-etsi-nfvo-ns-lcm-bpmn-flows/src/main/java/org/onap/so/etsi/nfvo/ns/lcm/bpmn/flows/extclients/aai/AaiPropertiesImpl.java
+++ b/so-etsi-nfvo/so-etsi-nfvo-ns-lcm/so-etsi-nfvo-ns-lcm-bpmn-flows/src/main/java/org/onap/so/etsi/nfvo/ns/lcm/bpmn/flows/extclients/aai/AaiPropertiesImpl.java
@@ -22,6 +22,7 @@ package org.onap.so.etsi.nfvo.ns.lcm.bpmn.flows.extclients.aai;
import org.onap.aaiclient.client.aai.AAIProperties;
import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
import org.onap.so.spring.SpringContextHelper;
import org.springframework.context.ApplicationContext;
import java.net.MalformedURLException;
@@ -33,14 +34,19 @@ public class AaiPropertiesImpl implements AAIProperties {
private final String encryptedBasicAuth;
private final String encryptionKey;
private final String aaiVersion;
+ private final Long readTimeout;
+ private final boolean enableCaching;
+ private final Long cacheMaxAge;
public AaiPropertiesImpl() {
-
final ApplicationContext context = SpringContextHelper.getAppContext();
this.endpoint = context.getEnvironment().getProperty("aai.endpoint");
this.encryptedBasicAuth = context.getEnvironment().getProperty("aai.auth");
this.encryptionKey = context.getEnvironment().getProperty("mso.key");
this.aaiVersion = context.getEnvironment().getProperty("aai.version");
+ this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+ this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+ this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
}
@Override
@@ -73,4 +79,24 @@ public class AaiPropertiesImpl implements AAIProperties {
public String getKey() {
return encryptionKey;
}
+
+ @Override
+ public Long getReadTimeout() {
+ return this.readTimeout;
+ }
+
+ @Override
+ public boolean isCachingEnabled() {
+ return this.enableCaching;
+ }
+
+ @Override
+ public CacheProperties getCacheProperties() {
+ return new AAICacheProperties() {
+ @Override
+ public Long getMaxAge() {
+ return cacheMaxAge;
+ }
+ };
+ }
}