aboutsummaryrefslogtreecommitdiffstats
path: root/bpmn
diff options
context:
space:
mode:
authorRupali Shirode <rupali.shirode@t-systems.com>2023-08-28 18:39:15 +0530
committerRupali Shirode <rupali.shirode@t-systems.com>2023-08-28 18:40:43 +0530
commitf46e824fe4730738cc422e87facc5c80ffa44b10 (patch)
tree8dcc4c8861596586a913d8db530ed18f089ecb62 /bpmn
parent43224c4dc5ff3bf67979f480d8628f300497da07 (diff)
[SO] Macro flow for PNF-Modify operation
Macro flow for PNF-Modify operation Issue-ID: SO-4111 Change-Id: Ic51cbee5fe59f3aafb2ec41773504b183763d9ec Signed-off-by: Rupali Shirode <rupali.shirode@t-systems.com>
Diffstat (limited to 'bpmn')
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/Pnf.java11
-rw-r--r--bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AAISetPnfInMaintBB.bpmn64
-rw-r--r--bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAISetPNFInMaintBBTest.java32
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java38
-rwxr-xr-xbpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java7
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java1
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java33
7 files changed, 185 insertions, 1 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/Pnf.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/Pnf.java
index 1953ba410b..1608d88c9e 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/Pnf.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/Pnf.java
@@ -51,6 +51,9 @@ public class Pnf implements Serializable, ShallowCopy<Pnf> {
@JsonProperty("cloud-region")
private CloudRegion cloudRegion;
+ @JsonProperty("in-maint")
+ private Boolean inMaint;
+
@JsonProperty("model-info-pnf")
private ModelInfoPnf modelInfoPnf;
@@ -92,6 +95,14 @@ public class Pnf implements Serializable, ShallowCopy<Pnf> {
this.orchestrationStatus = orchestrationStatus;
}
+ public Boolean isInMaint() {
+ return inMaint;
+ }
+
+ public void setInMaint(Boolean inMaint) {
+ this.inMaint = inMaint;
+ }
+
public CloudRegion getCloudRegion() {
return cloudRegion;
}
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AAISetPnfInMaintBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AAISetPnfInMaintBB.bpmn
new file mode 100644
index 0000000000..49ca2ec5a8
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AAISetPnfInMaintBB.bpmn
@@ -0,0 +1,64 @@
+<?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="5.10.0">
+ <bpmn:process id="AAISetPnfInMaintBB" name="AAISetPnfInMaintBB" isExecutable="true">
+ <bpmn:startEvent id="Start_AAISetPnfInMaintBB">
+ <bpmn:outgoing>SequenceFlow_0zaz9o2</bpmn:outgoing>
+ </bpmn:startEvent>
+ <bpmn:endEvent id="End_AAISetPnfInMaintBB">
+ <bpmn:incoming>SequenceFlow_1jwsja5</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:serviceTask id="Task_SetInMaint" name="PNF Set InMaint Flag (AAI)" camunda:expression="${AAIFlagTasks.modifyPnfInMaintFlag(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)), true)}">
+ <bpmn:incoming>Flow_1vke3vw</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1jwsja5</bpmn:outgoing>
+ </bpmn:serviceTask>
+ <bpmn:sequenceFlow id="SequenceFlow_0zaz9o2" sourceRef="Start_AAISetPnfInMaintBB" targetRef="Task_CheckPnfInMaint" />
+ <bpmn:sequenceFlow id="SequenceFlow_1jwsja5" sourceRef="Task_SetInMaint" targetRef="End_AAISetPnfInMaintBB" />
+ <bpmn:serviceTask id="Task_CheckPnfInMaint" name="Check If Pnf In Maint (AAI)" camunda:expression="${AAIFlagTasks.checkPnfInMaintFlag(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+ <bpmn:incoming>SequenceFlow_0zaz9o2</bpmn:incoming>
+ <bpmn:outgoing>Flow_1vke3vw</bpmn:outgoing>
+ </bpmn:serviceTask>
+ <bpmn:sequenceFlow id="Flow_1vke3vw" sourceRef="Task_CheckPnfInMaint" targetRef="Task_SetInMaint" />
+ </bpmn:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="AAISetPnfInMaintBB">
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="Start_AAISetPnfInMaintBB">
+ <dc:Bounds x="155" y="76" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="102" y="112" width="23" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_1r380lg_di" bpmnElement="Task_SetInMaint">
+ <dc:Bounds x="440" y="54" width="100" height="80" />
+ <bpmndi:BPMNLabel />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_1h93h9d_di" bpmnElement="End_AAISetPnfInMaintBB">
+ <dc:Bounds x="609" y="76" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="370" y="116" width="18" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="BPMNShape_1wtggzs" bpmnElement="Task_CheckPnfInMaint">
+ <dc:Bounds x="270" y="54" width="100" height="80" />
+ <bpmndi:BPMNLabel />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_0zaz9o2_di" bpmnElement="SequenceFlow_0zaz9o2">
+ <di:waypoint x="191" y="94" />
+ <di:waypoint x="270" y="94" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="116.5" y="73" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1jwsja5_di" bpmnElement="SequenceFlow_1jwsja5">
+ <di:waypoint x="540" y="94" />
+ <di:waypoint x="609" y="94" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="281.5" y="79" width="90" height="0" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="Flow_1vke3vw_di" bpmnElement="Flow_1vke3vw">
+ <di:waypoint x="370" y="94" />
+ <di:waypoint x="440" y="94" />
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn:definitions>
diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAISetPNFInMaintBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAISetPNFInMaintBBTest.java
new file mode 100644
index 0000000000..4ff568771d
--- /dev/null
+++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/common/AAISetPNFInMaintBBTest.java
@@ -0,0 +1,32 @@
+package org.onap.so.bpmn.common;
+
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Test;
+import org.onap.so.bpmn.BaseBPMNTest;
+import java.io.IOException;
+import static org.camunda.bpm.engine.test.assertions.bpmn.BpmnAwareTests.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
+
+public class AAISetPNFInMaintBBTest extends BaseBPMNTest {
+ @Test
+ public void sunnyDayAAISetPnfInMaintBBTest() throws InterruptedException, IOException {
+ ProcessInstance pi = runtimeService.startProcessInstanceByKey("AAISetPnfInMaintBB", variables);
+ assertThat(pi).isNotNull().isStarted().hasPassedInOrder("Start_AAISetPnfInMaintBB", "Task_SetInMaint",
+ "End_AAISetPnfInMaintBB");
+ }
+
+ @Test
+ public void rainyDayAAISetPnfInMaintBBTest() {
+ doThrow(new BpmnError("7000", "TESTING ERRORS")).when(aaiFlagTasks)
+ .modifyPnfInMaintFlag(any(BuildingBlockExecution.class), any(boolean.class));
+
+ ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("AAISetPnfInMaintBB", variables);
+ assertThat(processInstance).isNotNull();
+ assertThat(processInstance).isStarted().hasPassedInOrder("Start_AAISetPnfInMaintBB", "Task_SetInMaint")
+ .hasNotPassed("End_AAISetPnfInMaintBB");
+ assertThat(processInstance).isEnded();
+ }
+
+}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java
index 997d20036f..10bb720844 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIFlagTasks.java
@@ -24,9 +24,11 @@ package org.onap.so.bpmn.infrastructure.aai.tasks;
import org.onap.so.bpmn.common.BuildingBlockExecution;
import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.client.orchestration.AAIPnfResources;
import org.onap.so.client.orchestration.AAIVnfResources;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,6 +42,9 @@ public class AAIFlagTasks {
@Autowired
private AAIVnfResources aaiVnfResources;
+
+ @Autowired
+ private AAIPnfResources aaiPnfResources;
@Autowired
private ExceptionBuilder exceptionUtil;
@Autowired
@@ -74,6 +79,39 @@ public class AAIFlagTasks {
}
}
+ public void checkPnfInMaintFlag(BuildingBlockExecution execution) {
+ boolean inMaint = false;
+ try {
+ Pnf pnf = extractPojosForBB.extractByKey(execution, ResourceKey.PNF);
+ String pnfName = pnf.getPnfName();
+ inMaint = aaiPnfResources.checkInMaintFlag(pnfName);
+ } catch (Exception ex) {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+ }
+ if (inMaint) {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "PNF is already in maintenance in A&AI");
+ }
+ }
+
+ public void modifyPnfInMaintFlag(BuildingBlockExecution execution, boolean inMaint) {
+ try {
+ Pnf pnf = extractPojosForBB.extractByKey(execution, ResourceKey.PNF);
+ logger.info("In modifyPnfInMaintFlag pnfname: {}", pnf.getPnfName());
+ Pnf copiedPnf = pnf.shallowCopyId();
+ copiedPnf.setPnfName(pnf.getPnfName());
+
+ copiedPnf.setInMaint(inMaint);
+ pnf.setInMaint(inMaint);
+ logger.info("In modifyPnfInMaintFlag if block pnfInMaint: {}, copiedPnfInMaint: {}", pnf.isInMaint(),
+ copiedPnf.isInMaint());
+ aaiPnfResources.updateObjectPnf(copiedPnf);
+
+ } catch (Exception ex) {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+ }
+ }
+
+
public void checkVnfClosedLoopDisabledFlag(BuildingBlockExecution execution) {
boolean isClosedLoopDisabled = false;
try {
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
index 82f44bc802..3e4e2d16a3 100755
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
@@ -308,6 +308,9 @@ public class WorkflowAction {
} else if (isPNFDelete(resourceType, requestAction)) {
pnfEBBLoader.traverseAAIPnf(execution, resourceList, workflowResourceIds.getServiceInstanceId(), resourceId,
aaiResourceIds);
+ } else if (isPNFUpdate(resourceType, requestAction)) {
+ pnfEBBLoader.traverseAAIPnf(execution, resourceList, workflowResourceIds.getServiceInstanceId(), resourceId,
+ aaiResourceIds);
} else if (resourceType == WorkflowType.VNF
&& (DELETE_INSTANCE.equalsIgnoreCase(requestAction) || REPLACEINSTANCE.equalsIgnoreCase(requestAction)
|| (RECREATE_INSTANCE.equalsIgnoreCase(requestAction)))) {
@@ -410,6 +413,10 @@ public class WorkflowAction {
return resourceType == WorkflowType.PNF && DELETE_INSTANCE.equalsIgnoreCase(requestAction);
}
+ private boolean isPNFUpdate(WorkflowType resourceType, String requestAction) {
+ return resourceType == WorkflowType.PNF && UPDATE_INSTANCE.equalsIgnoreCase(requestAction);
+ }
+
private void setExecutionVariables(DelegateExecution execution, List<ExecuteBuildingBlock> flowsToExecute,
List<String> flowNames) {
execution.setVariable("flowNames", flowNames);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java
index 4664ffcc37..9974e6c20d 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java
@@ -114,6 +114,7 @@ public class AAIObjectMapper {
map().setModelInvariantId(source.getModelInfoPnf().getModelInvariantUuid());
map().setModelVersionId(source.getModelInfoPnf().getModelUuid());
map().setNfType(source.getModelInfoPnf().getNfType());
+ map().setInMaint(source.isInMaint());
}
});
}
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java
index acfca5d55a..d042fd68d4 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java
@@ -62,8 +62,15 @@ public class AAIPnfResources {
public void updateOrchestrationStatusPnf(Pnf pnf, OrchestrationStatus orchestrationStatus) {
AAIResourceUri pnfURI = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName()));
-
Pnf pnfCopy = pnf.shallowCopyId();
+ if (orchestrationStatus.equals(OrchestrationStatus.REGISTER)
+ || orchestrationStatus.equals(OrchestrationStatus.REGISTERED)) {
+ pnf.setInMaint(true);
+ pnfCopy.setInMaint(true);
+ } else {
+ pnf.setInMaint(false);
+ pnfCopy.setInMaint(false);
+ }
pnf.setOrchestrationStatus(orchestrationStatus);
pnfCopy.setOrchestrationStatus(orchestrationStatus);
@@ -93,6 +100,30 @@ public class AAIPnfResources {
injectionHelper.getAaiClient().delete(pnfURI);
}
+ public void updateObjectPnf(Pnf pnf) {
+ Optional<org.onap.aai.domain.yang.Pnf> pnfFromAai =
+ injectionHelper.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
+ AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName())));
+ logger.info("***in updateObjectPnf getPnfName====> {} ", pnfFromAai.get().getPnfName());
+ injectionHelper.getAaiClient().update(
+ AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnf.getPnfName())),
+ aaiObjectMapper.mapPnf((pnf)));
+ }
+
+ /**
+ * Check inMaint flag value of PNF from AAI using pnfName
+ *
+ * @param pnfName - pnf-id required pnf
+ * @return inMaint flag value
+ */
+ public boolean checkInMaintFlag(String pnfName) {
+ org.onap.aai.domain.yang.Pnf pnf = injectionHelper.getAaiClient()
+ .get(org.onap.aai.domain.yang.Pnf.class,
+ AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().pnf(pnfName)))
+ .orElse(new org.onap.aai.domain.yang.Pnf());
+ return pnf.isInMaint();
+ }
+
private void updatePnfFields(Pnf pnf, org.onap.aai.domain.yang.Pnf pnfFromAai) {
if (pnf.getModelInfoPnf() != null
&& StringUtils.isNotBlank(pnf.getModelInfoPnf().getModelCustomizationUuid())) {