From dacd4a5fb73644c3510251774a1f354a5d42ffd2 Mon Sep 17 00:00:00 2001 From: Arthur Martella Date: Tue, 26 Sep 2017 00:06:34 -0400 Subject: [PATCH] HeatBridge integration with Orchestration, part 1 Adding Heatbridge python code and call into SO. Still needs configuration to be complete. Change-Id: I4869217699d857e27579decce91e9c542ce7a449 Issue-ID: SO-1 Signed-off-by: Arthur Martella --- .../mso/adapters/vnf/MsoVnfAdapterImpl.java | 45 +++++++++++++++++++++ .../docker/docker-files/Dockerfile.mso-chef-final | 6 +++ .../heatbridge-0.3.0.dev0-py2-none-any.whl | Bin 0 -> 7382 bytes 3 files changed, 51 insertions(+) create mode 100644 packages/docker/src/main/docker/docker-files/heatbridge/heatbridge-0.3.0.dev0-py2-none-any.whl diff --git a/adapters/mso-vnf-adapter/src/main/java/org/openecomp/mso/adapters/vnf/MsoVnfAdapterImpl.java b/adapters/mso-vnf-adapter/src/main/java/org/openecomp/mso/adapters/vnf/MsoVnfAdapterImpl.java index c8c036d58a..cba378eab0 100644 --- a/adapters/mso-vnf-adapter/src/main/java/org/openecomp/mso/adapters/vnf/MsoVnfAdapterImpl.java +++ b/adapters/mso-vnf-adapter/src/main/java/org/openecomp/mso/adapters/vnf/MsoVnfAdapterImpl.java @@ -22,10 +22,17 @@ package org.openecomp.mso.adapters.vnf; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; + +import java.util.Arrays; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -540,6 +547,41 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { return string; } + private boolean callHeatbridge(String heatStackId) { + String executionDir = "/usr/local/lib/python2.7/dist-packages/heatbridge"; + String openstackIdentityUrl = "", username = "", password = "", tenant = "", region = "", owner = ""; + long waitTimeMs = 10000l; + try { + String[] cmdarray = {"/usr/bin/python", "HeatBridgeMain.py", openstackIdentityUrl, username, password, tenant, region, owner, heatStackId}; + String[] envp = null; + File dir = new File(executionDir); + LOGGER.debug("Calling HeatBridgeMain.py in " + dir + " with arguments " + Arrays.toString(cmdarray)); + Runtime r = Runtime.getRuntime(); + Process p = r.exec(cmdarray, envp, dir); + /* + BufferedReader stdout = new BufferedReader(new InputStreamReader(p.getInputStream())); + String linein = stdout.readLine(); + while (linein!=null) { + System.out.println(linein); + linein = stdout.readLine(); + } + */ + boolean wait = p.waitFor(waitTimeMs, TimeUnit.MILLISECONDS); + + LOGGER.debug(" HeatBridgeMain.py returned " + wait + " with code " + p.exitValue()); + return (wait && p.exitValue()==0); + } catch (IOException e) { + LOGGER.debug(" HeatBridgeMain.py failed with IO Exception! " + e); + return false; + } catch (InterruptedException e) { + LOGGER.debug(" HeatBridgeMain.py failed when interrupted! " + e); + return false; + } catch (RuntimeException e) { + LOGGER.debug(" HeatBridgeMain.py failed for unknown reasons!" + e); + return false; + } + } + private void sendMapToDebug(Map inputs, String optionalName) { int i = 0; StringBuilder sb = new StringBuilder(optionalName == null ? "\ninputs" : "\n" + optionalName); @@ -731,6 +773,9 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter { vfRollback.setIsBase(isBaseRequest); vfRollback.setModelCustomizationUuid(mcu); + // Put data into A&AI through Heatstack + boolean heatStackCallSuccess = callHeatbridge(baseVfHeatStackId); + // First, look up to see if the VF already exists. MsoHeatUtils heat = new MsoHeatUtils (MSO_PROP_VNF_ADAPTER, msoPropertiesFactory,cloudConfigFactory); diff --git a/packages/docker/src/main/docker/docker-files/Dockerfile.mso-chef-final b/packages/docker/src/main/docker/docker-files/Dockerfile.mso-chef-final index 2e227bef0d..8238923139 100644 --- a/packages/docker/src/main/docker/docker-files/Dockerfile.mso-chef-final +++ b/packages/docker/src/main/docker/docker-files/Dockerfile.mso-chef-final @@ -81,6 +81,12 @@ COPY ./maven/artifacts/* $JBOSS_HOME/standalone/deployments/ RUN mkdir -p /etc/mso/config.d/ASDC && chown -R jboss:jboss /etc/mso/config.d/ASDC && chmod u+xrw /etc/mso/config.d/ASDC +## Install heatbridge +RUN apt-get install -y python && apt-get install -y python-pip && echo 'PIP Installed, doing upgrade' && pip install --upgrade pip +RUN mkdir /opt/mso/heatbridge +COPY heatbridge/heatbridge-0.3.0.dev0-py2-none-any.whl /opt/mso/heatbridge +RUN pip install /opt/mso/heatbridge/heatbridge-0.3.0.dev0-py2-none-any.whl + ### Open Ports EXPOSE 8080 diff --git a/packages/docker/src/main/docker/docker-files/heatbridge/heatbridge-0.3.0.dev0-py2-none-any.whl b/packages/docker/src/main/docker/docker-files/heatbridge/heatbridge-0.3.0.dev0-py2-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..357a669c1a75b538c63cb6e0bee57fd15be903a6 GIT binary patch literal 7382 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