From de52c6240a7c4b7e0cab5ea4718ac0f4608f2aa2 Mon Sep 17 00:00:00 2001 From: mojahidi Date: Mon, 14 Aug 2017 12:50:45 +0530 Subject: [PATCH] Rename action Block/UnBlock and Update Orch MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit StopApplication : Renamed block traffic action to StopApplication. Transition of status in AAI will be stopping on accepting request followed by Stopped for Success and Error for error scenario’s StartApplicaiton: Renamed unblock traffic action to StartApplication. Transition of status in AAI will be starting on accepting request followed by Running for Success and Error for error scenario’s. Refactored to handle actions on basis of ReadOnly,OrchestrationStatus, BuiltIn and OperationalStatus instead of individual actions. Change-Id: Ia7c6b233ac9a0aabeb9a1f7d715629917f6b7b86 Issue-ID:APPC-55 Signed-off-by: mojahidi --- .../appc/executor/impl/CommandTaskFactory.java | 16 +++-- .../appc/domainmodel/lcm/OperationType.java | 29 +++++++++ .../appc/domainmodel/lcm/VNFOperation.java | 66 ++++++++++---------- .../appc/requesthandler/conv/Converter.java | 10 ++++ .../openecomp/appc/provider/AppcProviderLcm.java | 70 +++++++++++++++++++++- .../src/main/yang/appc-provider-lcm.yang | 44 +++++++++++++- 6 files changed, 192 insertions(+), 43 deletions(-) create mode 100644 appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/OperationType.java diff --git a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java index c5590f961..5a7550cc4 100644 --- a/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java +++ b/appc-dispatcher/appc-command-executor/appc-command-executor-core/src/main/java/org/openecomp/appc/executor/impl/CommandTaskFactory.java @@ -70,15 +70,13 @@ public class CommandTaskFactory { if(ActionLevel.VM.equals(actionLevel)){ return new LCMReadonlyCommandTask(runtimeContext,requestHandler,workflowManager); } - if (VNFOperation.Sync.toString().equals(action) || - VNFOperation.Audit.toString().equals(action) || - VNFOperation.ConfigBackup.toString().equals(action) || - VNFOperation.ConfigBackupDelete.toString().equals(action) || - VNFOperation.ConfigExport.toString().equals(action)){ - return new LCMReadonlyCommandTask(runtimeContext,requestHandler,workflowManager); - }else { - return new LCMCommandTask(runtimeContext,requestHandler,workflowManager, - lifecyclemanager); + switch (runtimeContext.getRequestContext().getAction().getOperationType()){ + case ReadOnly: + case OperationStatusUpdate: + return new LCMReadonlyCommandTask(runtimeContext,requestHandler,workflowManager); + default: + return new LCMCommandTask(runtimeContext,requestHandler,workflowManager, + lifecyclemanager); } } diff --git a/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/OperationType.java b/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/OperationType.java new file mode 100644 index 000000000..becca04b6 --- /dev/null +++ b/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/OperationType.java @@ -0,0 +1,29 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : APPC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2017 Amdocs + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.appc.domainmodel.lcm; + +public enum OperationType { + ReadOnly,BuiltIn,OrchestrationStatusUpdate,OperationStatusUpdate +} diff --git a/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java b/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java index 3cf0e2f6d..316b5acb7 100644 --- a/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java +++ b/appc-dispatcher/appc-dispatcher-common/domain-model-lib/src/main/java/org/openecomp/appc/domainmodel/lcm/VNFOperation.java @@ -25,35 +25,39 @@ package org.openecomp.appc.domainmodel.lcm; public enum VNFOperation { - - Configure, Test, HealthCheck, Start, Terminate, Restart, Rebuild, Stop, ConfigModify, - ConfigScaleOut,ConfigRestore,Backup, Snapshot, - SoftwareUpload, LiveUpgrade, Rollback, Sync, Audit, Test_lic, Migrate, Evacuate,ConfigBackup,ConfigBackupDelete,ConfigExport, - Lock(true), Unlock(true), CheckLock(true); - - private boolean builtIn; - - VNFOperation(boolean builtIn) { - this.builtIn = builtIn; - } - - VNFOperation() { - this(false); - } - - /** - * Operations handled directly by the RequestHandler without further call to DG are built-in operations. - */ - public boolean isBuiltIn() { - return builtIn; - } - - public static VNFOperation findByString(String operationName) { - for(VNFOperation operation: VNFOperation.values()) { - if(operation.name().equals(operationName)) { - return operation; - } - } - return null; - } + Configure, Test, HealthCheck, Start, Terminate, Restart, Rebuild, Stop, ConfigModify, + ConfigScaleOut,ConfigRestore,Backup, Snapshot, + SoftwareUpload, LiveUpgrade, Rollback, Test_lic, Migrate, Evacuate,StopApplication, StartApplication, + Sync(OperationType.ReadOnly), Audit(OperationType.ReadOnly), + ConfigBackup(OperationType.ReadOnly),ConfigBackupDelete(OperationType.ReadOnly),ConfigExport(OperationType.ReadOnly), + Lock(OperationType.BuiltIn), Unlock(OperationType.BuiltIn), CheckLock(OperationType.BuiltIn); + + private OperationType operationType; + + VNFOperation(OperationType operationType){ + this.operationType=operationType; + } + + VNFOperation() { + this.operationType=OperationType.OrchestrationStatusUpdate; + } + /** + * Operations handled directly by the RequestHandler without further call to DG are built-in operations. + */ + public boolean isBuiltIn() { + return this.operationType.equals(OperationType.BuiltIn); + } + + public OperationType getOperationType() { + return operationType; + } + + public static VNFOperation findByString(String operationName) { + for(VNFOperation operation: VNFOperation.values()) { + if(operation.name().equals(operationName)) { + return operation; + } + } + return null; + } } diff --git a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java index 48091d3f3..aaa9933ed 100644 --- a/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java +++ b/appc-dispatcher/appc-request-handler/appc-request-handler-core/src/main/java/org/openecomp/appc/requesthandler/conv/Converter.java @@ -213,6 +213,16 @@ public class Converter { ((StartOutputBuilder)outObj).setCommonHeader(commonHeader); ((StartOutputBuilder)outObj).setStatus(status); return outObj; + case StopApplication: + outObj = new StopApplicationOutputBuilder(); + ((StopApplicationOutputBuilder)outObj).setCommonHeader(commonHeader); + ((StopApplicationOutputBuilder)outObj).setStatus(status); + return outObj; + case StartApplication: + outObj = new StartApplicationOutputBuilder(); + ((StartApplicationOutputBuilder)outObj).setCommonHeader(commonHeader); + ((StartApplicationOutputBuilder)outObj).setStatus(status); + return outObj; default: throw new IllegalArgumentException(action+" action is not supported"); } diff --git a/appc-provider/appc-provider-bundle/src/main/java/org/openecomp/appc/provider/AppcProviderLcm.java b/appc-provider/appc-provider-bundle/src/main/java/org/openecomp/appc/provider/AppcProviderLcm.java index 292496958..370ed5287 100644 --- a/appc-provider/appc-provider-bundle/src/main/java/org/openecomp/appc/provider/AppcProviderLcm.java +++ b/appc-provider/appc-provider-bundle/src/main/java/org/openecomp/appc/provider/AppcProviderLcm.java @@ -32,7 +32,6 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.Action; import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.AppcProviderLcmService; import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.AuditInput; import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.AuditOutput; @@ -109,8 +108,15 @@ import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.TestOutputB import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.UnlockInput; import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.UnlockOutput; import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.UnlockOutputBuilder; +import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.StartApplicationOutput; +import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.StartApplicationOutputBuilder; +import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.StartApplicationInput; +import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.StopApplicationOutput; +import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.StopApplicationOutputBuilder; +import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.StopApplicationInput; import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.status.Status; import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.status.StatusBuilder; +import org.opendaylight.yang.gen.v1.org.openecomp.appc.lcm.rev160108.Action; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.openecomp.appc.Constants; @@ -1115,6 +1121,68 @@ public class AppcProviderLcm implements AutoCloseable, AppcProviderLcmService { RpcResult result = RpcResultBuilder. status(true).withResult(outputBuilder.build()).build(); return Futures.immediateFuture(result); } + @Override + public Future> startApplication(StartApplicationInput input) { + logger.debug("Input received : " + input.toString()); + + StartApplicationOutputBuilder outputBuilder = new StartApplicationOutputBuilder(); + String action = Action.StartApplication.toString() ; + String rpcName = Action.StartApplication.name().toLowerCase(); + Status status = ValidationService.getInstance().validateInput(input.getCommonHeader(), input.getAction(), action); + if(null == status) { + try { + RequestHandlerInput request = new RequestInputBuilder().requestContext() + .commonHeader(input.getCommonHeader()) + .actionIdentifiers(input.getActionIdentifiers()) + .payload(input.getPayload()) + .action(action) + .rpcName(rpcName) + .build(); + + status = buildStatusWithDispatcherOutput(executeRequest(request)); + logger.info(String.format("Execute of '%s' finished with status %s. Reason: %s", input.getActionIdentifiers(), status.getCode(), status.getMessage())); + } catch (ParseException e) { + status = buildParsingErrorStatus(e); + + LoggingUtils.logErrorMessage( + LoggingConstants.TargetNames.APPC_PROVIDER, + String.format(COMMON_ERROR_MESSAGE_TEMPLATE, action, e.getMessage()), + this.getClass().getName()); + + } + } + outputBuilder.setCommonHeader(input.getCommonHeader()); + outputBuilder.setStatus(status); + RpcResult result = RpcResultBuilder. status(true).withResult(outputBuilder.build()).build(); + return Futures.immediateFuture(result); + } + @Override + public Future> stopApplication(StopApplicationInput input){ + logger.debug("Input received : " + input.toString()); + StopApplicationOutputBuilder outputBuilder = new StopApplicationOutputBuilder(); + String action = Action.StopApplication.toString() ; + String rpcName = Action.StopApplication.name().toLowerCase(); + Status status = ValidationService.getInstance().validateInput(input.getCommonHeader(), input.getAction(), action); + if(null == status) { + try { + RequestHandlerInput request = new RequestInputBuilder().requestContext().commonHeader(input.getCommonHeader()).actionIdentifiers(input.getActionIdentifiers()).action(action).rpcName(rpcName).build(); + status = buildStatusWithDispatcherOutput(executeRequest(request)); + logger.info(String.format("Execute of '%s' finished with status %s. Reason: %s", input.getActionIdentifiers(), status.getCode(), status.getMessage())); + } catch (ParseException e) { + status = buildParsingErrorStatus(e); + + LoggingUtils.logErrorMessage( + LoggingConstants.TargetNames.APPC_PROVIDER, + String.format(COMMON_ERROR_MESSAGE_TEMPLATE, action, e.getMessage()), + this.getClass().getName()); + + } + } + outputBuilder.setCommonHeader(input.getCommonHeader()); + outputBuilder.setStatus(status); + RpcResult result = RpcResultBuilder. status(true).withResult(outputBuilder.build()).build(); + return Futures.immediateFuture(result); + } private String convertActionNameToUrl(String action) { String regex = "([a-z])([A-Z]+)"; diff --git a/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang b/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang index d72b551a8..d46ba8cb4 100644 --- a/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang +++ b/appc-provider/appc-provider-model/src/main/yang/appc-provider-lcm.yang @@ -110,6 +110,8 @@ module appc-provider-lcm { enum "ConfigBackup"; enum "ConfigBackupDelete"; enum "ConfigExport"; + enum "StopApplication"; + enum "StartApplication"; } description "The action to be taken by APP-C, e.g. Restart, Rebuild, Migrate"; } @@ -922,8 +924,46 @@ module appc-provider-lcm { uses common-header; uses status; } - } - + } + rpc stop-application { + description "An operation to Stop Application traffic to a virtual network function"; + input { + uses common-header; + leaf action { + type action; + mandatory true; + } + uses action-identifiers; + leaf payload { + type payload; + mandatory false; + } + } + output { + uses common-header; + uses status; + } + } + + rpc start-application { + description "An operation to Start Application traffic to a virtual network function"; + input { + uses common-header; + leaf action { + type action; + mandatory true; + } + uses action-identifiers; + leaf payload { + type payload; + mandatory false; + } + } + output { + uses common-header; + uses status; + } + } /********************************************************************************** * Additional RPCs added here... **********************************************************************************/ -- 2.16.6