diff options
9 files changed, 215 insertions, 2 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 501f711754..2b0297fcb1 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 @@ -43,6 +43,7 @@ INSERT INTO northbound_request_ref_lookup(MACRO_ACTION, ACTION, REQUEST_SCOPE, I ('CNF-Macro-Upgrade', 'upgradeCnf', 'Vnf', false,true, '7', '7','DEFAULT', '*'), ('PNF-Macro-Delete', 'deleteInstance', 'Pnf', false,true, '7', '7','DEFAULT', '*'), ('PNF-Macro-Create', 'createInstance', 'Pnf', false,true, '7', '7','DEFAULT', '*'), +('PNF-Macro-Modify', 'updateInstance', 'Pnf', false,true, '7', '7','DEFAULT', '*'), ('Cnf-Create', 'createInstance', 'Cnf', true, true, '7','7','DEFAULT', '*'), ('Cnf-Delete', 'deleteInstance', 'Cnf', true, true, '7','7','DEFAULT', '*'), ('Slice-Macro-create','createRanSlice','NetworkSliceSubnet',0,1,7,1,'DEFAULT','*'), @@ -297,7 +298,11 @@ INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, SC ('Slice-Macro-modify','2','ControllerExecutionBB','nssi','modify-sliceprofile',1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Slice-Macro-modify' and CLOUD_OWNER = 'DEFAULT')), ('Slice-Macro-delete','2','DeleteRANNssiBB',null,null,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Slice-Macro-delete' and CLOUD_OWNER = 'DEFAULT')), ('Slice-Macro-delete','1','ControllerExecutionBB','nssi','delete-sliceprofile',1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Slice-Macro-delete' and CLOUD_OWNER = 'DEFAULT')); - +('PNF-Macro-Modify' , '1', 'AAISetPnfInMaintBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'PNF-Macro-Modify' and CLOUD_OWNER = 'DEFAULT')), +('PNF-Macro-Modify' , '2', 'ControllerExecutionBB', 'pnf' , 'modify-config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'PNF-Macro-Modify' and CLOUD_OWNER = 'DEFAULT')), +('PNF-Macro-Modify' , '3', 'WaitForPnfReadyBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'PNF-Macro-Modify' and CLOUD_OWNER = 'DEFAULT')), +('PNF-Macro-Modify' , '4', 'ControllerExecutionBB', 'pnf' , 'modify-config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'PNF-Macro-Modify' and CLOUD_OWNER = 'DEFAULT')), +('PNF-Macro-Modify' , '5', 'ActivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'PNF-Macro-Modify' and CLOUD_OWNER = 'DEFAULT')), INSERT INTO rainy_day_handler_macro (FLOW_NAME, SERVICE_TYPE, VNF_TYPE, ERROR_CODE, WORK_STEP, POLICY, SECONDARY_POLICY, REG_EX_ERROR_MESSAGE, SERVICE_ROLE) VALUES @@ -427,6 +432,7 @@ VALUES ('DeactivateNetworkCollectionBB', 'NETWORK_COLLECTION', 'DEACTIVATE'), ('AAICheckVnfInMaintBB', 'NO_VALIDATE', 'CUSTOM'), ('AAISetVnfInMaintBB', 'NO_VALIDATE', 'CUSTOM'), +('AAISetPnfInMaintBB', 'NO_VALIDATE', 'CUSTOM'), ('AAIUnsetVnfInMaintBB', 'NO_VALIDATE', 'CUSTOM'), ('SDNOVnfHealthCheckBB', 'NO_VALIDATE', 'CUSTOM'), ('VNF-Macro-Replace', 'NO_VALIDATE', 'CUSTOM'), 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("gBuildingBlockExecution")), 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("gBuildingBlockExecution")))}"> + <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())) { diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java index d4331dcfe8..17967ca904 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java @@ -809,6 +809,29 @@ public class ServiceInstances extends AbstractRestHandler { } } + @PUT + @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/pnfs/{pnfInstanceId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Create PNF on a specified version and serviceInstance", responses = @ApiResponse( + content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class))))) + @Transactional + public Response updatePnfInstance(String request, @PathParam("version") String version, + @PathParam("serviceInstanceId") String serviceInstanceId, @PathParam("pnfInstanceId") String pnfInstanceId, + @Context ContainerRequestContext requestContext) throws ApiException { + String requestId = requestHandlerUtils.getRequestId(requestContext); + HashMap<String, String> instanceIdMap = new HashMap<>(); + instanceIdMap.put("serviceInstanceId", serviceInstanceId); + instanceIdMap.put("pnfInstanceId", pnfInstanceId); + try { + return serviceInstances(request, Action.updateInstance, instanceIdMap, version, requestId, + requestHandlerUtils.getRequestUri(requestContext, uriPrefix)); + } catch (Exception e) { + logger.error("Error in pnf", e); + throw e; + } + } + @POST @Path("/{version:[vV][5-7]}/serviceInstances/{serviceInstanceId}/networks") @Consumes(MediaType.APPLICATION_JSON) |