diff options
Diffstat (limited to 'bpmn/MSOCommonBPMN/src/main')
2 files changed, 226 insertions, 187 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerAction.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerAction.java index 44da566ec7..713e25abf0 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerAction.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerAction.java @@ -18,160 +18,160 @@ * ============LICENSE_END========================================================= */ -package org.openecomp.mso.client.appc;
-
-import java.util.HashMap;
-import java.util.List;
-
-import org.openecomp.mso.client.appc.ApplicationControllerSupport.StatusCategory;
-import org.openecomp.mso.bpmn.appc.payload.PayloadClient;
-import org.openecomp.mso.bpmn.core.json.JsonUtils;
-import org.openecomp.mso.client.appc.ApplicationControllerOrchestrator;
-import java.util.Optional;
-import org.onap.appc.client.lcm.model.Action;
-import org.onap.appc.client.lcm.model.Status;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.att.eelf.configuration.EELFLogger.Level;
-import java.lang.NoSuchMethodError;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-
-public class ApplicationControllerAction {
- protected ApplicationControllerOrchestrator client = new ApplicationControllerOrchestrator();
- private String errorCode = "1002";
- private String errorMessage = "Unable to reach App C Servers";
- protected final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
-
- public void runAppCCommand(Action action, String msoRequestId, String vnfId, Optional<String> payload, HashMap<String, String> payloadInfo, String controllerType){ Status appCStatus = null;
- try{
- String vnfName = payloadInfo.getOrDefault("vnfName", "");
- String aicIdentity = payloadInfo.getOrDefault("vnfName","");
- String vnfHostIpAddress = payloadInfo.getOrDefault("vnfHostIpAddress","");
- String vmIdList = payloadInfo.getOrDefault("vmIdList", "");
- String identityUrl = payloadInfo.getOrDefault("identityUrl", "");
- switch(action){
- case ResumeTraffic:
- appCStatus = resumeTrafficAction(msoRequestId, vnfId, vnfName, controllerType);
- break;
- case Start:
- case Stop:
- appCStatus = startStopAction(action, msoRequestId, vnfId, aicIdentity, controllerType);
- break;
- case Unlock:
- case Lock:
- appCStatus = client.vnfCommand(action, msoRequestId, vnfId, Optional.empty(), controllerType);
- break;
- case QuiesceTraffic:
- appCStatus = quiesceTrafficAction(msoRequestId, vnfId, payload, vnfName, controllerType);
- break;
- case HealthCheck:
- appCStatus = healthCheckAction(msoRequestId, vnfId, vnfName, vnfHostIpAddress, controllerType);
- break;
- case Snapshot:
- String vmIds = JsonUtils.getJsonValue(vmIdList, "vmIds");
- String vmId = "";
- ObjectMapper mapper = new ObjectMapper();
- List<String> vmIdJsonList = mapper.readValue(vmIds, new TypeReference<List<String>>(){});
- int i = 0;
- while(i < vmIdJsonList.size()){
- vmId = vmIdJsonList.get(i);
- appCStatus = snapshotAction(msoRequestId, vnfId, vmId, identityUrl, controllerType);
- i++;
- }
- break;
- case ConfigModify:
- appCStatus = payloadAction(action, msoRequestId, vnfId, payload, controllerType);
- break;
- case UpgradePreCheck:
- case UpgradePostCheck:
- case UpgradeSoftware:
- case UpgradeBackup:
- appCStatus = upgradeAction(action,msoRequestId, vnfId, payload, vnfName, controllerType);
- break;
- default:
- errorMessage = "Unable to idenify Action request for AppCClient";
- break;
- }
- if(appCStatus != null){
- errorCode = Integer.toString(appCStatus.getCode());
- errorMessage = appCStatus.getMessage();
-
- }
- if(ApplicationControllerSupport.getCategoryOf(appCStatus).equals(StatusCategory.NORMAL)){
- errorCode = "0";
- }
- }
- catch(JsonProcessingException e){
- auditLogger.log(Level.ERROR, "Incorrect Payload format for action request" + action.toString(),e, e.getMessage());
- errorMessage = e.getMessage();
- }
- catch(ApplicationControllerOrchestratorException e){
- auditLogger.log(Level.ERROR, "Error building Appc request: ", e, e.getMessage());
- errorCode = "1002";
- errorMessage = e.getMessage();
- }
- catch (NoSuchMethodError e) {
- auditLogger.log(Level.ERROR, "Error building Appc request: ", e, e.getMessage());
- errorMessage = e.getMessage();
- }
- catch(Exception e){
- auditLogger.log(Level.ERROR, "Error building Appc request: ", e, e.getMessage());
- errorMessage = e.getMessage();
- }
- }
-
- private Status payloadAction(Action action, String msoRequestId, String vnfId, Optional<String> payload, String controllerType) throws JsonProcessingException, Exception{
- if(!(payload.isPresent())){
- throw new IllegalArgumentException("Payload is not present for " + action.toString());
- }
- return client.vnfCommand(action, msoRequestId, vnfId, payload, controllerType);
- }
-
- private Status quiesceTrafficAction(String msoRequestId, String vnfId, Optional<String> payload, String vnfName, String controllerType) throws JsonProcessingException, Exception{
- if(!(payload.isPresent())){
- throw new IllegalArgumentException("Payload is not present for " + Action.QuiesceTraffic.toString());
- }
- payload = PayloadClient.quiesceTrafficFormat(payload, vnfName);
- return client.vnfCommand(Action.QuiesceTraffic, msoRequestId, vnfId, payload, controllerType);
- }
-
- private Status upgradeAction(Action action, String msoRequestId, String vnfId, Optional<String> payload, String vnfName, String controllerType) throws JsonProcessingException, Exception{
- if(!(payload.isPresent())){
- throw new IllegalArgumentException("Payload is not present for " + action.toString());
- }
- payload = PayloadClient.upgradeFormat(payload, vnfName);
- return client.vnfCommand(action, msoRequestId, vnfId, payload, controllerType);
- }
-
- private Status resumeTrafficAction(String msoRequestId, String vnfId, String vnfName, String controllerType)throws JsonProcessingException, Exception{
- Optional<String> payload = PayloadClient.resumeTrafficFormat(vnfName);
- return client.vnfCommand(Action.ResumeTraffic, msoRequestId, vnfId, payload, controllerType);
- }
-
- private Status startStopAction(Action action, String msoRequestId, String vnfId, String aicIdentity, String controllerType)throws JsonProcessingException, Exception{
- Optional<String> payload = PayloadClient.startStopFormat(aicIdentity);
- return client.vnfCommand(action, msoRequestId, vnfId, payload, controllerType);
- }
-
- private Status healthCheckAction(String msoRequestId, String vnfId, String vnfName, String vnfHostIpAddress, String controllerType)throws JsonProcessingException, Exception{
- Optional<String> payload = PayloadClient.healthCheckFormat(vnfName, vnfHostIpAddress);
- return client.vnfCommand(Action.HealthCheck, msoRequestId, vnfId, payload, controllerType);
- }
-
- private Status snapshotAction(String msoRequestId, String vnfId, String vmId, String identityUrl, String controllerType) throws JsonProcessingException, Exception{
- Optional<String> payload = PayloadClient.snapshotFormat(vmId, identityUrl);
- return client.vnfCommand(Action.Snapshot, msoRequestId, vnfId, payload, controllerType);
- }
-
- public String getErrorMessage(){
- return errorMessage;
- }
-
- public String getErrorCode(){
- return errorCode;
- }
-}
+package org.openecomp.mso.client.appc; + +import java.util.HashMap; +import java.util.List; + +import org.openecomp.mso.client.appc.ApplicationControllerSupport.StatusCategory; +import org.openecomp.mso.bpmn.appc.payload.PayloadClient; +import org.openecomp.mso.bpmn.core.json.JsonUtils; +import org.openecomp.mso.client.appc.ApplicationControllerOrchestrator; +import java.util.Optional; +import org.onap.appc.client.lcm.model.Action; +import org.onap.appc.client.lcm.model.Status; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import com.att.eelf.configuration.EELFLogger.Level; +import java.lang.NoSuchMethodError; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + + +public class ApplicationControllerAction { + protected ApplicationControllerOrchestrator client = new ApplicationControllerOrchestrator(); + private String errorCode = "1002"; + private String errorMessage = "Unable to reach App C Servers"; + protected final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + + public void runAppCCommand(Action action, String msoRequestId, String vnfId, Optional<String> payload, HashMap<String, String> payloadInfo, String controllerType){ Status appCStatus = null; + try{ + String vnfName = payloadInfo.getOrDefault("vnfName", ""); + String aicIdentity = payloadInfo.getOrDefault("vnfName",""); + String vnfHostIpAddress = payloadInfo.getOrDefault("vnfHostIpAddress",""); + String vmIdList = payloadInfo.getOrDefault("vmIdList", ""); + String identityUrl = payloadInfo.getOrDefault("identityUrl", ""); + switch(action){ + case ResumeTraffic: + appCStatus = resumeTrafficAction(msoRequestId, vnfId, vnfName, controllerType); + break; + case Start: + case Stop: + appCStatus = startStopAction(action, msoRequestId, vnfId, aicIdentity, controllerType); + break; + case Unlock: + case Lock: + appCStatus = client.vnfCommand(action, msoRequestId, vnfId, Optional.empty(), controllerType); + break; + case QuiesceTraffic: + appCStatus = quiesceTrafficAction(msoRequestId, vnfId, payload, vnfName, controllerType); + break; + case HealthCheck: + appCStatus = healthCheckAction(msoRequestId, vnfId, vnfName, vnfHostIpAddress, controllerType); + break; + case Snapshot: + String vmIds = JsonUtils.getJsonValue(vmIdList, "vmIds"); + String vmId = ""; + ObjectMapper mapper = new ObjectMapper(); + List<String> vmIdJsonList = mapper.readValue(vmIds, new TypeReference<List<String>>(){}); + int i = 0; + while(i < vmIdJsonList.size()){ + vmId = vmIdJsonList.get(i); + appCStatus = snapshotAction(msoRequestId, vnfId, vmId, identityUrl, controllerType); + i++; + } + break; + case ConfigModify: + appCStatus = payloadAction(action, msoRequestId, vnfId, payload, controllerType); + break; + case UpgradePreCheck: + case UpgradePostCheck: + case UpgradeSoftware: + case UpgradeBackup: + appCStatus = upgradeAction(action,msoRequestId, vnfId, payload, vnfName, controllerType); + break; + default: + errorMessage = "Unable to idenify Action request for AppCClient"; + break; + } + if(appCStatus != null){ + errorCode = Integer.toString(appCStatus.getCode()); + errorMessage = appCStatus.getMessage(); + + } + if(ApplicationControllerSupport.getCategoryOf(appCStatus).equals(StatusCategory.NORMAL)){ + errorCode = "0"; + } + } + catch(JsonProcessingException e){ + auditLogger.log(Level.ERROR, "Incorrect Payload format for action request" + action.toString(),e, e.getMessage()); + errorMessage = e.getMessage(); + } + catch(ApplicationControllerOrchestratorException e){ + auditLogger.log(Level.ERROR, "Error building Appc request: ", e, e.getMessage()); + errorCode = "1002"; + errorMessage = e.getMessage(); + } + catch (NoSuchMethodError e) { + auditLogger.log(Level.ERROR, "Error building Appc request: ", e, e.getMessage()); + errorMessage = e.getMessage(); + } + catch(Exception e){ + auditLogger.log(Level.ERROR, "Error building Appc request: ", e, e.getMessage()); + errorMessage = e.getMessage(); + } + } + + private Status payloadAction(Action action, String msoRequestId, String vnfId, Optional<String> payload, String controllerType) throws JsonProcessingException, IllegalArgumentException,ApplicationControllerOrchestratorException{ + if(!(payload.isPresent())){ + throw new IllegalArgumentException("Payload is not present for " + action.toString()); + } + return client.vnfCommand(action, msoRequestId, vnfId, payload, controllerType); + } + + private Status quiesceTrafficAction(String msoRequestId, String vnfId, Optional<String> payload, String vnfName, String controllerType) throws JsonProcessingException, IllegalArgumentException,ApplicationControllerOrchestratorException{ + if(!(payload.isPresent())){ + throw new IllegalArgumentException("Payload is not present for " + Action.QuiesceTraffic.toString()); + } + payload = PayloadClient.quiesceTrafficFormat(payload, vnfName); + return client.vnfCommand(Action.QuiesceTraffic, msoRequestId, vnfId, payload, controllerType); + } + + private Status upgradeAction(Action action, String msoRequestId, String vnfId, Optional<String> payload, String vnfName, String controllerType) throws JsonProcessingException, IllegalArgumentException,ApplicationControllerOrchestratorException{ + if(!(payload.isPresent())){ + throw new IllegalArgumentException("Payload is not present for " + action.toString()); + } + payload = PayloadClient.upgradeFormat(payload, vnfName); + return client.vnfCommand(action, msoRequestId, vnfId, payload, controllerType); + } + + private Status resumeTrafficAction(String msoRequestId, String vnfId, String vnfName, String controllerType)throws JsonProcessingException, ApplicationControllerOrchestratorException{ + Optional<String> payload = PayloadClient.resumeTrafficFormat(vnfName); + return client.vnfCommand(Action.ResumeTraffic, msoRequestId, vnfId, payload, controllerType); + } + + private Status startStopAction(Action action, String msoRequestId, String vnfId, String aicIdentity, String controllerType)throws JsonProcessingException, ApplicationControllerOrchestratorException{ + Optional<String> payload = PayloadClient.startStopFormat(aicIdentity); + return client.vnfCommand(action, msoRequestId, vnfId, payload, controllerType); + } + + private Status healthCheckAction(String msoRequestId, String vnfId, String vnfName, String vnfHostIpAddress, String controllerType)throws JsonProcessingException, ApplicationControllerOrchestratorException{ + Optional<String> payload = PayloadClient.healthCheckFormat(vnfName, vnfHostIpAddress); + return client.vnfCommand(Action.HealthCheck, msoRequestId, vnfId, payload, controllerType); + } + + private Status snapshotAction(String msoRequestId, String vnfId, String vmId, String identityUrl, String controllerType) throws JsonProcessingException, ApplicationControllerOrchestratorException{ + Optional<String> payload = PayloadClient.snapshotFormat(vmId, identityUrl); + return client.vnfCommand(Action.Snapshot, msoRequestId, vnfId, payload, controllerType); + } + + public String getErrorMessage(){ + return errorMessage; + } + + public String getErrorCode(){ + return errorCode; + } +} diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java index 8c57b9255c..3cd26be631 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerClient.java @@ -26,9 +26,7 @@ import java.time.Instant; import java.util.Map; import java.util.Properties; import java.util.UUID; - -import org.openecomp.mso.bpmn.core.PropertyConfiguration; -import org.springframework.beans.factory.annotation.Autowired; +import java.util.concurrent.ConcurrentHashMap; import org.onap.appc.client.lcm.api.AppcClientServiceFactoryProvider; import org.onap.appc.client.lcm.api.AppcLifeCycleManagerServiceFactory; @@ -44,11 +42,16 @@ import org.onap.appc.client.lcm.model.Flags.Mode; import org.onap.appc.client.lcm.model.Payload; import org.onap.appc.client.lcm.model.Status; import org.onap.appc.client.lcm.model.ZULU; +import org.openecomp.mso.bpmn.core.PropertyConfiguration; +import org.springframework.beans.factory.annotation.Autowired; + import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFLogger.Level; import com.att.eelf.configuration.EELFManager; public class ApplicationControllerClient { + + public static final String DEFAULT_CONTROLLER_TYPE = "appc"; private static final String CLIENT_NAME = "MSO"; @@ -60,18 +63,68 @@ public class ApplicationControllerClient { @Autowired public ApplicationControllerSupport appCSupport; - private static LifeCycleManagerStateful client; + // APPC gave us an API where the controllerType is configured in the + // client object, which is not what we asked for. We asked for an API + // in which the client would have additional methods that could take + // the controllerType as a parameter, so that we would not need to + // maintain multiple client objects. This map should be removed when + // the (hopefully short-term) controllerType becomes obsolete. + + private final String controllerType; + + private static ConcurrentHashMap<String, LifeCycleManagerStateful> appCClients = new ConcurrentHashMap<>(); + /** + * Creates an ApplicationControllerClient for communication with APP-C. + */ + public ApplicationControllerClient() { + this(DEFAULT_CONTROLLER_TYPE); + } + + /** + * Creates an ApplicationControllerClient for the specified controller type. + * @param controllerType the controller type: "appc" or "sndnc". + */ public ApplicationControllerClient(String controllerType) { + this.controllerType = controllerType; appCSupport = new ApplicationControllerSupport(); - client = this.getAppCClient(controllerType); + } + + /** + * Gets the controller type. + * @return the controllertype + */ + public String getControllerType() { + return controllerType; } - public Status runCommand(Action action, org.onap.appc.client.lcm.model.ActionIdentifiers actionIdentifiers, org.onap.appc.client.lcm.model.Payload payload, String requestID) + /** + * Returns the AppC client object associated with this ApplicationControllerClient. + * AppC client objects are shared objects. One is created if it does not exist. + * @return the client object, or null if creation failed + */ + public LifeCycleManagerStateful getAppCClient() { + return appCClients.computeIfAbsent(controllerType, k -> createAppCClient(k)); + } + + protected LifeCycleManagerStateful createAppCClient(String controllerType) { + try { + return AppcClientServiceFactoryProvider.getFactory(AppcLifeCycleManagerServiceFactory.class) + .createLifeCycleManagerStateful(new ApplicationContext(), getLCMProperties()); + } catch (AppcClientException e) { + auditLogger.log(Level.ERROR, "Error in getting LifeCycleManagerStateful: ", e, e.getMessage()); + // This null value will cause NullPointerException when used later. + // Error handling could certainly be improved here. + return null; + } + } + + public Status runCommand(Action action, org.onap.appc.client.lcm.model.ActionIdentifiers actionIdentifiers, + org.onap.appc.client.lcm.model.Payload payload, String requestID) throws ApplicationControllerOrchestratorException { - Object requestObject; - requestObject = createRequest(action, actionIdentifiers, payload, requestID); + Object requestObject = createRequest(action, actionIdentifiers, payload, requestID); appCSupport.logLCMMessage(requestObject); + LifeCycleManagerStateful client = getAppCClient(); Method lcmMethod = appCSupport.getAPIMethod(action.name(), client, false); try { Object response = lcmMethod.invoke(client, requestObject); @@ -81,35 +134,21 @@ public class ApplicationControllerClient { } } - public LifeCycleManagerStateful getAppCClient(String controllerType) { - if (client == null) - try { - client = AppcClientServiceFactoryProvider.getFactory(AppcLifeCycleManagerServiceFactory.class) - .createLifeCycleManagerStateful(new ApplicationContext(), getLCMProperties(controllerType)); - } catch (AppcClientException e) { - auditLogger.log(Level.ERROR, "Error in getting LifeCycleManagerStateful: ", e, e.getMessage()); - } - return client; - } - - protected Properties getLCMProperties(String controllerType) { + protected Properties getLCMProperties() { Properties properties = new Properties(); Map<String, String> globalProperties = PropertyConfiguration.getInstance() .getProperties("mso.bpmn.urn.properties"); - String controllerTypeValue = controllerType; - if (controllerType == null) { - controllerTypeValue = ""; - } - properties.put("topic.read", globalProperties.get("appc.topic.read")); - properties.put("topic.read.timeout", globalProperties.get("appc.topic.read.timeout")); + properties.put("topic.read", globalProperties.get("appc.client.topic.read")); + properties.put("topic.write", globalProperties.get("appc.client.topic.write")); + properties.put("topic.sdnc.read", globalProperties.get("appc.client.topic.sdnc.read")); + properties.put("topic.sdnc.write", globalProperties.get("appc.client.topic.sdnc.write")); + properties.put("topic.read.timeout", globalProperties.get("appc.client.topic.read.timeout")); properties.put("client.response.timeout", globalProperties.get("appc.client.response.timeout")); - properties.put("topic.write", globalProperties.get("appc.topic.write")); - properties.put("poolMembers", globalProperties.get("appc.poolMembers")); - properties.put("client.controllerType", controllerTypeValue); + properties.put("poolMembers", globalProperties.get("appc.client.poolMembers")); properties.put("client.key", globalProperties.get("appc.client.key")); properties.put("client.secret", globalProperties.get("appc.client.secret")); properties.put("client.name", CLIENT_NAME); - properties.put("service", globalProperties.get("appc.service")); + properties.put("service", globalProperties.get("appc.client.service")); return properties; } |