diff options
31 files changed, 401 insertions, 280 deletions
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 c4f269c3a0..789f4f239d 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 @@ -210,10 +210,12 @@ public abstract class BaseNssmfManager implements NssmfManager { private void urlHandler() { NssmfUrlInfo nssmfUrlInfo = NssmfAdapterConsts.getNssmfUrlInfo(this.executorType, this.esrInfo.getNetworkType(), actionType); - this.nssmfUrl = nssmfUrlInfo.getUrl(); - this.httpMethod = nssmfUrlInfo.getHttpMethod(); - this.nssmfUrl = nssmfUrl.replaceAll("\\{apiVersion}", getApiVersion()); - this.params.forEach((k, v) -> this.nssmfUrl = this.nssmfUrl.replaceAll("\\{" + k + "}", v)); + if (nssmfUrlInfo != null) { + this.nssmfUrl = nssmfUrlInfo.getUrl(); + this.httpMethod = nssmfUrlInfo.getHttpMethod(); + this.nssmfUrl = nssmfUrl.replaceAll("\\{apiVersion}", getApiVersion()); + this.params.forEach((k, v) -> this.nssmfUrl = this.nssmfUrl.replaceAll("\\{" + k + "}", v)); + } } /** 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 bb2b83fd59..72d1b53781 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 @@ -95,6 +95,7 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager { return marshal(actDeActNssi); } + @Override protected RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException { return doResponseStatus(status); } 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 4705e871f3..88b5071371 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 @@ -98,7 +98,7 @@ public abstract class InternalNssmfManager extends BaseNssmfManager { // internal private RestResponse sendInternalRequest(String content) { - Header header = new BasicHeader("X-Auth-Token", adapterConfig.getInfraAuth()); + Header header = new BasicHeader("Authorization", adapterConfig.getInfraAuth()); this.nssmfUrl = adapterConfig.getInfraEndpoint() + this.nssmfUrl; return restUtil.send(this.nssmfUrl, this.httpMethod, content, header); } diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java index a7adbe116a..7a86c5ba2b 100644 --- a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java +++ b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java @@ -270,6 +270,7 @@ public class RestUtil { class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase { public static final String METHOD_NAME = "DELETE"; + @Override public String getMethod() { return METHOD_NAME; } @@ -316,12 +317,15 @@ public class RestUtil { public HttpClient getHttpsClient() { TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { + @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } + @Override public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {} + @Override public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {} }}; @@ -329,10 +333,9 @@ public class RestUtil { try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); - // HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - SSLConnectionSocketFactory sslsf = - new SSLConnectionSocketFactory(sc, new String[] {"TLSv1"}, null, (s, sslSession) -> true); + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sc, + new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}, null, (s, sslSession) -> true); return HttpClients.custom().setSSLSocketFactory(sslsf).build(); } catch (Exception e) { throw new IllegalArgumentException(e); diff --git a/adapters/mso-nssmf-adapter/src/main/resources/application.yaml b/adapters/mso-nssmf-adapter/src/main/resources/application.yaml index 8da911d4e0..5501fba88f 100644 --- a/adapters/mso-nssmf-adapter/src/main/resources/application.yaml +++ b/adapters/mso-nssmf-adapter/src/main/resources/application.yaml @@ -59,7 +59,7 @@ mso: endpoint: https://so-request-db-adapter.{{ include "common.namespace" . }}:8083 auth: Basic YnBlbDpwYXNzd29yZDEk infra: - endpoint: https://so.{{ include "common.namespace" . }}:8080 + endpoint: http://so.onap:8080 auth: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== #Actuator diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/TaskServices.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/TaskServices.java index b176892192..4e0c4ad8a6 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/TaskServices.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/TaskServices.java @@ -62,13 +62,13 @@ public class TaskServices { public void createtAAIInventory() throws Exception { for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) { ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient(); - client.subscribe("InventoryCreate").lockDuration(externalTaskServiceUtils.getLongLockDuration()) + client.subscribe("InventoryCreate").lockDuration(externalTaskServiceUtils.getLockDurationMedium()) .handler(createInventory::executeExternalTask).open(); } } @PostConstruct - public void auditAAIInventory() throws Exception { + public void deleteAAIInventory() throws Exception { for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) { externalTaskServiceUtils.createExternalTaskClient().subscribe("InventoryDelete") .lockDuration(externalTaskServiceUtils.getLockDurationMedium()) @@ -80,7 +80,7 @@ public class TaskServices { public void openstackInvoker() throws Exception { for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) { ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient(); - client.subscribe("OpenstackAdapterInvoke").lockDuration(externalTaskServiceUtils.getLockDuration()) + client.subscribe("OpenstackAdapterInvoke").lockDuration(externalTaskServiceUtils.getLockDurationShort()) .handler(stackService::executeExternalTask).open(); } } @@ -89,7 +89,7 @@ public class TaskServices { public void openstackPoller() throws Exception { for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) { ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient(); - client.subscribe("OpenstackAdapterPolling").lockDuration(externalTaskServiceUtils.getLockDuration()) + client.subscribe("OpenstackAdapterPolling").lockDuration(externalTaskServiceUtils.getLockDurationMedium()) .handler(pollService::executeExternalTask).open(); } } @@ -98,7 +98,7 @@ public class TaskServices { public void openstackRollback() throws Exception { for (int i = 0; i < externalTaskServiceUtils.getMaxClients(); i++) { ExternalTaskClient client = externalTaskServiceUtils.createExternalTaskClient(); - client.subscribe("OpenstackAdapterRollback").lockDuration(externalTaskServiceUtils.getLockDuration()) + client.subscribe("OpenstackAdapterRollback").lockDuration(externalTaskServiceUtils.getLockDurationShort()) .handler(rollbackService::executeExternalTask).open(); } } diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/CreateInventoryTask.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/CreateInventoryTask.java index 3c9a4833ae..711394a95d 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/CreateInventoryTask.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/CreateInventoryTask.java @@ -22,6 +22,8 @@ package org.onap.so.adapters.tasks.inventory; +import java.util.HashMap; +import java.util.Map; import org.camunda.bpm.client.task.ExternalTask; import org.camunda.bpm.client.task.ExternalTaskService; import org.onap.logging.ref.slf4j.ONAPLogConstants; @@ -57,6 +59,7 @@ public class CreateInventoryTask extends ExternalTaskUtils { public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) { mdcSetup.setupMDC(externalTask); + Map<String, Object> variables = new HashMap<>(); String externalTaskId = externalTask.getId(); CloudInformation cloudInformation = externalTask.getVariable("cloudInformation"); boolean success = true; @@ -69,6 +72,7 @@ public class CreateInventoryTask extends ExternalTaskUtils { } catch (Exception e) { logger.error("Error during inventory of stack", e); success = false; + variables.put("inventoryErrorMessage", e.getMessage()); } mdcSetup.setElapsedTime(); if (success) { @@ -84,7 +88,8 @@ public class CreateInventoryTask extends ExternalTaskUtils { externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, getRetrySequence().length, 10000); } else if (retryCount != null && retryCount - 1 == 0) { - externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE); + externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE, AAI_INVENTORY_FAILURE, + variables); mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.ERROR.toString()); logger.error("The External Task {} Failed, All Retries Exhausted", externalTaskId); logger.info(ONAPLogConstants.Markers.EXIT, "Exiting"); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/DeleteInventoryTask.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/DeleteInventoryTask.java index 08361bdbbf..aad517129f 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/DeleteInventoryTask.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/inventory/DeleteInventoryTask.java @@ -22,6 +22,8 @@ package org.onap.so.adapters.tasks.inventory; +import java.util.HashMap; +import java.util.Map; import org.camunda.bpm.client.task.ExternalTask; import org.camunda.bpm.client.task.ExternalTaskService; import org.onap.logging.ref.slf4j.ONAPLogConstants; @@ -56,6 +58,7 @@ public class DeleteInventoryTask extends ExternalTaskUtils { public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) { mdcSetup.setupMDC(externalTask); + Map<String, Object> variables = new HashMap<>(); String externalTaskId = externalTask.getId(); CloudInformation cloudInformation = externalTask.getVariable("cloudInformation"); boolean success = true; @@ -66,6 +69,7 @@ public class DeleteInventoryTask extends ExternalTaskUtils { } catch (Exception e) { logger.error("Error during inventory of stack", e); success = false; + variables.put("inventoryErrorMessage", e.getMessage()); } mdcSetup.setElapsedTime(); if (success) { @@ -81,7 +85,8 @@ public class DeleteInventoryTask extends ExternalTaskUtils { externalTaskService.handleFailure(externalTask, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, UNABLE_TO_WRITE_ALL_INVENTORY_TO_A_AI, getRetrySequence().length, 10000); } else if (retryCount != null && retryCount - 1 == 0) { - externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE); + externalTaskService.handleBpmnError(externalTask, AAI_INVENTORY_FAILURE, AAI_INVENTORY_FAILURE, + variables); mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.ERROR.toString()); logger.error("The External Task Id: {} Failed, All Retries Exhausted", externalTaskId); logger.info(ONAPLogConstants.Markers.EXIT, "Exiting"); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/PollService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/PollService.java index 9ff50e8644..6a5381cf3e 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/PollService.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/PollService.java @@ -68,7 +68,7 @@ public class PollService extends ExternalTaskUtils { public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) { mdcSetup.setupMDC(externalTask); - logger.trace("Executing External Task Poll Service"); + logger.debug("Starting External Task Poll Service"); Map<String, Object> variables = new HashMap<>(); MutableBoolean success = new MutableBoolean(); String errorMessage = null; @@ -103,11 +103,11 @@ public class PollService extends ExternalTaskUtils { } } catch (Exception e) { logger.error("Error during External Task Poll Service", e); - errorMessage = e.getMessage(); + errorMessage = e.toString(); + variables.put("openstackAdapterErrorMessage", errorMessage); } variables.put("OpenstackPollSuccess", success.booleanValue()); - variables.put("openstackAdapterErrorMessage", errorMessage); if (success.isTrue()) { externalTaskService.complete(externalTask, variables); logger.debug("The External Task Id: {} Successful", externalTask.getId()); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/RollbackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/RollbackService.java index 15e6ff581d..c25d752cc4 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/RollbackService.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/RollbackService.java @@ -39,7 +39,7 @@ public class RollbackService extends ExternalTaskUtils { public void executeExternalTask(ExternalTask externalTask, ExternalTaskService externalTaskService) { mdcSetup.setupMDC(externalTask); - logger.trace("Executing External Task Rollback Service"); + logger.debug("Starting External Task Rollback Service"); Map<String, Object> variables = new HashMap<>(); boolean success = false; boolean pollRollbackStatus = false; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/StackService.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/StackService.java index 5196ffffda..c9fa30d949 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/StackService.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/tasks/orchestration/StackService.java @@ -91,7 +91,7 @@ public class StackService extends ExternalTaskUtils { Map<String, Object> variables = new HashMap<>(); mdcSetup.setupMDC(externalTask); String xmlRequest = externalTask.getVariable("openstackAdapterTaskRequest"); - logger.debug("Executing External Task Stack Service. {}", xmlRequest); + logger.debug("Starting External Task Stack Service. {}", xmlRequest); MutableBoolean success = new MutableBoolean(); MutableBoolean backout = new MutableBoolean(); String response = ""; diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java index c8cb8d9731..1264727f35 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java @@ -328,11 +328,6 @@ public class HeatBridgeImpl implements HeatBridgeApi { .cloudRegion(cloudOwner, cloudRegionId).tenant(tenantId).vserver(vserver.getVserverId())); if (resourcesClient.exists(vserverUri)) { AAIResultWrapper existingVserver = resourcesClient.get(vserverUri); - if (!existingVserver.hasRelationshipsTo(Types.VNFC)) { - AAIResourceUri vnfcUri = - AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().vnfc(server.getName())); - transaction.connect(vserverUri, vnfcUri); - } if (!existingVserver.hasRelationshipsTo(Types.VF_MODULE)) { AAIResourceUri vfModuleUri = AAIUriFactory.createResourceUri( AAIFluentTypeBuilder.network().genericVnf(genericVnfId).vfModule(vfModuleId)); @@ -623,9 +618,7 @@ public class HeatBridgeImpl implements HeatBridgeApi { DSLQueryBuilder<Start, Node> builder = TraversalBuilder .fragment(new DSLStartNode(Types.PSERVER, __.key("hostname", pserverHostName))) .to(__.node(Types.P_INTERFACE) - .to(__.node(Types.SRIOV_PF, - __.key(HeatBridgeConstants.OS_PF_PCI_SLOT_KEY.toString(), pfPciId)) - .output())); + .to(__.node(Types.SRIOV_PF, __.key("pf-pci-id", pfPciId)).output())); List<Pathed> results = getAAIDSLClient().queryPathed(new DSLQuery(builder.build())); diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java index c1a97cefc4..8e6f8cc69b 100644 --- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java +++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/helpers/AaiHelper.java @@ -92,13 +92,6 @@ public class AaiHelper { AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().genericVnf(genericVnfId))); relationships.add(genericVnfRelationship); - // vserver to vnfc relationship - if (!StringUtils.isEmpty(server.getName())) { - Relationship vnfcRelationship = buildRelationship( - AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().vnfc(server.getName()))); - relationships.add(vnfcRelationship); - } - // vserver to vf-module relationship Relationship vfModuleRelationship = buildRelationship(AAIUriFactory .createResourceUri(AAIFluentTypeBuilder.network().genericVnf(genericVnfId).vfModule(vfModuleId))); diff --git a/adapters/mso-openstack-adapters/src/main/resources/application.yaml b/adapters/mso-openstack-adapters/src/main/resources/application.yaml index ba31daaeaf..4835564f37 100644 --- a/adapters/mso-openstack-adapters/src/main/resources/application.yaml +++ b/adapters/mso-openstack-adapters/src/main/resources/application.yaml @@ -42,7 +42,6 @@ org: default_keystone_url_version: /v2.0 default_keystone_reg_ex: "/[vV][0-9]" po: - retryCodes: 504 retryDelay: 5 retryCount: 3 pollTimeout: 7500 diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java index 309a143e32..c9bee2b726 100644 --- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java +++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/HeatBridgeImplTest.java @@ -297,15 +297,15 @@ public class HeatBridgeImplTest { org.onap.aai.domain.yang.RelationshipList relList = aaiHelper.getVserverRelationshipList(CLOUD_OWNER, REGION_ID, "test-genericVnf-id", "test-vfModule-id", server1); - assertEquals(4, relList.getRelationship().size()); + assertEquals(3, relList.getRelationship().size()); org.onap.aai.domain.yang.RelationshipList relList2 = aaiHelper.getVserverRelationshipList(CLOUD_OWNER, REGION_ID, "test-genericVnf-id", "test-vfModule-id", server2); - assertEquals(3, relList2.getRelationship().size()); + assertEquals(2, relList2.getRelationship().size()); org.onap.aai.domain.yang.RelationshipList relList3 = aaiHelper.getVserverRelationshipList(CLOUD_OWNER, REGION_ID, "test-genericVnf-id", "test-vfModule-id", server3); - assertEquals(3, relList3.getRelationship().size()); + assertEquals(2, relList3.getRelationship().size()); } @@ -636,6 +636,46 @@ public class HeatBridgeImplTest { verify(osClient, times(5)).getNetworkById(anyString()); } + @Test + public void testBuildAddVserverLInterfacesToAaiAction_PortProfileNull() + throws HeatBridgeException, JsonParseException, JsonMappingException, IOException { + // Arrange + List<Resource> stackResources = (List<Resource>) extractTestStackResources(); + Port port = mock(Port.class); + when(port.getId()).thenReturn("test-port-id"); + when(port.getName()).thenReturn("test-port-name"); + when(port.getvNicType()).thenReturn(HeatBridgeConstants.OS_SRIOV_PORT_TYPE); + when(port.getMacAddress()).thenReturn("78:4f:43:68:e2:78"); + when(port.getNetworkId()).thenReturn("890a203a-23gg-56jh-df67-731656a8f13a"); + when(port.getDeviceId()).thenReturn("test-device-id"); + String pfPciId = "0000:08:00.0"; + + Network network = mock(Network.class); + when(network.getId()).thenReturn("test-network-id"); + when(network.getNetworkType()).thenReturn(NetworkType.VLAN); + when(network.getProviderSegID()).thenReturn("2345"); + + when(osClient.getPortById("212a203a-9764-4f42-84ea-731536a8f13a")).thenReturn(port); + when(osClient.getPortById("387e3904-8948-43d1-8635-b6c2042b54da")).thenReturn(port); + when(osClient.getPortById("70a09dfd-f1c5-4bc8-bd8f-dc539b8d662a")).thenReturn(port); + when(osClient.getPortById("12f88b4d-c8a4-4fbd-bcb4-7e36af02430b")).thenReturn(port); + when(osClient.getPortById("c54b9f45-b413-4937-bbe4-3c8a5689cfc9")).thenReturn(port); + when(osClient.getNetworkById(anyString())).thenReturn(network); + + PInterface pIf = mock(PInterface.class); + when(pIf.getInterfaceName()).thenReturn("test-port-id"); + doNothing().when(heatbridge).updateSriovPfToSriovVF(any(), any()); + + // Act + heatbridge.buildAddVserverLInterfacesToAaiAction(stackResources, Arrays.asList("1", "2"), "CloudOwner"); + + // Assert + ArgumentCaptor<Optional> argument = ArgumentCaptor.forClass(Optional.class); + verify(transaction, times(5)).createIfNotExists(any(AAIResourceUri.class), argument.capture()); + assertEquals(false, ((LInterface) argument.getValue().get()).isL2Multicasting()); + verify(osClient, times(5)).getPortById(anyString()); + verify(osClient, times(5)).getNetworkById(anyString()); + } @Test public void testExtractOpenstackImagesFromServers() throws HeatBridgeException { diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java index 1b5463211c..6497a99e5e 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java @@ -120,6 +120,10 @@ public class VfResourceStructure extends ResourceStructure { case ASDCConfiguration.OTHER: case ASDCConfiguration.CLOUD_TECHNOLOGY_SPECIFIC_ARTIFACT: case ASDCConfiguration.HELM: + if (artifactInfo.getArtifactName().contains("dummy") + && artifactInfo.getArtifactName().contains("ignore")) { + break; + } artifactsMapByUUID.put(artifactInfo.getArtifactUUID(), vfModuleArtifact); break; case ASDCConfiguration.VF_MODULES_METADATA: @@ -143,6 +147,9 @@ public class VfResourceStructure extends ResourceStructure { return; } for (IVfModuleData vfModuleMeta : vfModulesMetadataList) { + if (vfModuleMeta.getVfModuleModelName().contains("dummy") + && vfModuleMeta.getVfModuleModelName().contains("ignore")) + continue; vfModulesStructureList.add(new VfModuleStructure(this, vfModuleMeta)); } setNumberOfResources(vfModulesMetadataList.size()); diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/NssmfAdapterUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/NssmfAdapterUtils.groovy index 775f088136..bbe5f0d0a4 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/NssmfAdapterUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/NssmfAdapterUtils.groovy @@ -22,22 +22,15 @@ package org.onap.so.bpmn.common.scripts import org.apache.commons.lang3.StringUtils import org.camunda.bpm.engine.delegate.DelegateExecution -import org.json.JSONArray -import org.json.JSONObject -import org.onap.logging.filter.base.ErrorCode import org.onap.logging.filter.base.ONAPComponents -import org.onap.logging.ref.slf4j.ONAPLogConstants +import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest import org.onap.so.bpmn.core.UrnPropertiesReader import org.onap.so.bpmn.core.json.JsonUtils import org.onap.so.client.HttpClient import org.onap.so.client.HttpClientFactory -import org.onap.so.logger.LoggingAnchor -import org.onap.so.logger.MessageEnum import org.slf4j.Logger import org.slf4j.LoggerFactory -import org.springframework.web.util.UriUtils -import javax.ws.rs.core.MediaType import javax.ws.rs.core.Response /*** @@ -94,56 +87,91 @@ class NssmfAdapterUtils { } - public String sendPostRequestNSSMF (DelegateExecution execution, String endPoint, String nssmfRequest) { - try { - - String nssmfEndpoint = UrnPropertiesReader.getVariable("mso.adapters.nssmf.endpoint",execution) - String queryEndpoint = nssmfEndpoint + endPoint - def responseData - HttpClient client = httpClientFactory.newJsonClient(new URL(queryEndpoint), ONAPComponents.EXTERNAL) - String basicAuthCred = execution.getVariable("BasicAuthHeaderValue") - client.addAdditionalHeader("Authorization", StringUtils.defaultIfEmpty(basicAuthCred, getBasicDBAuthHeader(execution))) - - logger.debug('sending POST to NSSMF endpoint: ' + endPoint) - Response response = client.post(nssmfRequest) - - responseData = response.readEntity(String.class) - if (responseData != null) { - logger.debug("Received data from NSSMF: " + responseData) - } - - logger.debug('Response code:' + response.getStatus()) - logger.debug('Response:' + System.lineSeparator() + responseData) - if (response.getStatus() >= 200 && response.getStatus() < 300) { - // parse response as needed - return responseData - } - else { - return null - } - } - catch (Exception e) { - logger.debug("ERROR WHILE QUERYING CATALOG DB: " + e.message) - throw e - } + public String sendPostRequestNSSMF (DelegateExecution execution, String endPoint, String nssmfRequest) { + try { - } + String nssmfEndpoint = UrnPropertiesReader.getVariable("mso.adapters.nssmf.endpoint",execution) + String queryEndpoint = nssmfEndpoint + endPoint + def responseData + HttpClient client = httpClientFactory.newJsonClient(new URL(queryEndpoint), ONAPComponents.EXTERNAL) + String basicAuthCred = execution.getVariable("BasicAuthHeaderValue") + client.addAdditionalHeader("Authorization", StringUtils.defaultIfEmpty(basicAuthCred, getBasicDBAuthHeader(execution))) + logger.debug('sending POST to NSSMF endpoint: ' + endPoint) + Response response = client.post(nssmfRequest) + + responseData = response.readEntity(String.class) + if (responseData != null) { + logger.debug("Received data from NSSMF: " + responseData) + } + + logger.debug('Response code:' + response.getStatus()) + logger.debug('Response:' + System.lineSeparator() + responseData) + if (response.getStatus() >= 200 && response.getStatus() < 300) { + // parse response as needed + return responseData + } + else { + return null + } + } + catch (Exception e) { + logger.debug("ERROR WHILE QUERYING CATALOG DB: " + e.message) + throw e + } - private String getBasicDBAuthHeader(DelegateExecution execution) { + } - String encodedString = null - try { - String basicAuthValueDB = UrnPropertiesReader.getVariable("mso.adapters.db.auth", execution) - logger.debug("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB) + public String sendPostRequestNSSMF (DelegateExecution execution, String endPoint, NssmfAdapterNBIRequest nssmfRequest) { + try { + + String nssmfEndpoint = UrnPropertiesReader.getVariable("mso.adapters.nssmf.endpoint",execution) + String queryEndpoint = nssmfEndpoint + endPoint + def responseData + HttpClient client = httpClientFactory.newJsonClient(new URL(queryEndpoint), ONAPComponents.EXTERNAL) + String basicAuthCred = execution.getVariable("BasicAuthHeaderValue") + client.addAdditionalHeader("Authorization", StringUtils.defaultIfEmpty(basicAuthCred, getBasicDBAuthHeader(execution))) + + logger.debug('sending POST to NSSMF endpoint: ' + endPoint) + Response response = client.post(nssmfRequest) + + responseData = response.readEntity(String.class) + if (responseData != null) { + logger.debug("Received data from NSSMF: " + responseData) + } + + logger.debug('Response code:' + response.getStatus()) + logger.debug('Response:' + System.lineSeparator() + responseData) + if (response.getStatus() >= 200 && response.getStatus() < 300) { + // parse response as needed + return responseData + } + else { + return null + } + } + catch (Exception e) { + logger.debug("ERROR WHILE QUERYING CATALOG DB: " + e.message) + throw e + } + + } + + private String getBasicDBAuthHeader(DelegateExecution execution) { + + String encodedString = null + try { + String basicAuthValueDB = UrnPropertiesReader.getVariable("mso.adapters.db.auth", execution) + logger.debug("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB) + + encodedString = utils.getBasicAuth(basicAuthValueDB, UrnPropertiesReader.getVariable("mso.msoKey", execution)) + execution.setVariable("BasicAuthHeaderValue", encodedString) + } catch (IOException ex) { + String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage() + logger.error(dataErrorMessage) + } + return encodedString + } - encodedString = utils.getBasicAuth(basicAuthValueDB, UrnPropertiesReader.getVariable("mso.msoKey", execution)) - execution.setVariable("BasicAuthHeaderValue", encodedString) - } catch (IOException ex) { - String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage() - logger.error(dataErrorMessage) - } - return encodedString - } } 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 ff31c46a3a..37b30567c7 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 @@ -22,6 +22,7 @@ package org.onap.so.bpmn.common.scripts +import com.google.gson.GsonBuilder import org.onap.so.beans.nsmf.oof.NsiReqBody import org.onap.so.beans.nsmf.oof.NssiReqBody import org.onap.so.beans.nsmf.oof.RequestInfo @@ -682,9 +683,7 @@ return json.toString() nsiReqBody.setNSSTInfo(nsstInfo) nsiReqBody.setPreferReuse(preferReuse) - ObjectMapper objectMapper = new ObjectMapper() - - return objectMapper.writeValueAsString(nsiReqBody) + return bean2JsonStr(nsiReqBody) } public <T> String buildSelectNSSIRequest(String requestId, TemplateInfo nsstInfo, String messageType, @@ -710,9 +709,10 @@ return json.toString() nssiReqBody.setSliceProfile(sliceProfile) nssiReqBody.setNSSTInfo(nsstInfo) + return bean2JsonStr(nssiReqBody) + } - ObjectMapper objectMapper = new ObjectMapper() - - return objectMapper.writeValueAsString(nssiReqBody) + private static <T> String bean2JsonStr(T t) { + return new GsonBuilder().setPrettyPrinting().create().toJson(t) } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java index 43db27917e..f40948fc49 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/exception/ExceptionBuilder.java @@ -376,4 +376,18 @@ public class ExceptionBuilder { } + public void processInventoryException(DelegateExecution execution) { + String errorMessage = ""; + logger.debug("Processing Inventory Exception"); + try { + errorMessage = (String) execution.getVariable("inventoryErrorMessage"); + } catch (Exception e) { + logger.debug("Error while Processing Inventory Exception", e); + } + buildWorkflowException(execution, 500, errorMessage, Components.OPENSTACK); + throw new BpmnError("MSOWorkflowException"); + + + } + } 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 7638f34a59..9e2c0db6ea 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="1.10.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="3.7.0"> <bpmn:process id="CreateVfModuleBB" name="CreateVfModuleBB" isExecutable="true"> <bpmn:startEvent id="CreateVfModuleBB_Start"> <bpmn:outgoing>SequenceFlow_1xr6chl</bpmn:outgoing> @@ -43,17 +43,6 @@ <bpmn:incoming>SequenceFlow_15do1tu</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0rds4rj</bpmn:outgoing> </bpmn:serviceTask> - <bpmn:subProcess id="SubProcess_1getwnf" name="Error Handling " triggeredByEvent="true"> - <bpmn:startEvent id="StartEvent_1c8o652"> - <bpmn:outgoing>SequenceFlow_0gcots6</bpmn:outgoing> - <bpmn:errorEventDefinition /> - </bpmn:startEvent> - <bpmn:endEvent id="EndEvent_1emam1w"> - <bpmn:incoming>SequenceFlow_0gcots6</bpmn:incoming> - <bpmn:terminateEventDefinition /> - </bpmn:endEvent> - <bpmn:sequenceFlow id="SequenceFlow_0gcots6" sourceRef="StartEvent_1c8o652" targetRef="EndEvent_1emam1w" /> - </bpmn:subProcess> <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("gBuildingBlockExecution")))}"> @@ -61,7 +50,7 @@ <bpmn:outgoing>SequenceFlow_0xqhep5</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="SequenceFlow_0xqhep5" sourceRef="CreateNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" /> - <bpmn:serviceTask id="UpdateVnfIpv4OamAddress" name="AAI Update (VNF)Â " camunda:expression="${AAIUpdateTasks.updateIpv4OamAddressVnf(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:serviceTask id="UpdateVnfIpv4OamAddress" name="AAI Update (VNF) " camunda:expression="${AAIUpdateTasks.updateIpv4OamAddressVnf(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> <bpmn:incoming>SequenceFlow_0xqhep5</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1yo6mvv</bpmn:outgoing> </bpmn:serviceTask> @@ -97,14 +86,30 @@ <bpmn:outgoing>SequenceFlow_1mg8eym</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="YesHelm" name="Yes Helm" sourceRef="CheckIfIsHelm" targetRef="CnfAdapter"> - <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isHelm")}]]></bpmn:conditionExpression> + <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" /> <bpmn:sequenceFlow id="SequenceFlow_0uetprw" sourceRef="VnfAdapter" targetRef="ServiceTask_01zrt6x" /> + <bpmn:subProcess id="Activity_10eqhmz" name="Inventory Error Handling" triggeredByEvent="true"> + <bpmn:endEvent id="Event_108oetk"> + <bpmn:incoming>Flow_03q6ty9</bpmn:incoming> + </bpmn:endEvent> + <bpmn:startEvent id="Event_1pengt4"> + <bpmn:outgoing>Flow_1sqy91r</bpmn:outgoing> + <bpmn:errorEventDefinition id="ErrorEventDefinition_1idpz1m" errorRef="Error_0t7oivz" /> + </bpmn:startEvent> + <bpmn:serviceTask id="Activity_1p8hxyt" name="Process Error" camunda:expression="${ExceptionBuilder.processInventoryException(execution)}"> + <bpmn:incoming>Flow_1sqy91r</bpmn:incoming> + <bpmn:outgoing>Flow_03q6ty9</bpmn:outgoing> + </bpmn:serviceTask> + <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: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"> @@ -117,8 +122,8 @@ <dc:Bounds x="513" y="66" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl"> - <di:waypoint xsi:type="dc:Point" x="192" y="106" /> - <di:waypoint xsi:type="dc:Point" x="313" y="106" /> + <di:waypoint x="192" y="106" /> + <di:waypoint x="313" y="106" /> <bpmndi:BPMNLabel> <dc:Bounds x="156" y="91" width="0" height="0" /> </bpmndi:BPMNLabel> @@ -133,8 +138,8 @@ <dc:Bounds x="794" y="66" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1s4rpyp_di" bpmnElement="SequenceFlow_1s4rpyp"> - <di:waypoint xsi:type="dc:Point" x="413" y="106" /> - <di:waypoint xsi:type="dc:Point" x="513" y="106" /> + <di:waypoint x="413" y="106" /> + <di:waypoint x="513" y="106" /> <bpmndi:BPMNLabel> <dc:Bounds x="321" y="91" width="90" height="0" /> </bpmndi:BPMNLabel> @@ -151,40 +156,18 @@ <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId"> <dc:Bounds x="959" y="428" width="100" height="80" /> </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="SubProcess_1getwnf_di" bpmnElement="SubProcess_1getwnf" isExpanded="true"> - <dc:Bounds x="202" y="556" width="231" height="135" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="StartEvent_1c8o652_di" bpmnElement="StartEvent_1c8o652"> - <dc:Bounds x="241" y="614" width="36" height="36" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="72" y="606" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="EndEvent_1emam1w_di" bpmnElement="EndEvent_1emam1w"> - <dc:Bounds x="378" y="614" width="36" height="36" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="209" y="606" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNShape> - <bpmndi:BPMNEdge id="SequenceFlow_0gcots6_di" bpmnElement="SequenceFlow_0gcots6"> - <di:waypoint xsi:type="dc:Point" x="277" y="632" /> - <di:waypoint xsi:type="dc:Point" x="378" y="632" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="186" y="567" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj"> - <di:waypoint xsi:type="dc:Point" x="1059" y="468" /> - <di:waypoint xsi:type="dc:Point" x="1124" y="468" /> + <di:waypoint x="1059" y="468" /> + <di:waypoint x="1124" y="468" /> <bpmndi:BPMNLabel> <dc:Bounds x="950" y="409" width="90" height="0" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw"> - <di:waypoint xsi:type="dc:Point" x="1224" y="468" /> - <di:waypoint xsi:type="dc:Point" x="1265" y="468" /> - <di:waypoint xsi:type="dc:Point" x="1265" y="468" /> - <di:waypoint xsi:type="dc:Point" x="1300" y="468" /> + <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="1138" y="424" width="90" height="0" /> </bpmndi:BPMNLabel> @@ -193,8 +176,8 @@ <dc:Bounds x="324" y="428" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5"> - <di:waypoint xsi:type="dc:Point" x="424" y="468" /> - <di:waypoint xsi:type="dc:Point" x="477" y="468" /> + <di:waypoint x="424" y="468" /> + <di:waypoint x="477" y="468" /> <bpmndi:BPMNLabel> <dc:Bounds x="309" y="409" width="90" height="0" /> </bpmndi:BPMNLabel> @@ -203,8 +186,8 @@ <dc:Bounds x="477" y="428" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv"> - <di:waypoint xsi:type="dc:Point" x="577" y="468" /> - <di:waypoint xsi:type="dc:Point" x="646" y="468" /> + <di:waypoint x="577" y="468" /> + <di:waypoint x="646" y="468" /> <bpmndi:BPMNLabel> <dc:Bounds x="470" y="409" width="90" height="0" /> </bpmndi:BPMNLabel> @@ -213,8 +196,8 @@ <dc:Bounds x="646" y="428" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1i03uy2_di" bpmnElement="SequenceFlow_1i03uy2"> - <di:waypoint xsi:type="dc:Point" x="746" y="468" /> - <di:waypoint xsi:type="dc:Point" x="794" y="468" /> + <di:waypoint x="746" y="468" /> + <di:waypoint x="794" y="468" /> <bpmndi:BPMNLabel> <dc:Bounds x="628" y="409" width="90" height="0" /> </bpmndi:BPMNLabel> @@ -223,8 +206,8 @@ <dc:Bounds x="794" y="428" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu"> - <di:waypoint xsi:type="dc:Point" x="894" y="468" /> - <di:waypoint xsi:type="dc:Point" x="959" y="468" /> + <di:waypoint x="894" y="468" /> + <di:waypoint x="959" y="468" /> <bpmndi:BPMNLabel> <dc:Bounds x="785" y="399" width="90" height="0" /> </bpmndi:BPMNLabel> @@ -233,8 +216,8 @@ <dc:Bounds x="665" y="326" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1io8r33_di" bpmnElement="SequenceFlow_1io8r33"> - <di:waypoint xsi:type="dc:Point" x="665" y="366" /> - <di:waypoint xsi:type="dc:Point" x="563" y="366" /> + <di:waypoint x="665" y="366" /> + <di:waypoint x="563" y="366" /> <bpmndi:BPMNLabel> <dc:Bounds x="569" y="297" width="90" height="20" /> </bpmndi:BPMNLabel> @@ -243,10 +226,10 @@ <dc:Bounds x="463" y="326" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_1yn8o6d_di" bpmnElement="SequenceFlow_1yn8o6d"> - <di:waypoint xsi:type="dc:Point" x="463" y="366" /> - <di:waypoint xsi:type="dc:Point" x="255" y="366" /> - <di:waypoint xsi:type="dc:Point" x="255" y="463" /> - <di:waypoint xsi:type="dc:Point" x="324" y="463" /> + <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:BPMNLabel> <dc:Bounds x="225" y="361" width="90" height="20" /> </bpmndi:BPMNLabel> @@ -261,48 +244,68 @@ <dc:Bounds x="665" y="166" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="SequenceFlow_0q1janp_di" bpmnElement="YesHelm"> - <di:waypoint xsi:type="dc:Point" x="715" y="131" /> - <di:waypoint xsi:type="dc:Point" x="715" y="166" /> + <di:waypoint x="715" y="131" /> + <di:waypoint x="715" y="166" /> <bpmndi:BPMNLabel> <dc:Bounds x="730" y="136" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1mg8eym_di" bpmnElement="SequenceFlow_1mg8eym"> - <di:waypoint xsi:type="dc:Point" x="715" y="246" /> - <di:waypoint xsi:type="dc:Point" x="715" y="326" /> + <di:waypoint x="715" y="246" /> + <di:waypoint x="715" y="326" /> <bpmndi:BPMNLabel> <dc:Bounds x="846" y="291.5" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1ig2ix4_di" bpmnElement="SequenceFlow_1ig2ix4"> - <di:waypoint xsi:type="dc:Point" x="613" y="106" /> - <di:waypoint xsi:type="dc:Point" x="691" y="106" /> + <di:waypoint x="613" y="106" /> + <di:waypoint x="691" y="106" /> <bpmndi:BPMNLabel> <dc:Bounds x="652" y="85" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1g7zahc_di" bpmnElement="NoHelm"> - <di:waypoint xsi:type="dc:Point" x="740" y="106" /> - <di:waypoint xsi:type="dc:Point" x="794" y="106" /> + <di:waypoint x="740" y="106" /> + <di:waypoint x="794" y="106" /> <bpmndi:BPMNLabel> <dc:Bounds x="767" y="85" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0dehck5_di" bpmnElement="SequenceFlow_0dehck5"> - <di:waypoint xsi:type="dc:Point" x="894" y="106" /> - <di:waypoint xsi:type="dc:Point" x="959" y="106" /> + <di:waypoint x="894" y="106" /> + <di:waypoint x="959" y="106" /> <bpmndi:BPMNLabel> <dc:Bounds x="926.5" y="85" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0uetprw_di" bpmnElement="SequenceFlow_0uetprw"> - <di:waypoint xsi:type="dc:Point" x="1009" y="146" /> - <di:waypoint xsi:type="dc:Point" x="1009" y="366" /> - <di:waypoint xsi:type="dc:Point" x="765" y="366" /> + <di:waypoint x="1009" y="146" /> + <di:waypoint x="1009" y="366" /> + <di:waypoint x="765" y="366" /> <bpmndi:BPMNLabel> <dc:Bounds x="1024" y="228" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="Activity_10eqhmz_di" bpmnElement="Activity_10eqhmz" isExpanded="true"> + <dc:Bounds x="240" y="590" width="340" height="180" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Event_108oetk_di" bpmnElement="Event_108oetk"> + <dc:Bounds x="512" y="662" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Event_1pengt4_di" bpmnElement="Event_1pengt4"> + <dc:Bounds x="280" y="662" width="36" height="36" /> + </bpmndi:BPMNShape> + <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-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn index 9a33a3e4bf..fba1139117 100644 --- a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn @@ -31,17 +31,6 @@ <bpmn:incoming>SequenceFlow_08tvhtf</bpmn:incoming> <bpmn:outgoing>Flow_0hlvlw2</bpmn:outgoing> </bpmn:callActivity> - <bpmn:subProcess id="SubProcess_11p7mrh" name="Error Handling " triggeredByEvent="true"> - <bpmn:startEvent id="StartEvent_1xp6ewt"> - <bpmn:outgoing>SequenceFlow_0h607z0</bpmn:outgoing> - <bpmn:errorEventDefinition /> - </bpmn:startEvent> - <bpmn:endEvent id="EndEvent_0guhjau"> - <bpmn:incoming>SequenceFlow_0h607z0</bpmn:incoming> - <bpmn:terminateEventDefinition /> - </bpmn:endEvent> - <bpmn:sequenceFlow id="SequenceFlow_0h607z0" sourceRef="StartEvent_1xp6ewt" targetRef="EndEvent_0guhjau" /> - </bpmn:subProcess> <bpmn:serviceTask id="UpdateVfModuleHeatStackId" name=" AAI Update (vf module) " camunda:expression="${AAIUpdateTasks.updateHeatStackIdVfModule(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> <bpmn:incoming>SequenceFlow_0yuz21z</bpmn:incoming> <bpmn:outgoing>SequenceFlow_01vfwtp</bpmn:outgoing> @@ -89,9 +78,25 @@ <bpmn:sequenceFlow id="Flow_0plbl7p" sourceRef="ServiceTask_0itw3by" targetRef="aaiThrow" /> <bpmn:sequenceFlow id="Flow_0hlvlw2" sourceRef="VnfAdapter" targetRef="ServiceTask_08ulmzc" /> <bpmn:sequenceFlow id="Flow_02lmh6f" sourceRef="DeleteVfModuleBB_Start" targetRef="DeleteVfModuleVnfAdapter" /> + <bpmn:subProcess id="Activity_1thbmzc" name="Inventory Error Handling" triggeredByEvent="true"> + <bpmn:endEvent id="Event_00dlrto"> + <bpmn:incoming>Flow_0yqo5xu</bpmn:incoming> + </bpmn:endEvent> + <bpmn:startEvent id="Event_0dfwcfl"> + <bpmn:outgoing>Flow_0qyhv7c</bpmn:outgoing> + <bpmn:errorEventDefinition id="ErrorEventDefinition_1p6vsj6" errorRef="Error_1le3oui" /> + </bpmn:startEvent> + <bpmn:serviceTask id="Activity_025387k" name="Process Error" camunda:expression="${ExceptionBuilder.processInventoryException(execution)}"> + <bpmn:incoming>Flow_0qyhv7c</bpmn:incoming> + <bpmn:outgoing>Flow_0yqo5xu</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:sequenceFlow id="Flow_0qyhv7c" sourceRef="Event_0dfwcfl" targetRef="Activity_025387k" /> + <bpmn:sequenceFlow id="Flow_0yqo5xu" sourceRef="Activity_025387k" targetRef="Event_00dlrto" /> + </bpmn:subProcess> </bpmn:process> <bpmn:error id="Error_0jjnve8" name="Error_3k24na6" errorCode="AAIInventoryFailure" /> <bpmn:escalation id="Escalation_130je8j" name="audit" escalationCode="audit1" /> + <bpmn:error id="Error_1le3oui" name="AAIInventoryFailure" errorCode="AAIInventoryFailure" /> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DeleteVfModuleBB"> <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="DeleteVfModuleBB_Start"> @@ -122,28 +127,6 @@ <bpmndi:BPMNShape id="CallActivity_0whogn3_di" bpmnElement="VnfAdapter"> <dc:Bounds x="435" y="84" width="100" height="80" /> </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="SubProcess_11p7mrh_di" bpmnElement="SubProcess_11p7mrh" isExpanded="true"> - <dc:Bounds x="304" y="500" width="231" height="135" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="StartEvent_1xp6ewt_di" bpmnElement="StartEvent_1xp6ewt"> - <dc:Bounds x="347" y="562" width="36" height="36" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="261" y="976" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="EndEvent_0guhjau_di" bpmnElement="EndEvent_0guhjau"> - <dc:Bounds x="476" y="562" width="36" height="36" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="390" y="976" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNShape> - <bpmndi:BPMNEdge id="SequenceFlow_0h607z0_di" bpmnElement="SequenceFlow_0h607z0"> - <di:waypoint x="383" y="580" /> - <di:waypoint x="476" y="580" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="371" y="937" width="90" height="0" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="ServiceTask_0vlgqod_di" bpmnElement="UpdateVfModuleHeatStackId"> <dc:Bounds x="800" y="308" width="100" height="80" /> </bpmndi:BPMNShape> @@ -239,6 +222,26 @@ <di:waypoint x="195" y="124" /> <di:waypoint x="290" y="124" /> </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="Activity_1thbmzc_di" bpmnElement="Activity_1thbmzc" isExpanded="true"> + <dc:Bounds x="280" y="490" width="340" height="180" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Event_00dlrto_di" bpmnElement="Event_00dlrto"> + <dc:Bounds x="552" y="562" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Event_0dfwcfl_di" bpmnElement="Event_0dfwcfl"> + <dc:Bounds x="320" y="562" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_025387k_di" bpmnElement="Activity_025387k"> + <dc:Bounds x="400" y="540" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge id="Flow_0qyhv7c_di" bpmnElement="Flow_0qyhv7c"> + <di:waypoint x="356" y="580" /> + <di:waypoint x="400" y="580" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="Flow_0yqo5xu_di" bpmnElement="Flow_0yqo5xu"> + <di:waypoint x="500" y="580" /> + <di:waypoint x="552" y="580" /> + </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/CreateSliceService.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy index 5f0d412de0..70acadf0d8 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 @@ -349,7 +349,7 @@ public class CreateSliceService extends AbstractServiceTaskProcessor { TemplateInfo nstInfo = new TemplateInfo() nstInfo.setUUID(nstSolution.get("UUID") as String) nstInfo.setInvariantUUID(nstSolution.get("invariantUUID") as String) - nstInfo.setName(nstSolution.get("name") as String) + nstInfo.setName(nstSolution.get("NSTName") as String) sliceTaskParams.setNSTInfo(nstInfo) 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 d0c189cb04..1c4bbdcd26 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 @@ -41,7 +41,6 @@ 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.ResponseDescriptor import org.onap.so.beans.nsmf.ServiceInfo import org.onap.so.beans.nsmf.SliceTaskInfo import org.onap.so.beans.nsmf.SliceTaskParamsAdapter @@ -157,6 +156,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ logger.info(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } + execution.setVariable("sliceTaskParams", sliceParams) logger.debug("Exit CreateNSIinAAI in DoAllocateNSIandNSSI()") } @@ -201,8 +201,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ try { AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class) Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class) - //todo: if exists - if (!si.ifPresent()) { + if (!si.isPresent()) { String msg = "NSI suggested in the option doesn't exist. " + nsiServiceInstanceID logger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) @@ -251,15 +250,13 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ rspi.setOrchestrationStatus(oStatus) rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID) rspi.setModelVersionId(sliceTaskInfo.NSSTInfo.UUID) - rspi.setInputParameters(uuiRequest) - rspi.setWorkloadContext(useInterval) - rspi.setEnvironmentContext(sNSSAI_id) + rspi.setInputParameters(execution.getVariable("uuiRequest")) + rspi.setWorkloadContext(execution.getVariable("useInterval")) + rspi.setEnvironmentContext(execution.getVariable("sNSSAI_id")) //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)) client.create(uri, rspi) @@ -312,11 +309,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest() AllocateAnNssi allocateAnNssi = new AllocateAnNssi() - allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID - allocateAnNssi.nssiId = sliceTaskInfo.NSSTInfo.UUID - allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile - allocateAnNssi.nsiInfo.nsiId = sliceParams.suggestNsiId EsrInfo esrInfo = new EsrInfo() //todo: vendor and network @@ -339,7 +332,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ nbiRequest.setAllocateAnNssi(allocateAnNssi) execution.setVariable("AnAllocateNssiNbiRequest", nbiRequest) - execution.setVariable("anBHSliceTaskInfo", sliceTaskInfo) + execution.setVariable("anSliceTaskInfo", sliceTaskInfo) execution.setVariable("anSubnetType", SubnetType.AN_NF) } @@ -592,7 +585,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ SliceTaskParamsAdapter sliceParams = execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter - ResponseDescriptor result = execution.getVariable("anNssiAllocateResult") as ResponseDescriptor + NssiResponse result = execution.getVariable("anNssiAllocateResult") as NssiResponse String nssiId = result.getNssiId() String nsiId = sliceParams.getSuggestNsiId() String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId @@ -660,23 +653,25 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter //sliceParams.setServiceId(nsiServiceInstanceID) - AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(nssiId)) + AAIResourceUri nsiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(nssiId)) String endpointId = null try { AAIResultWrapper wrapper = client.get(nsiServiceUri, NotFoundException.class) Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class) - //todo: if exists - if (!si.ifPresent()) { + if (!si.isPresent()) { String msg = "NSSI in the option doesn't exist. " + nssiId logger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) - } - - if (si.ifPresent()) { + } else { ServiceInstance nssiInstance = si.get() //todo: handle relationship and return endpointId + if (nssiInstance.relationshipList == null) { + String msg = "relationshipList of " + nssiId + " is null" + logger.debug(msg) + return null + } for (Relationship relationship : nssiInstance.relationshipList.getRelationship()) { if (relationship.relationshipLabel){ endpointId = relationship //todo @@ -689,7 +684,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ }catch(BpmnError e) { throw e }catch (Exception ex){ - String msg = "NSSI suggested in the option doesn't exist. " + nssiId + String msg = "Exception: " + ex logger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } @@ -735,14 +730,14 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{ //relation ship Relationship relationship = new Relationship() - AAIResourceUri nsiServiceUri = 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 Allotted resource relationship, nsiServiceUri: " + nsiServiceUri) + logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri) - relationship.setRelatedLink(nsiServiceUri.build().toString()) + relationship.setRelatedLink(targetInstanceUri.build().toString()) - AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId).relationshipAPI()) - client.create(uri, relationship) + AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(sourceId)).relationshipAPI() + client.create(sourceInstanceUri, relationship) } } 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 3e834fa7bb..896d7ff4b1 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 @@ -139,7 +139,7 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor { case SubnetType.CN: sliceTaskParams.cnSliceTaskInfo = sliceTaskInfo break - case SubnetType.AN_NF: + case SubnetType.AN: sliceTaskParams.anSliceTaskInfo = sliceTaskInfo break case SubnetType.TN_BH: 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 cfdbe98c34..bc4060e10d 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 @@ -44,6 +44,7 @@ import org.onap.so.bpmn.core.json.JsonUtils import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.http.ResponseEntity +import org.springframework.util.StringUtils class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ @@ -139,7 +140,6 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ * @param execution */ public void processDecompositionNSST(DelegateExecution execution) { - List<ServiceDecomposition> nsstServiceDecompositions = execution.getVariable("nsstServiceDecompositions") as List<ServiceDecomposition> @@ -153,6 +153,9 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ int num = execution.getVariable("maxNsstIndex") as Integer int index = execution.getVariable("currentNsstIndex") as Integer + List<TemplateInfo> nsstInfos = execution.getVariable("nsstInfos") as List<TemplateInfo> + nsstInfos.get(index).name = nsstServiceDecomposition.modelInfo.modelName + execution.setVariable("nsstInfos", nsstInfos) execution.setVariable("currentNsstIndex", index + 1) if (index >= num) { @@ -178,17 +181,16 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ List<SubnetCapability> subnetCapabilities = new ArrayList<>() for (ServiceDecomposition serviceDecomposition : nsstServiceDecompositions) { - SubnetCapability subnetCapability = new SubnetCapability() - handleByType(execution, serviceDecomposition, sliceParams, subnetCapability) - subnetCapabilities.add(subnetCapability) + handleByType(execution, serviceDecomposition, sliceParams, subnetCapabilities) } execution.setVariable("sliceTaskParams", sliceParams) execution.setVariable("subnetCapabilities", subnetCapabilities) + logger.debug("sliceTaskParams= " + sliceParams.toString()) } private void handleByType(DelegateExecution execution, ServiceDecomposition serviceDecomposition, - SliceTaskParamsAdapter sliceParams, SubnetCapability subnetCapability) { + SliceTaskParamsAdapter sliceParams, List<SubnetCapability> subnetCapabilities) { ModelInfo modelInfo = serviceDecomposition.getModelInfo() String vendor = serviceDecomposition.getServiceRole() SubnetType subnetType = convertServiceCategory(serviceDecomposition.getServiceCategory()) @@ -210,7 +212,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ sliceParams.tnMHSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid() sliceParams.tnMHSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName() break - case SubnetType.AN_NF: + case SubnetType.AN: sliceParams.anSliceTaskInfo.vendor = vendor sliceParams.anSliceTaskInfo.subnetType = subnetType sliceParams.anSliceTaskInfo.networkType = subnetType.networkType @@ -236,12 +238,14 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) } String response = querySubnetCapability(execution, vendor, subnetType) - ResponseEntity responseEntity = objectMapper.readValue(response, ResponseEntity.class) - - Map<String, Object> result = responseEntity.getBody() as Map - for (Map.Entry<String, Object> entry : result.entrySet()) { - subnetCapability.setDomainType(entry.getKey()) - subnetCapability.setCapabilityDetails(entry.getValue()) + if (!StringUtils.isEmpty(response)) { + SubnetCapability subnetCapability = new SubnetCapability() + Map<String, Object> result = objectMapper.readValue(response, Map.class) + for (Map.Entry<String, Object> entry : result.entrySet()) { + subnetCapability.setDomainType(entry.getKey()) + subnetCapability.setCapabilityDetails(entry.getValue()) + } + subnetCapabilities.add(subnetCapability) } } @@ -254,7 +258,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ return SubnetType.CN } if (serviceCategory ==~ /AN.*NF.*/){ - return SubnetType.AN_NF + return SubnetType.AN } if (serviceCategory ==~ /TN.*BH.*/){ return SubnetType.TN_BH @@ -271,9 +275,8 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ */ private String querySubnetCapability(DelegateExecution execution, String vendor, SubnetType subnetType) { - String strRequest = objectMapper.writeValueAsString(buildQuerySubnetCapRequest(vendor, subnetType)) - - String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, QUERY_SUB_NET_CAPABILITY, strRequest) + String response = nssmfAdapterUtils.sendPostRequestNSSMF(execution, QUERY_SUB_NET_CAPABILITY, + buildQuerySubnetCapRequest(vendor, subnetType)) return response } @@ -284,24 +287,24 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ * @param networkType * @return */ - private static String buildQuerySubnetCapRequest(String vendor, SubnetType subnetType) { + private static NssmfAdapterNBIRequest buildQuerySubnetCapRequest(String vendor, SubnetType subnetType) { NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest() -// List<String> subnetTypes = new ArrayList<>() -// subnetTypes.add(subnetType.subnetType) - Map<String, Object> paramMap = new HashMap() - paramMap.put("subnetType", subnetType.subnetType) + List<String> subnetTypes = new ArrayList<>() + + subnetTypes.add(subnetType.subnetType) + + Map<String, Object> paramMap = new HashMap<>() + paramMap.put("subnetTypes", subnetTypes) - request.setSubnetCapabilityQuery(objectMapper.writeValueAsString(paramMap)) + request.setSubnetCapabilityQuery(paramMap) EsrInfo esrInfo = new EsrInfo() esrInfo.setVendor(vendor) esrInfo.setNetworkType(subnetType.networkType) request.setEsrInfo(esrInfo) - String strRequest = objectMapper.writeValueAsString(request) - - return strRequest + return request } /** @@ -336,7 +339,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ execution.getVariable("subnetCapabilities") as List<SubnetCapability> String oofRequest = oofUtils.buildSelectNSIRequest(requestId, nstInfo, nsstInfos, - messageType, profileInfo, subnetCapabilities, timeout as Integer, preferReuse) + messageType, profileInfo, subnetCapabilities, 600, preferReuse) execution.setVariable("nsiSelection_oofRequest", oofRequest) logger.debug("Sending request to OOF: " + oofRequest) @@ -358,7 +361,13 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ //This needs to be changed to derive a value when we add policy to decide the solution options. Map<String, Object> resMap = objectMapper.readValue(oofResponse, Map.class) + String requestStatus = resMap.get("requestStatus") + if (StringUtils.isEmpty(requestStatus)) { + exceptionUtil.buildWorkflowException(execution, 7000, "get nsi from oof error: " + oofResponse) + } + List<Map<String, Object>> nsiSolutions = (List<Map<String, Object>>) resMap.get("solutions") + Map<String, Object> solution = nsiSolutions.get(0) String resourceSharingLevel = execution.getVariable("resourceSharingLevel") @@ -378,7 +387,6 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ } } execution.setVariable("sliceTaskParams", sliceTaskParams) - //logger.debug("sliceTaskParams: " + sliceTaskParams.convertToJson()) logger.debug("*** Completed options Call to OOF ***") } @@ -402,6 +410,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ sliceParams.tnBHSliceTaskInfo.sliceProfile = sliceProfile as TnSliceProfile break case "an-nf": + case "an": sliceParams.anSliceTaskInfo.sliceProfile = sliceProfile as AnSliceProfile break case "cn": @@ -602,7 +611,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ execution.setVariable("nssiSelection_timeout", timeout) String oofRequest = oofUtils.buildSelectNSSIRequest(requestId, nsstInfo, messageType, - profileInfo, timeout as Integer) + profileInfo, 600) execution.setVariable("nssiSelection_oofRequest", oofRequest) logger.debug("Sending request to OOF: " + oofRequest) @@ -665,7 +674,7 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{ sliceTaskParams.cnSliceTaskInfo.suggestNssiId = solution.get("NSSIId") sliceTaskParams.cnSliceTaskInfo.suggestNssiName = solution.get("NSSIName") break - case SubnetType.AN_NF: + case SubnetType.AN: sliceTaskParams.anSliceTaskInfo.suggestNssiId = solution.get("NSSIId") sliceTaskParams.anSliceTaskInfo.suggestNssiName = solution.get("NSSIName") break 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 71c50c1684..9b6406d57f 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 @@ -40,7 +40,7 @@ public class SliceTaskInfo<T> implements Serializable { private T sliceProfile; - private TemplateInfo NSSTInfo; + private TemplateInfo NSSTInfo = new TemplateInfo(); private String sliceInstanceId; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/oof/RequestInfo.java b/common/src/main/java/org/onap/so/beans/nsmf/oof/RequestInfo.java index 292a0d5ae4..ee3d8aecf8 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/oof/RequestInfo.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/oof/RequestInfo.java @@ -40,7 +40,7 @@ public class RequestInfo implements Serializable { private Integer numSolutions; - private Integer timeout; + private Object timeout; private Map<?, ?> addtnlArgs; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/oof/SubnetType.java b/common/src/main/java/org/onap/so/beans/nsmf/oof/SubnetType.java index 4b0136a798..536bb04fce 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/oof/SubnetType.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/oof/SubnetType.java @@ -26,15 +26,13 @@ import org.onap.so.beans.nsmf.NetworkType; public enum SubnetType { AN("AN", NetworkType.ACCESS), - AN_NF("AN-NF", NetworkType.ACCESS), - CN("CN", NetworkType.CORE), - TN_FH("TN-FH", NetworkType.TRANSPORT), + TN_FH("TN_FH", NetworkType.TRANSPORT), - TN_MH("TN-MH", NetworkType.TRANSPORT), + TN_MH("TN_MH", NetworkType.TRANSPORT), - TN_BH("TN-BH", NetworkType.TRANSPORT),; + TN_BH("TN_BH", NetworkType.TRANSPORT),; private NetworkType networkType; diff --git a/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java b/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java index c601b88ae5..1a8307e8bc 100644 --- a/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java +++ b/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java @@ -64,16 +64,6 @@ public class ExternalTaskServiceUtils { return Integer.parseInt(env.getProperty("workflow.topics.maxClients", "10")); } - public Long getLockDuration() { - Long lockDuration = Long.parseLong(env.getProperty("mso.audit.lock-time", "60000")); - return lockDuration; - } - - public Long getLongLockDuration() { - Long lockDuration = Long.parseLong(env.getProperty("mso.long.lock-time", "600000")); - return lockDuration; - } - @ScheduledLogging @Scheduled(fixedDelay = 30000) public void checkAllClientsActive() { diff --git a/releases/1.7.6-nslcm-adapter.yaml b/releases/1.7.6-nslcm-adapter.yaml new file mode 100644 index 0000000000..0f78b9f1db --- /dev/null +++ b/releases/1.7.6-nslcm-adapter.yaml @@ -0,0 +1,9 @@ +--- +distribution_type: 'container' +container_release_tag: '1.7.7' +project: 'so' +log_dir: 'so-maven-docker-stage-master/510/' +ref: '1757b2f9727591fd5907f43834dbe9f0b8261740' +containers: + - name: 'so/so-etsi-nfvo-ns-lcm' + version: '1.7.6-20201102T0420'
\ No newline at end of file diff --git a/so-simulator/src/main/java/org/onap/so/simulator/actions/aai/ProcessVnfc.java b/so-simulator/src/main/java/org/onap/so/simulator/actions/aai/ProcessVnfc.java index d8d62d99bc..80e50befaa 100644 --- a/so-simulator/src/main/java/org/onap/so/simulator/actions/aai/ProcessVnfc.java +++ b/so-simulator/src/main/java/org/onap/so/simulator/actions/aai/ProcessVnfc.java @@ -1,7 +1,11 @@ package org.onap.so.simulator.actions.aai; +import java.util.Optional; import org.onap.aai.domain.yang.Vnfc; +import org.onap.aai.domain.yang.Vserver; +import org.onap.aai.domain.yang.Vservers; import org.onap.aaiclient.client.aai.AAIResourcesClient; +import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri; import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri; import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory; import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; @@ -58,6 +62,26 @@ public class ProcessVnfc extends AbstractTestAction { .genericVnf(context.getVariable("vnfId")).vfModule(context.getVariable("vfModuleId"))); logger.debug("creating VNFC edge to vf module"); aaiResourceClient.connect(vfModuleURI, vnfcURI); + } else if (context.getVariable("requestAction").equals("CreateVfModuleInstance") + && context.getVariable("serviceAction").equals("activate")) { + logger.debug("creating edge between vserver and vnfc"); + AAIResourceUri vnfcURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().vnfc("ssc_server_1")); + AAIPluralResourceUri vserverPlural = + AAIUriFactory + .createResourceUri(AAIFluentTypeBuilder.cloudInfrastructure() + .cloudRegion(context.getVariable("cloudOwner"), + context.getVariable("cloudRegion")) + .tenant(context.getVariable("tenant")).vservers()) + .queryParam("vserver-name", "ssc_server_1"); + Optional<Vserver> vserver = aaiResourceClient.getFirst(Vservers.class, Vserver.class, vserverPlural); + if (vserver.isPresent()) { + AAIResourceUri vserverURI = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.cloudInfrastructure() + .cloudRegion(context.getVariable("cloudOwner"), context.getVariable("cloudRegion")) + .tenant(context.getVariable("tenant")).vserver(vserver.get().getVserverId())); + aaiResourceClient.connect(vserverURI, vnfcURI); + } } } catch (Exception e) { |