aboutsummaryrefslogtreecommitdiffstats
path: root/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoCommonUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoCommonUtils.java')
-rw-r--r--adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoCommonUtils.java131
1 files changed, 118 insertions, 13 deletions
diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoCommonUtils.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoCommonUtils.java
index 98793601d0..da81da91ea 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoCommonUtils.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoCommonUtils.java
@@ -2,14 +2,15 @@
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
+ * Copyright (C) 2018 Intel Corp. All rights reserved.
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* 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.
@@ -22,6 +23,9 @@ package org.onap.so.openstack.utils;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
import org.onap.so.config.beans.PoConfig;
import org.onap.so.logger.MessageEnum;
@@ -35,10 +39,13 @@ import org.onap.so.openstack.exceptions.MsoOpenstackException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.woorea.openstack.base.client.OpenStackBaseException;
import com.woorea.openstack.base.client.OpenStackConnectException;
import com.woorea.openstack.base.client.OpenStackRequest;
import com.woorea.openstack.base.client.OpenStackResponseException;
+import com.woorea.openstack.heat.model.CreateStackParam;
import com.woorea.openstack.heat.model.Explanation;
import com.woorea.openstack.keystone.model.Error;
import com.woorea.openstack.quantum.model.NeutronError;
@@ -57,11 +64,11 @@ public class MsoCommonUtils {
* sub-category that identifies the specific call (using the real
* openstack-java-sdk classname of the OpenStackRequest<T> parameter).
*/
-
+
protected <T> T executeAndRecordOpenstackRequest (OpenStackRequest <T> request) {
-
+
int limit;
-
+
long start = System.currentTimeMillis ();
String requestType;
if (request.getClass ().getEnclosingClass () != null) {
@@ -70,17 +77,17 @@ public class MsoCommonUtils {
} else {
requestType = request.getClass ().getSimpleName ();
}
-
+
int retryDelay = poConfig.getRetryDelay();
int retryCount = poConfig.getRetryCount();
String retryCodes = poConfig.getRetryCodes();
-
+
// Run the actual command. All exceptions will be propagated
while (true)
{
try {
return request.execute ();
- }
+ }
catch (OpenStackResponseException e) {
boolean retry = false;
if (retryCodes != null ) {
@@ -128,11 +135,11 @@ public class MsoCommonUtils {
}
else
throw e;
-
+
}
}
}
-
+
/*
* Convert an Openstack Exception on a Keystone call to an MsoException.
* This method supports both OpenstackResponseException and OpenStackConnectException.
@@ -281,7 +288,7 @@ public class MsoCommonUtils {
return me;
}
-
+
protected MsoException ioExceptionToMsoException(IOException e, String context) {
MsoAdapterException me = new MsoAdapterException (e.getMessage (), e);
me.addContext (context);
@@ -297,7 +304,105 @@ public class MsoCommonUtils {
public boolean isNullOrEmpty (String s) {
return s == null || s.isEmpty();
}
-
-
+
+
+ protected CreateStackParam createStackParam(String stackName,
+ String heatTemplate,
+ Map <String, ?> stackInputs,
+ int timeoutMinutes,
+ String environment,
+ Map <String, Object> files,
+ Map <String, Object> heatFiles) {
+
+ // Create local variables checking to see if we have an environment, nested, get_files
+ // Could later add some checks to see if it's valid.
+ boolean haveEnvtVariable = true;
+ if (environment == null || "".equalsIgnoreCase (environment.trim ())) {
+ haveEnvtVariable = false;
+ logger.debug ("createStackParam called with no environment variable");
+ } else {
+ logger.debug ("createStackParam called with an environment variable: " + environment);
+ }
+
+ boolean haveFiles = true;
+ if (files == null || files.isEmpty ()) {
+ haveFiles = false;
+ logger.debug ("createStackParam called with no files / child template ids");
+ } else {
+ logger.debug ("createStackParam called with " + files.size () + " files / child template ids");
+ }
+
+ boolean haveHeatFiles = true;
+ if (heatFiles == null || heatFiles.isEmpty ()) {
+ haveHeatFiles = false;
+ logger.debug ("createStackParam called with no heatFiles");
+ } else {
+ logger.debug ("createStackParam called with " + heatFiles.size () + " heatFiles");
+ }
+
+ //force entire stackInput object to generic Map<String, Object> for openstack compatibility
+ ObjectMapper mapper = new ObjectMapper();
+ Map<String, Object> normalized = new HashMap<>();
+ try {
+ normalized = mapper.readValue(mapper.writeValueAsString(stackInputs), new TypeReference<HashMap<String,Object>>() {});
+ } catch (IOException e1) {
+ logger.debug("could not map json", e1);
+ }
+
+ // Build up the stack to create
+ // Disable auto-rollback, because error reason is lost. Always rollback in the code.
+ CreateStackParam stack = new CreateStackParam ();
+ stack.setStackName (stackName);
+ stack.setTimeoutMinutes (timeoutMinutes);
+ stack.setParameters (normalized);
+ stack.setTemplate (heatTemplate);
+ stack.setDisableRollback (true);
+ // TJM New for PO Adapter - add envt variable
+ if (haveEnvtVariable) {
+ logger.debug ("Found an environment variable - value: " + environment);
+ stack.setEnvironment (environment);
+ }
+ // Now handle nested templates or get_files - have to combine if we have both
+ // as they're both treated as "files:" on the stack.
+ if (haveFiles && haveHeatFiles) {
+ // Let's do this here - not in the bean
+ logger.debug ("Found files AND heatFiles - combine and add!");
+ Map <String, Object> combinedFiles = new HashMap <> ();
+ for (Entry<String, Object> entry : files.entrySet()) {
+ combinedFiles.put(entry.getKey(), entry.getValue());
+ }
+ for (Entry<String, Object> entry : heatFiles.entrySet()) {
+ combinedFiles.put(entry.getKey(), entry.getValue());
+ }
+ stack.setFiles (combinedFiles);
+ } else {
+ // Handle if we only have one or neither:
+ if (haveFiles) {
+ logger.debug ("Found files - adding to stack");
+ stack.setFiles (files);
+ }
+ if (haveHeatFiles) {
+ logger.debug ("Found heatFiles - adding to stack");
+ // the setFiles was modified to handle adding the entries
+ stack.setFiles (heatFiles);
+ }
+ }
+
+ // 1802 - attempt to add better formatted printout of request to openstack
+ try {
+ Map<String, Object> inputs = new HashMap<>();
+ for (Entry<String, ?> entry : stackInputs.entrySet()) {
+ if (entry.getValue() != null) {
+ inputs.put(entry.getKey(), entry.getValue());
+ }
+ }
+ logger.debug("stack request:" + stack.toString());
+ } catch (Exception e) {
+ // that's okay - this is a nice-to-have
+ logger.debug("(had an issue printing nicely formatted request to debuglog) " + e.getMessage());
+ }
+
+ return stack;
+ }
}