aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--deployment/zip/src/main/release/bin/oclip-grpc-server.cmd39
-rw-r--r--deployment/zip/src/main/release/bin/oclip-grpc-server.sh2
-rw-r--r--deployment/zip/src/main/release/bin/oclip.cmd39
-rwxr-xr-xdeployment/zip/src/main/release/bin/oclip.sh2
-rw-r--r--deployment/zip/src/main/release/conf/open-cli.properties2
-rw-r--r--framework/src/main/java/org/onap/cli/fw/store/OnapCommandExecutionStore.java37
-rw-r--r--framework/src/main/java/org/onap/cli/fw/utils/ProcessRunner.java75
-rw-r--r--framework/src/test/java/org/onap/cli/fw/utils/ProcessRunnerTest.java2
-rw-r--r--framework/src/test/resources/open-cli.properties49
-rw-r--r--main/src/main/java/org/onap/cli/main/OnapCli.java2
-rw-r--r--products/onap-dublin/features/integration/src/main/resources/conf/vnf-tosca-provision.json10
-rw-r--r--products/onap-dublin/features/integration/src/main/resources/open-cli-schema/vnf-tosca-provision-dublin-schema.yaml83
-rw-r--r--products/onap-dublin/features/integration/src/main/resources/script/vnf-tosca-provision.py41
-rw-r--r--products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-moco.json24
-rw-r--r--products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-sample.yaml10
-rw-r--r--products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-commit-schema-dublin.yaml56
-rw-r--r--products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-create-schema-dublin.yaml2
-rw-r--r--products/onap-dublin/features/vfc/src/main/resources/open-cli-schema/nslcm/vfc-nslcm-create-schema.yaml2
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-associate-schema-elalto.yaml61
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-create-schema-elalto.yaml149
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-delete-schema-elalto.yaml46
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-list-schema-elalto.yaml123
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-update-schema-elalto.yaml156
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-create-schema-elalto.yaml60
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-delete-schema-elalto.yaml59
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-list-schema-elalto.yaml65
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-delete-schema-elalto.yaml46
-rw-r--r--products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-list-schema-elalto.yaml93
-rw-r--r--profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java4
30 files changed, 1268 insertions, 73 deletions
diff --git a/.gitignore b/.gitignore
index a0332538..bdf19c11 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,10 @@
-bin/
target/
coverage-report/
data/
build/
dist/
ocomp.egg-info/
+.pydevproject
.project
.settings
.classpath
diff --git a/deployment/zip/src/main/release/bin/oclip-grpc-server.cmd b/deployment/zip/src/main/release/bin/oclip-grpc-server.cmd
new file mode 100644
index 00000000..239e777e
--- /dev/null
+++ b/deployment/zip/src/main/release/bin/oclip-grpc-server.cmd
@@ -0,0 +1,39 @@
+@echo off
+REM #*******************************************************************************
+REM # Copyright 2017 Huawei Technologies Co., Ltd.
+REM #
+REM # Licensed under the Apache License, Version 2.0 (the "License");
+REM # you may not use this file except in compliance with the License.
+REM # You may obtain a copy of the License at
+REM #
+REM # http://www.apache.org/licenses/LICENSE-2.0
+REM #
+REM # Unless required by applicable law or agreed to in writing, software
+REM # distributed under the License is distributed on an "AS IS" BASIS,
+REM # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM # See the License for the specific language governing permissions and
+REM # limitations under the License.
+REM #*******************************************************************************
+
+if "%OPEN_CLI_HOME%"=="" (
+ echo "OPEN_CLI_HOME is not set."
+ exit 1
+)
+
+if "%OPEN_CLI_DEBUG_PORT%"=="" (
+ set OPEN_CLI_DEBUG_PORT=5005
+)
+
+set CLASSPATH=%OPEN_CLI_HOME%\conf;%OPEN_CLI_HOME%\docs;%OPEN_CLI_HOME%;%OPEN_CLI_HOME%\lib\*
+set PATH=%OPEN_CLI_HOME%\bin;%PATH%
+
+::SETLOCAL EnableDelayedExpansion
+::for /f %%e in ('dir /b %OPEN_CLI_HOME%\lib') do (
+:: set "CLASSPATH=!CLASSPATH!;%OPEN_CLI_HOME%\lib\%%e"
+::)
+
+if "%OPEN_CLI_DEBUG%"=="true" (
+ java -Xdebug -Xrunjdwp:transport=dt_socket,address=%OPEN_CLI_DEBUG_PORT%,server=y -classpath %CLASSPATH% -DOPEN_CLI_HOME=%OPEN_CLI_HOME% org.open.infc.grpc.server.OpenInterfaceGrpcServer %*
+) else (
+ java -classpath %CLASSPATH% -DOPEN_CLI_HOME=%OPEN_CLI_HOME% org.open.infc.grpc.server.OpenInterfaceGrpcServer %*
+)
diff --git a/deployment/zip/src/main/release/bin/oclip-grpc-server.sh b/deployment/zip/src/main/release/bin/oclip-grpc-server.sh
index 12b0a1ef..976ceda2 100644
--- a/deployment/zip/src/main/release/bin/oclip-grpc-server.sh
+++ b/deployment/zip/src/main/release/bin/oclip-grpc-server.sh
@@ -30,6 +30,8 @@ else
fi
CLASSPATH=${OPEN_CLI_HOME}/conf${SEP}${OPEN_CLI_HOME}${SEP}${OPEN_CLI_HOME}/docs
+export PATH=$OPEN_CLI_HOME/bin:$PATH
+
for entry in "$OPEN_CLI_HOME/lib"/*
do
CLASSPATH=${CLASSPATH}${SEP}${entry}
diff --git a/deployment/zip/src/main/release/bin/oclip.cmd b/deployment/zip/src/main/release/bin/oclip.cmd
new file mode 100644
index 00000000..2648d40a
--- /dev/null
+++ b/deployment/zip/src/main/release/bin/oclip.cmd
@@ -0,0 +1,39 @@
+@echo off
+REM #*******************************************************************************
+REM # Copyright 2017 Huawei Technologies Co., Ltd.
+REM #
+REM # Licensed under the Apache License, Version 2.0 (the "License");
+REM # you may not use this file except in compliance with the License.
+REM # You may obtain a copy of the License at
+REM #
+REM # http://www.apache.org/licenses/LICENSE-2.0
+REM #
+REM # Unless required by applicable law or agreed to in writing, software
+REM # distributed under the License is distributed on an "AS IS" BASIS,
+REM # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM # See the License for the specific language governing permissions and
+REM # limitations under the License.
+REM #*******************************************************************************
+
+if "%OPEN_CLI_HOME%"=="" (
+ echo "OPEN_CLI_HOME is not set."
+ exit 1
+)
+
+if "%OPEN_CLI_DEBUG_PORT%"=="" (
+ set OPEN_CLI_DEBUG_PORT=5005
+)
+
+set CLASSPATH=%OPEN_CLI_HOME%\conf;%OPEN_CLI_HOME%\docs;%OPEN_CLI_HOME%;%OPEN_CLI_HOME%\lib\*
+set PATH=%OPEN_CLI_HOME%\bin;%PATH%
+
+::SETLOCAL EnableDelayedExpansion
+::for /f %%e in ('dir /b %OPEN_CLI_HOME%\lib') do (
+:: set "CLASSPATH=!CLASSPATH!;%OPEN_CLI_HOME%\lib\%%e"
+::)
+
+if "%OPEN_CLI_DEBUG%"=="true" (
+ java -Xdebug -Xrunjdwp:transport=dt_socket,address=%OPEN_CLI_DEBUG_PORT%,server=y -classpath %CLASSPATH% -DOPEN_CLI_HOME=%OPEN_CLI_HOME% org.onap.cli.main.OnapCli %*
+) else (
+ java -classpath %CLASSPATH% -DOPEN_CLI_HOME=%OPEN_CLI_HOME% org.onap.cli.main.OnapCli %*
+)
diff --git a/deployment/zip/src/main/release/bin/oclip.sh b/deployment/zip/src/main/release/bin/oclip.sh
index a841c926..e24cdb4a 100755
--- a/deployment/zip/src/main/release/bin/oclip.sh
+++ b/deployment/zip/src/main/release/bin/oclip.sh
@@ -30,6 +30,8 @@ else
fi
CLASSPATH=${OPEN_CLI_HOME}/conf${SEP}${OPEN_CLI_HOME}${SEP}${OPEN_CLI_HOME}/docs
+export PATH=$OPEN_CLI_HOME/bin:$PATH
+
for entry in "$OPEN_CLI_HOME/lib"/*
do
CLASSPATH=${CLASSPATH}${SEP}${entry}
diff --git a/deployment/zip/src/main/release/conf/open-cli.properties b/deployment/zip/src/main/release/conf/open-cli.properties
index 76048e69..47df222a 100644
--- a/deployment/zip/src/main/release/conf/open-cli.properties
+++ b/deployment/zip/src/main/release/conf/open-cli.properties
@@ -20,7 +20,7 @@ cli.artifact.dir=$s{env:OPEN_CLI_HOME}/data/artifacts
cli.tmp.dir=$s{env:OPEN_CLI_HOME}/data/tmp
#timeout in seconds
cli.grpc.client.timeout=60
-cli.execution.search.mode=find
+cli.execution.search.mode=file
#schema validation
cli.schema.base.sections=open_cli_schema_version,name,description,parameters,results,info
diff --git a/framework/src/main/java/org/onap/cli/fw/store/OnapCommandExecutionStore.java b/framework/src/main/java/org/onap/cli/fw/store/OnapCommandExecutionStore.java
index d032a99c..d09dfa50 100644
--- a/framework/src/main/java/org/onap/cli/fw/store/OnapCommandExecutionStore.java
+++ b/framework/src/main/java/org/onap/cli/fw/store/OnapCommandExecutionStore.java
@@ -214,7 +214,7 @@ public class OnapCommandExecutionStore {
String storePath = getBasePath() + File.separator + executionId + SEPARATOR + product +
SEPARATOR + service +
SEPARATOR + cmd +
- (profile != null ? (SEPARATOR + profile) : "" );
+ SEPARATOR + (profile != null ? profile : "" );
try {
File dir = new File(storePath);
@@ -319,14 +319,30 @@ public class OnapCommandExecutionStore {
try {
List <String> dirs = new ArrayList<>();
- if (SEARCH_MODE.equals(SearchMode.file)) {
- for (File f: new File(getBasePath()).listFiles())
- dirs.add(f.getAbsolutePath());
+ if (System.getProperty("os.name").toLowerCase().startsWith("windows") || SEARCH_MODE.equals(SearchMode.file)) {
+ for (File f: new File(getBasePath()).listFiles()) {
+ if(search.containsKey("execution-id")) {
+ if (f.getName().startsWith(search.get("execution-id")))
+ dirs.add(f.getAbsolutePath());
+
+ continue;
+ }
+
+ if(search.containsKey("request-id")) {
+ if (f.getName().startsWith(search.get("request-id")))
+ dirs.add(f.getAbsolutePath());
+
+ continue;
+ }
+
+ else
+ dirs.add(f.getAbsolutePath());
+ }
} else {
//find results -type d -newermt '2019-02-11 10:00:00' ! -newermt '2019-02-11 15:10:00' -name "*__*__profile-list*"
//find 'results' -type d -newermt '2019-02-11T10:00:00.000' ! -newermt '2019-02-11T15:10:00.000' -name "*__*__profile*"
- String searchString = "find '" + new File(getBasePath()).getAbsolutePath() + "' -type d ";
+ String searchString = "find " + new File(getBasePath()).getAbsolutePath() + " -type d ";
String startTime = search.get("startTime");
if (startTime != null) {
@@ -338,7 +354,7 @@ public class OnapCommandExecutionStore {
searchString += " ! -newermt " + endTime ;
}
- searchString += " -name '";
+ searchString += " -name \"";
if(search.containsKey("execution-id")) {
searchString += search.get("execution-id");
@@ -350,7 +366,7 @@ public class OnapCommandExecutionStore {
for (String term: Arrays.asList(new String []{"product", "service", "command", "profile"})) {
searchString += "__";
- if (search.get(term) != null) {
+ if (search.get(term) != null && !search.get(term).isEmpty()) {
searchString += search.get(term);
} else {
searchString += "*";
@@ -359,16 +375,18 @@ public class OnapCommandExecutionStore {
if (!searchString.endsWith("*"))
searchString += "*";
- searchString += "'";
+ searchString += "\"";
ProcessRunner pr = new ProcessRunner(new String [] {searchString}, null, ".");
+ pr.setTimeout(10000);
pr.overrideToUnix();
pr.run();
if (pr.getExitCode() != 0) {
throw new OnapCommandExecutionFailed("System failed to search the executions with error " + pr.getError());
}
- dirs = Arrays.asList(pr.getOutput().split("\\r?\\n"));
+ if (!pr.getOutput().trim().isEmpty())
+ dirs = Arrays.asList(pr.getOutput().split("\\r?\\n"));
}
for (String dir: dirs) {
@@ -388,7 +406,6 @@ public class OnapCommandExecutionStore {
if (new File(executionStorePath + File.separator + "executionId").exists())
exectuion.setId(FileUtils.readFileToString(new File(executionStorePath + File.separator + "executionId")));
exectuion.setProduct(FileUtils.readFileToString(new File(executionStorePath + File.separator + "product")));
- exectuion.setProfile(FileUtils.readFileToString(new File(executionStorePath + File.separator + "profile")));
exectuion.setService(FileUtils.readFileToString(new File(executionStorePath + File.separator + "service")));
exectuion.setCommand(FileUtils.readFileToString(new File(executionStorePath + File.separator + "command")));
if (new File(executionStorePath + File.separator + "profile").exists())
diff --git a/framework/src/main/java/org/onap/cli/fw/utils/ProcessRunner.java b/framework/src/main/java/org/onap/cli/fw/utils/ProcessRunner.java
index d36a0d6c..ff9d5520 100644
--- a/framework/src/main/java/org/onap/cli/fw/utils/ProcessRunner.java
+++ b/framework/src/main/java/org/onap/cli/fw/utils/ProcessRunner.java
@@ -17,12 +17,12 @@
package org.onap.cli.fw.utils;
import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
-import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -41,8 +41,8 @@ public class ProcessRunner {
private String cwd = System.getProperty("user.home");
private String []env = null;
private int exitCode = -1;
- private String output;
- private String error;
+ private String output = "";
+ private String error = "";
private long timeout = 0;
private OutputStream stdout;
private OutputStream stderr;
@@ -92,12 +92,6 @@ public class ProcessRunner {
public void run() throws InterruptedException, IOException {
Process p = null;
- final StringWriter writerOutput = new StringWriter();
- final StringWriter writerError = new StringWriter();
-
- final OutputStream stdout = this.getStdout();
- final OutputStream stderr = this.getStderr();
-
if (this.cmd.length == 1) {
p = Runtime.getRuntime().exec(this.shell + this.cmd[0], this.env, null);
} else {
@@ -107,47 +101,70 @@ public class ProcessRunner {
p = Runtime.getRuntime().exec(cmds, this.env, null);
}
- final Process p1 = p;
- new Thread(new Runnable() {
+ boolean readOutput = false;
+ if (this.getStdout() == null) {
+ this.setStdout(new ByteArrayOutputStream());
+ readOutput = true;
+ }
+
+ boolean readError = false;
+ if (this.getStderr() == null) {
+ this.setStderr(new ByteArrayOutputStream());
+ readError = true;
+ }
+
+ final OutputStream stdout = this.getStdout();
+ final OutputStream stderr = this.getStderr();
+
+ final InputStream stdoutP = p.getInputStream();
+ final InputStream stderrP = p.getErrorStream();
+
+ Thread outThread = new Thread(new Runnable() {
public void run() {
try {
- if (stdout != null) {
- IOUtils.copy(p1.getInputStream(), stdout);
- }
- else IOUtils.copy(p1.getInputStream(), writerOutput);
+ IOUtils.copy(stdoutP, stdout);
} catch (IOException e) {
}
}
- }).start();
+ });
- new Thread(new Runnable() {
+ Thread errThread = new Thread(new Runnable() {
public void run() {
try {
- if (stderr != null) {
- IOUtils.copy(p1.getErrorStream(), stderr);
- }
- else IOUtils.copy(p1.getErrorStream(), writerError);
+ IOUtils.copy(stderrP, stderr);
} catch (IOException e) {
}
}
- }).start();
+ });
+
+ outThread.start();
+ errThread.start();
boolean completed = p.waitFor(this.getTimeout(), TimeUnit.MILLISECONDS);
+ outThread.join();
+ errThread.join();
+
if (completed) {
this.exitCode = p.exitValue();
}
- this.output = writerOutput.toString();
- this.error = writerError.toString();
- log.debug("CMD: " + Arrays.asList(this.cmd).toString() + "\nWORKING_DIR: " + this.cwd + "\nENV: " +
- ((this.env == null) ? this.env : Arrays.asList(this.env).toString()) +
- "\nOUTPUT: " + this.output + "\nERROR: " + this.error + "\nEXIT_CODE: " + this.exitCode);
+ if (readOutput)
+ this.output = new String(((ByteArrayOutputStream)this.getStdout()).toByteArray(), "UTF-8");
+
+ if (readError)
+ this.error = new String(((ByteArrayOutputStream)this.getStderr()).toByteArray(), "UTF-8");;
+
p.destroy();
+ log.debug("CMD: " + Arrays.asList(this.cmd).toString() +
+ "\nWORKING_DIR: " + this.cwd +
+ "\nENV: " + ((this.env == null) ? this.env : Arrays.asList(this.env).toString()) +
+ "\nOUTPUT: " + this.output +
+ "\nERROR: " + this.error +
+ "\nEXIT_CODE: " + this.exitCode);
+
if (!completed) {
throw new RuntimeException("TIMEOUT:: cmd:" + Arrays.asList(this.cmd).toString());
- } else {
-
}
}
diff --git a/framework/src/test/java/org/onap/cli/fw/utils/ProcessRunnerTest.java b/framework/src/test/java/org/onap/cli/fw/utils/ProcessRunnerTest.java
index 2e5b2ab9..6d7ebbf9 100644
--- a/framework/src/test/java/org/onap/cli/fw/utils/ProcessRunnerTest.java
+++ b/framework/src/test/java/org/onap/cli/fw/utils/ProcessRunnerTest.java
@@ -39,7 +39,7 @@ public class ProcessRunnerTest {
public void testStreamToString() throws IOException {
InputStream stubInputStream = IOUtils.toInputStream("Test stream", "UTF-8");
String out = processRunner.streamToString(stubInputStream);
- Assert.assertEquals("Test stream\n", out);
+ Assert.assertEquals("Test stream", out.trim());
}
}
diff --git a/framework/src/test/resources/open-cli.properties b/framework/src/test/resources/open-cli.properties
new file mode 100644
index 00000000..bd8a6acf
--- /dev/null
+++ b/framework/src/test/resources/open-cli.properties
@@ -0,0 +1,49 @@
+# Copyright 2018 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+cli.product_name=open-cli
+cli.version=3.0.0
+cli.discover_always=false
+cli.data.dir=./data
+cli.artifact.dir=./data/artifacts
+cli.tmp.dir=./data/tmp
+#timeout in seconds
+cli.grpc.client.timeout=60
+cli.execution.search.mode=file
+#schema validation
+cli.schema.base.sections=open_cli_schema_version,name,description,parameters,results,info
+cli.schema.base.sections.mandatory=open_cli_schema_version
+
+cli.schema.base.info.sections=product,service,type,author,ignore,state
+cli.schema.base.info.sections.mandatory=product,service
+
+cli.schema.base.parameters.sections=name,description,type,short_option,long_option, is_optional,default_value,is_secured,is_include,is_default_param
+cli.schema.base.parameters.sections.mandatory=name,description,type
+
+cli.schema.base.results.sections=name,description,scope,type,is_secured, default_value
+cli.schema.base.results.sections.mandatory=name, description, type, scope
+
+cli.schema.boolean_values=true,false
+cli.schema.command.type=cmd,auth,catalog
+
+# moco properties
+cli.sample.gen.enable=false
+cli.sample.gen.target=./open-cli-sample
+
+# mrkanag Move this to db, once exteranl command registration is supported in place of discovery
+cli.schema.profile.available=http,snmp,cmd
+
+#other properties to load (it should be hanled when plugins are made as externally register-able
+#when command plugin management support is enabled in oclip
+cli.schema.profile.confs= \ No newline at end of file
diff --git a/main/src/main/java/org/onap/cli/main/OnapCli.java b/main/src/main/java/org/onap/cli/main/OnapCli.java
index 268b23cf..cec9cc01 100644
--- a/main/src/main/java/org/onap/cli/main/OnapCli.java
+++ b/main/src/main/java/org/onap/cli/main/OnapCli.java
@@ -544,7 +544,7 @@ public class OnapCli {
OnapCliArgsParser.populateParams(cmd.getParameters(), this.args);
//start the execution
- if (this.requestId != null && !this.requestId.isEmpty()) {
+ if (this.requestId != null && this.product != null && !this.requestId.isEmpty()) {
if (!(this.product.equalsIgnoreCase("open-cli") &&
this.cmdName.equalsIgnoreCase("execution-list"))) {
String input = cmd.getArgsJson(true);
diff --git a/products/onap-dublin/features/integration/src/main/resources/conf/vnf-tosca-provision.json b/products/onap-dublin/features/integration/src/main/resources/conf/vnf-tosca-provision.json
index 45aa7d1f..a944e373 100644
--- a/products/onap-dublin/features/integration/src/main/resources/conf/vnf-tosca-provision.json
+++ b/products/onap-dublin/features/integration/src/main/resources/conf/vnf-tosca-provision.json
@@ -42,11 +42,11 @@
"service-type": "tosca_vnf_validation"
},
"vnf": {
- "vendor-name" : "vnf-vendor-kanag",
- "name": "vgwvnfovpdemo",
- "vsp-csar": "C:\\Users\\k00365106\\Desktop\\vtp\\tosca-lcm\\csar\\vgw.csar",
- "vnf-csar": "C:\\Users\\k00365106\\Desktop\\vtp\\tosca-lcm\\csar\\vnf_vgw.csar",
- "ns-csar": "C:\\Users\\k00365106\\Desktop\\vtp\\tosca-lcm\\csar\\ns.csar",
+ "vendor-name" : "vgw-vendor",
+ "name": "vgw",
+ "vsp-csar": "D:\\workspace\\onap\\1.1\\SOL001\\vCPE\\csar_files\\default\\vgw.csar",
+ "vnf-csar": "D:\\workspace\\onap\\1.1\\SOL001\\vCPE_VFC\\csar_files\\default\\vgw.csar",
+ "ns-csar": "D:\\workspace\\onap\\1.1\\SOL001\\vCPE_VFC\\csar_files\\default\\ns.csar",
"vnfm-driver": "hwvnfmdriver"
},
"cloud": {
diff --git a/products/onap-dublin/features/integration/src/main/resources/open-cli-schema/vnf-tosca-provision-dublin-schema.yaml b/products/onap-dublin/features/integration/src/main/resources/open-cli-schema/vnf-tosca-provision-dublin-schema.yaml
index 908d33dc..e7c509a6 100644
--- a/products/onap-dublin/features/integration/src/main/resources/open-cli-schema/vnf-tosca-provision-dublin-schema.yaml
+++ b/products/onap-dublin/features/integration/src/main/resources/open-cli-schema/vnf-tosca-provision-dublin-schema.yaml
@@ -16,22 +16,87 @@ open_cli_schema_version: 1.0
name: vnf-tosca-provision
description: |
ONAP TOSCA VNF validation using ONAP CLI and Open Command Platform (OCOMP)
- NOTE: Before using this command, configure the $OPEN_CLI_HOME/conf/vnf-tosca-provision.json
- This command runs in 4 mode:
- 1. setup: Create requires Vendor, Service Subscription and VNF cloud in ONAP
- 2. standup: From the given VSP csar, VNF csar and NS csar, it creates VF Model, NS Model and NS service
- 3. cleanup: Remove those entries provided in onap-objects parameter
- 4. validate: Run setup -> standup -> cleanup
+ This command runs in 5 mode:
+ 1. setup: Create requires Vendor, Service Subscription and VNF cloud in ONAP
+ 2. standup: From the given VSP csar, VNF csar and NS csar, it creates VF Model, NS Model and NS service
+ 3. cleanup: Remove those entries provided in onap-objects parameter
+ 4. provision:Run setup -> standup
+ 5. validate: Run setup -> standup -> cleanup
On every execution, it reports the ONAP managed object's ids in result onap-objects attribute. so
if requires, these attribute value could be passed in input parameter onap-objects on subsequent
executions to avoid recreation of these ONA managed objects
+ prerequisites
+ -------------
+ 1. Setup the OCOMP profile to configure the ONAP service URL and creadentials as given below
+
+ a. Run command 'oclip' to go to OCOMP interactive mode
+
+ b. Type 'use onap-dublin' to choose the onap-dublin product
+
+ c. Type 'profile onap-dublin' to create or to use existing onap-dublin profile
+
+ d. Set following entries:
+ set sdc.onboarding:host-url=https://159.138.8.8:30280
+ set sdc.onboarding:host-username=cs0008
+ set sdc.onboarding:host-password=demo123456!
+ set sdc.catalog:host-url=https://159.138.8.8:30205
+ set sdc.catalog:host-password=demo123456\!
+ set sdc.catalog:host-username=cs0008
+ set sdc.catalog:service-model-approve:host-username=gv0001
+ set sdc.catalog:service-model-distribute:host-username=op0001
+ set sdc.catalog:service-model-test-start:host-username=jm0007
+ set sdc.catalog:service-model-test-accept:host-username=jm0007
+ set sdc.catalog:service-model-add-artifact:host-username=ocomp
+ set sdc.catalog:vf-model-add-artifact:host-username=ocomp
+ set aai:host-url=https://159.138.8.8:30233
+ set aai:host-username=AAI
+ set aai:host-password=AAI
+ set vfc:host-url=http://159.138.8.8:30280
+ set multicloud:host-url=http://159.138.8.8:30280
+
+ NOTE:
+ By default, SDC onboarding service does not provide node port, which is available to access from external ONAP network.
+ so to enable for external access, register the SDC onboarding service into MSB and use MSB url for sdc.onboarding:host-url.
+
+ oclip --product onap-dublin microservice-create --host-url http://159.138.8.8:30280 --service-name sdcob --service-version v1.0 --service-url /onboarding-api/v1.0 --path /onboarding-api/v1.0 --node-ip 172.16.1.0 --node-port 8081
+
+ oclip --product onap-dublin microservice-create --host-url http://159.138.8.8:30280 --service-name sdcobs --service-version v1.0 --service-url /onboarding-api/v1.0 --path /onboarding-api/v1.0 --node-ip 172.16.1.0 --node-port 8445 --enable-ssl
+
+ Find out SDC onboarding service IP and port details as given here:
+ [root@onap-dublin-vfw-93996-50c1z ~]# kubectl get pods -n onap -o wide | grep sdc-onboarding-be
+ dev-sdc-sdc-onboarding-be-5564b877c8-vpwr5 2/2 Running 0 29d 172.16.1.0 192.168.2.163 <none> <none>
+ dev-sdc-sdc-onboarding-be-cassandra-init-mtvz6 0/1 Completed 0 29d 172.16.0.220 192.168.2.163 <none> <none>
+ [root@onap-dublin-vfw-93996-50c1z ~]#
+
+ Note down the IP address for sdc-onboarding-be 172.16.1.0
+
+ [root@onap-dublin-vfw-93996-50c1z ~]# kubectl get services -n onap -o wide | grep sdc-onboarding-be
+ sdc-onboarding-be ClusterIP 10.247.198.92 <none> 8445/TCP,8081/TCP 29d app=sdc-onboarding-be,release=dev-sdc
+ [root@onap-dublin-vfw-93996-50c1z ~]#
+
+ Note down the port for sdc-onboarding-be 8445 8081
+
+ Similarly, other service IP and Port could be discovered like above, in case not know earlier :)
+
+ This profile would be used while running the command with ONAP setup configured in it, as below
+ oclip --profile onap-dublin vnf-tosca-provision .....
+
+ e. Verify these details once by typing 'set'
+
+ f. Exit from the interactive console by typing 'exit'
+
+ 2. Setup SDC consumer
+ oclip --product onap-dublin --profile onap-dublin sdc-consumer-create --consumer-name ocomp
+
+ 3. Update the cloud and vnfm driver details in the configuration file $OPEN_CLI_HOME/conf/vnf-tosca-provision.json
+
info:
product: onap-dublin
service: vnf-validation
- author: ONAP VTP Team onap-discuss@lists.onap.org
+ author: ONAP VTP Team kanagaraj.manickam@huawei.com
parameters:
- name: config-json
@@ -74,12 +139,12 @@ parameters:
is_optional: true
default_value: {}
- name: mode
- description: setup or standup or cleanup
+ description: setup or standup or cleanup or provision or validate
type: string
short_option: Y
long_option: mode
is_optional: true
- default_value: validate
+ default_value: checkup
- name: vnf-name
description: VNF Name
type: string
diff --git a/products/onap-dublin/features/integration/src/main/resources/script/vnf-tosca-provision.py b/products/onap-dublin/features/integration/src/main/resources/script/vnf-tosca-provision.py
index 6dc7310e..d412fa66 100644
--- a/products/onap-dublin/features/integration/src/main/resources/script/vnf-tosca-provision.py
+++ b/products/onap-dublin/features/integration/src/main/resources/script/vnf-tosca-provision.py
@@ -126,7 +126,7 @@ class ONAP:
self.conf = conf
self.ocomp = OCOMP(request_id, debug, product=product, profile=profile)
self.preload()
- self.tag = 'Created by Open Command Platform - OCOMP'
+ self.tag = 'Powered by Open Command Platform - OCOMP'
def preload(self):
if self.conf['ONAP']:
@@ -173,7 +173,7 @@ class ONAP:
'vlm-version': self.vlm_version,
'vlm-key-group-id': self.key_group_id,
'vlm-entitle-pool-id': self.entitlement_id,
- 'part-number': 'OCOMP'})
+ 'part-number': '100000'})
self.feature_group_id = output['id']
submit = True
@@ -211,15 +211,22 @@ class ONAP:
params={'vsp-id': self.vsp_id,
'vsp-version': self.vsp_version_id,
'vsp-file': self.conf['vnf']['vsp-csar']})
+
output = self.ocomp.run(command='vsp-validate',
params={'vsp-id': self.vsp_id,
'vsp-version': self.vsp_version_id})
if not output['status'] == "Success":
raise Exception("Invalid VSP package, please check it compliance using VTP")
+ self.ocomp.run(command='vsp-commit',
+ params={'vsp-id': self.vsp_id,
+ 'vsp-version': self.vsp_version_id,
+ 'remarks': self.tag})
+
self.ocomp.run(command='vsp-submit',
params={'vsp-id': self.vsp_id,
'vsp-version': self.vsp_version_id})
+
self.ocomp.run(command='vsp-package',
params={'vsp-id': self.vsp_id,
'vsp-version': self.vsp_version_id})
@@ -313,7 +320,7 @@ class ONAP:
def setup_cloud_and_subscription(self):
associate = False
if not self.location_id and not self.location_version:
- location_id = 'ocomp-region'
+ location_id = 'ocomp-region-{}'.format(self.ocomp.request_id)
self.ocomp.run(command='complex-create',
params={'physical-location-id': location_id,
'data-center-code': 'ocomp',
@@ -342,7 +349,7 @@ class ONAP:
break
if not self.cloud_id and not self.cloud_version:
- cloud_id = 'OCOMP'
+ cloud_id = 'OCOMP-{}'.format(self.ocomp.request_id)
self.ocomp.run(command='cloud-create',
params={'region-name': self.conf['cloud']['region'],
'complex-name': self.location_id,
@@ -379,10 +386,11 @@ class ONAP:
subscribe = False
if not self.service_type_id and not self.service_type_version:
+ service_type_id = '{}-{}'.format(self.conf['subscription']['service-type'], self.ocomp.request_id)
self.ocomp.run(command='service-type-create',
- params={'service-type': self.conf['subscription']['service-type'],
- 'service-type-id': self.conf['subscription']['service-type']})
- self.service_type_id = self.conf['subscription']['service-type']
+ params={'service-type': service_type_id,
+ 'service-type-id': service_type_id})
+ self.service_type_id = service_type_id
subscribe = True
output = self.ocomp.run(command='service-type-list')
@@ -393,10 +401,11 @@ class ONAP:
break
if not self.customer_id and not self.customer_version:
+ customer_id = '{}-{}'.format(self.conf['subscription']['customer-name'], self.ocomp.request_id)
self.ocomp.run(command='customer-create',
- params={'customer-name': self.conf['subscription']['customer-name'],
- 'subscriber-name': self.conf['subscription']['customer-name']})
- self.customer_id = self.conf['subscription']['customer-name']
+ params={'customer-name': customer_id,
+ 'subscriber-name': customer_id})
+ self.customer_id = customer_id
subscribe = True
output = self.ocomp.run(command='customer-list')
@@ -619,8 +628,9 @@ if __name__ == '__main__':
'\ncleanup - Remove the ONAP objects which are either created during \nsetup and standup phase or provided by the user in result-json file ' \
'\nCAUTION: If required, do not provide the existing ONAP object ids \nin result-json while doing the cleanup, to avoid them getting deleted.'\
'\ncheckup - Check the deployment weather OCOMP is working properly or not' \
+ '\nprovision - Run thru setup -> standup' \
'\nvalidate - run thru setup -> standup -> cleanup modes for end to end vnf validation',
- choices=('setup', 'standup', 'cleanup', 'checkup', 'validate'))
+ choices=('setup', 'standup', 'cleanup', 'checkup', 'provision', 'validate'))
args = parser.parse_args()
print (args)
@@ -636,6 +646,8 @@ if __name__ == '__main__':
profile = args.profile
request_id = args.request_id
+ if not request_id:
+ request_id = str(uuid.uuid4())
vsp_csar = args.vsp
vnf_csar = args.vnf_csar
ns_csar = args.ns_csar
@@ -671,8 +683,10 @@ if __name__ == '__main__':
conf['vnf']['ns-csar'] = vnf_csar
if vnf_name:
conf['vnf']['name'] = vnf_name
+ conf['vnf']['name'] = '{}{}'.format(conf['vnf']['name'], request_id).replace("-", "").replace("_", "")
if vnf_name:
conf['vnf']['vendor-name'] = vendor_name
+ conf['vnf']['vendor-name'] = '{}-{}'.format(conf['vnf']['vendor-name'], request_id)
if args.result:
@@ -697,7 +711,7 @@ if __name__ == '__main__':
onap.create_vsp()
onap.create_vf_model()
onap.create_service_model()
-# onap.create_vnf()
+ onap.create_vnf()
onap.vnf_status_check()
def _cleanup():
@@ -713,6 +727,9 @@ if __name__ == '__main__':
elif mode == 'checkup':
onap.ocomp.product = 'open-cli'
onap.ocomp.run(command='schema-list', params={'product': 'open-cli'})
+ elif mode == 'provision':
+ _setup()
+ _standup()
elif mode == 'validate':
_setup()
_standup()
diff --git a/products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-moco.json b/products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-moco.json
new file mode 100644
index 00000000..439f5e00
--- /dev/null
+++ b/products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-moco.json
@@ -0,0 +1,24 @@
+[ {
+ "request" : {
+ "method" : "put",
+ "uri" : "/onboarding-api/v1.0/items/a653d9bd40dc43e2ae45004daeab9003/versions/d6e590f98c2347b7a29b27e263527fac/actions",
+ "headers" : {
+ "Authorization" : "Basic Y3MwMDA4OmRlbW8xMjM0NTYh",
+ "X-FromAppId" : "ONAP CLI",
+ "Accept" : "application/json",
+ "USER_ID" : "cs0008",
+ "X-TransactionId" : "req-f64dec4f-646e-46d8-807e-99e7170a6afb",
+ "Content-Type" : "application/json"
+ },
+ "json" : {
+ "action" : "Commit",
+ "commitRequest" : {
+ "message" : "Powered by Open Command Platform - OCOMP"
+ }
+ }
+ },
+ "response" : {
+ "status" : 200,
+ "json" : { }
+ }
+} ] \ No newline at end of file
diff --git a/products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-sample.yaml b/products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-sample.yaml
new file mode 100644
index 00000000..3f02163a
--- /dev/null
+++ b/products/onap-dublin/features/sdc/src/main/resources/open-cli-sample/vsp/vsp-commit-schema-dublin-sample.yaml
@@ -0,0 +1,10 @@
+open_cli_sample_version: 1.0
+name: vsp-commit
+version: onap-dublin
+samples:
+ sample1:
+ name: vsp-commit
+ input: --format json --remarks Powered by Open Command Platform - OCOMP --vsp-version d6e590f98c2347b7a29b27e263527fac --vsp-id a653d9bd40dc43e2ae45004daeab9003
+ moco: vsp-commit-schema-dublin-moco.json
+ output: |
+ [{}]
diff --git a/products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-commit-schema-dublin.yaml b/products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-commit-schema-dublin.yaml
new file mode 100644
index 00000000..4bc103da
--- /dev/null
+++ b/products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-commit-schema-dublin.yaml
@@ -0,0 +1,56 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: vsp-commit
+description: Commit Vendor Software Product
+
+info:
+ product: onap-dublin
+ service: sdc.onboarding
+ author: ONAP CLI Team onap-discuss@lists.onap.org
+
+parameters:
+ - name: vsp-id
+ description: Onap VSP ID
+ type: string
+ short_option: x
+ long_option: vsp-id
+ is_optional: false
+ - name: vsp-version
+ description: VSP version
+ type: string
+ short_option: y
+ long_option: vsp-version
+ is_optional: false
+ - name: remarks
+ description: VSP remarks
+ type: string
+ short_option: z
+ long_option: remarks
+ is_optional: true
+ default_value: Created by OCOMP
+http:
+ service:
+ name: sdc
+ version: v1.0
+ auth: basic
+ mode: direct
+ request:
+ uri: /onboarding-api/v1.0/items/${vsp-id}/versions/${vsp-version}/actions
+ method: PUT
+ body: '{"action":"Commit","commitRequest":{"message":"${remarks}"}}'
+ success_codes:
+ - 201
+ - 200
diff --git a/products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-create-schema-dublin.yaml b/products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-create-schema-dublin.yaml
index 041f536d..16dc068b 100644
--- a/products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-create-schema-dublin.yaml
+++ b/products/onap-dublin/features/sdc/src/main/resources/open-cli-schema/vsp/vsp-create-schema-dublin.yaml
@@ -100,7 +100,7 @@ http:
body: '{
"category": "resourceNewCategory.generic",
"vendorId": "${vlm-id}",
- "subCategory": "resourceNewCategory.generic.abstract",
+ "subCategory": "resourceNewCategory.generic.network elements",
"description": "${vsp-description}",
"licensingVersion": "${vlm-version}",
"licensingData": {"featureGroups": ["${vlm-feature-group-id}"], "licenseAgreement": "${vlm-agreement-id}"},
diff --git a/products/onap-dublin/features/vfc/src/main/resources/open-cli-schema/nslcm/vfc-nslcm-create-schema.yaml b/products/onap-dublin/features/vfc/src/main/resources/open-cli-schema/nslcm/vfc-nslcm-create-schema.yaml
index 9b59a71b..29fceccd 100644
--- a/products/onap-dublin/features/vfc/src/main/resources/open-cli-schema/nslcm/vfc-nslcm-create-schema.yaml
+++ b/products/onap-dublin/features/vfc/src/main/resources/open-cli-schema/nslcm/vfc-nslcm-create-schema.yaml
@@ -13,7 +13,7 @@
# limitations under the License.
open_cli_schema_version: 1.0
-name: vfc-nslcm-create1
+name: vfc-nslcm-create
description: vfc nslcm create ns
info:
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-associate-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-associate-schema-elalto.yaml
new file mode 100644
index 00000000..ae87a622
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-associate-schema-elalto.yaml
@@ -0,0 +1,61 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: complex-associate
+description: Associate a cloud region with a cloud complex
+
+info:
+ product: onap-elalto
+ service: aai
+ author: Intel ONAP HPA integration team (itohan.ukponmwan@intel.com)
+
+parameters:
+ - name: complex-name
+ description: name of cloud complex
+ type: string
+ short_option: x
+ long_option: complex-name
+ is_optional: false
+ - name: cloud-region
+ description: name of registered cloud-region
+ type: string
+ short_option: y
+ long_option: cloud-region
+ is_optional: false
+ - name: cloud-owner
+ description: name of cloud-owner
+ type: string
+ short_option: z
+ long_option: cloud-owner
+ is_optional: false
+
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/cloud-regions/cloud-region/${cloud-owner}/${cloud-region}/relationship-list/relationship
+ method: PUT
+ body: '{
+ "related-to": "complex",
+ "related-link": "/aai/v16/cloud-infrastructure/complexes/complex/${complex-name}",
+ "relationship-data": [
+ {
+ "relationship-key": "complex.physical-location-id",
+ "relationship-value": "${complex-name}"
+ }]
+ }'
+ success_codes:
+ - 200
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-create-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-create-schema-elalto.yaml
new file mode 100644
index 00000000..0d5bf3cc
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-create-schema-elalto.yaml
@@ -0,0 +1,149 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: complex-create
+description: Create a cloud complex in Onap
+
+info:
+ product: onap-elalto
+ service: aai
+ author: Intel ONAP HPA integration team (itohan.ukponmwan@intel.com)
+
+parameters:
+ - name: physical-location-id
+ description: id of physical location
+ type: string
+ short_option: x
+ long_option: physical-location-id
+ is_optional: false
+ - name: data-center-code
+ description: datacenter name
+ type: string
+ short_option: y
+ long_option: data-center-code
+ is_optional: false
+ - name: complex-name
+ description: complex name
+ type: string
+ short_option: z
+ long_option: complex-name
+ is_optional: false
+ - name: identity-url
+ description: identity url for complex
+ type: string
+ short_option: q
+ long_option: identity-url
+ is_optional: false
+ - name: physical-location-type
+ description: complex physical location type
+ type: string
+ short_option: r
+ long_option: physical-location-type
+ is_optional: false
+ - name: street1
+ description: name of street 1 for complex
+ type: string
+ short_option: i
+ long_option: street1
+ is_optional: false
+ - name: street2
+ description: name of street 2 for complex
+ type: string
+ short_option: j
+ long_option: street2
+ is_optional: false
+ - name: city
+ description: city complex is located in
+ type: string
+ short_option: g
+ long_option: city
+ is_optional: false
+ - name: state
+ description: state complex is located in
+ type: string
+ short_option: S
+ long_option: state
+ is_optional: false
+ - name: postal-code
+ description: postal code for complex
+ type: string
+ short_option: w
+ long_option: postal-code
+ is_optional: false
+ - name: country
+ description: country complex is located
+ type: string
+ short_option: k
+ long_option: country
+ is_optional: false
+ - name: region
+ description: region complex is located
+ type: string
+ short_option: l
+ long_option: region
+ is_optional: false
+ - name: latitude
+ description: latitude of complex location
+ type: string
+ short_option: lt
+ long_option: latitude
+ is_optional: false
+ - name: longitude
+ description: longitude of complex location
+ type: string
+ short_option: lo
+ long_option: longitude
+ is_optional: false
+ - name: elevation
+ description: elevation of complex location
+ type: string
+ short_option: o
+ long_option: elevation
+ is_optional: false
+ - name: lata
+ description: lata of complex
+ type: string
+ short_option: la
+ long_option: lata
+ is_optional: false
+
+
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/complexes/complex/${complex-name}
+ method: PUT
+ body: '{
+ "physical-location-id": "${physical-location-id}",
+ "data-center-code": "${data-center-code}",
+ "complex-name": "${complex-name}",
+ "identity-url": "${identity-url}",
+ "physical-location-type": "${physical-location-type}",
+ "street1": "${street1}",
+ "street2": "${street2}",
+ "city": "${city}",
+ "state": "${state}",
+ "postal-code": "${postal-code}",
+ "country": "${country}",
+ "region": "${region}",
+ "latitude": "${latitude}",
+ "longitude": "${longitude}",
+ "elevation": "${elevation}",
+ "lata": "${lata}"
+ }'
+ success_codes:
+ - 201
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-delete-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-delete-schema-elalto.yaml
new file mode 100644
index 00000000..8c1b4126
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-delete-schema-elalto.yaml
@@ -0,0 +1,46 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: complex-delete
+description: Delete a complex from Onap
+
+info:
+ product: onap-elalto
+ service: aai
+ author: ONAP HPA Integration Team (itohan.ukponmwan@intel.com)
+
+parameters:
+ - name: complex-name
+ description: Onap complex name
+ type: string
+ short_option: x
+ long_option: complex-name
+ is_optional: false
+ - name: resource-version
+ description: Onap complex region version
+ type: uuid
+ short_option: y
+ long_option: resource-version
+ is_optional: true
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/complexes/complex/${complex-name}?resource-version=${resource-version}
+ method: DELETE
+ success_codes:
+ - 204
+ - 404
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-list-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-list-schema-elalto.yaml
new file mode 100644
index 00000000..66b1754d
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-list-schema-elalto.yaml
@@ -0,0 +1,123 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: complex-list
+description: List the configured complexes
+
+info:
+ product: onap-elalto
+ service: aai
+ author: ONAP HPA Integration Team (itohan.ukponmwan@intel.com)
+
+results:
+ direction: landscape
+ attributes:
+ - name: complex-name
+ description: onap complex
+ scope: short
+ type: string
+ - name: physical-location-id
+ description: onap complex location id
+ scope: long
+ type: string
+ - name: data-center-code
+ description: data center code
+ scope: short
+ type: string
+ - name: identity-url
+ description: identity url
+ scope: long
+ type: string
+ - name: resource-version
+ description: complex resource version
+ scope: short
+ type: string
+ - name: physical-location-type
+ description: physical location type
+ scope: long
+ type: string
+ - name: street1
+ description: onap complex street1
+ scope: long
+ type: string
+ - name: street2
+ description: onap complex street2
+ scope: long
+ type: string
+ - name: city
+ description: onap complex city
+ scope: long
+ type: string
+ - name: state
+ description: onap complex state
+ scope: long
+ type: string
+ - name: postal-code
+ description: onap complex postal code
+ scope: long
+ type: string
+ - name: country
+ description: onap complex country
+ scope: short
+ type: string
+ - name: region
+ description: onap complex region
+ scope: short
+ type: string
+ - name: latitude
+ description: onap complex latitude
+ scope: short
+ type: string
+ - name: longitude
+ description: onap complex longitude
+ scope: short
+ type: string
+ - name: elevation
+ description: onap complex elevation
+ scope: short
+ type: string
+ - name: lata
+ description: onap complex lata
+ scope: long
+ type: string
+
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/complexes/
+ method: GET
+ success_codes:
+ - 200
+ result_map:
+ physical-location-id: $b{complex.[*].physical-location-id}
+ data-center-code: $b{complex.[*].data-center-code}
+ complex-name: $b{complex.[*].complex-name}
+ identity-url: $b{complex.[*].identity-url}
+ resource-version: $b{complex.[*].resource-version}
+ physical-location-type: $b{complex.[*].physical-location-type}
+ street1: $b{complex.[*].street1}
+ street2: $b{complex.[*].street2}
+ city: $b{complex.[*].city}
+ state: $b{complex.[*].state}
+ postal-code: $b{complex.[*].postal-code}
+ country: $b{complex.[*].country}
+ region: $b{complex.[*].region}
+ latitude: $b{complex.[*].latitude}
+ longitude: $b{complex.[*].longitude}
+ elevation: $b{complex.[*].elevation}
+ lata: $b{complex.[*].lata}
+
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-update-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-update-schema-elalto.yaml
new file mode 100644
index 00000000..605d2992
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/complex/complex-update-schema-elalto.yaml
@@ -0,0 +1,156 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: complex-update
+description: Update a cloud complex in Onap
+
+info:
+ product: onap-elalto
+ service: aai
+ author: Intel ONAP HPA integration team (itohan.ukponmwan@intel.com)
+
+parameters:
+ - name: physical-location-id
+ description: id of physical location
+ type: string
+ short_option: x
+ long_option: physical-location-id
+ is_optional: false
+ - name: data-center-code
+ description: datacenter name
+ type: string
+ short_option: y
+ long_option: data-center-code
+ is_optional: false
+ - name: complex-name
+ description: complex name
+ type: string
+ short_option: z
+ long_option: complex-name
+ is_optional: false
+ - name: identity-url
+ description: identity url for complex
+ type: string
+ short_option: q
+ long_option: identity-url
+ is_optional: false
+ - name: physical-location-type
+ description: complex physical location type
+ type: string
+ short_option: r
+ long_option: physical-location-type
+ is_optional: false
+ - name: street1
+ description: name of street 1 for complex
+ type: string
+ short_option: i
+ long_option: street1
+ is_optional: false
+ - name: street2
+ description: name of street 2 for complex
+ type: string
+ short_option: j
+ long_option: street2
+ is_optional: false
+ - name: city
+ description: city complex is located in
+ type: string
+ short_option: g
+ long_option: city
+ is_optional: false
+ - name: state
+ description: state complex is located in
+ type: string
+ short_option: S
+ long_option: state
+ is_optional: false
+ - name: postal-code
+ description: postal code for complex
+ type: string
+ short_option: w
+ long_option: postal-code
+ is_optional: false
+ - name: country
+ description: country complex is located
+ type: string
+ short_option: k
+ long_option: country
+ is_optional: false
+ - name: region
+ description: region complex is located
+ type: string
+ short_option: l
+ long_option: region
+ is_optional: false
+ - name: latitude
+ description: latitude of complex location
+ type: string
+ short_option: lt
+ long_option: latitude
+ is_optional: false
+ - name: longitude
+ description: longitude of complex location
+ type: string
+ short_option: lo
+ long_option: longitude
+ is_optional: false
+ - name: elevation
+ description: elevation of complex location
+ type: string
+ short_option: o
+ long_option: elevation
+ is_optional: false
+ - name: lata
+ description: lata of complex
+ type: string
+ short_option: la
+ long_option: lata
+ is_optional: false
+ - name: resource-version
+ description: resource version of complex to be updated
+ type: uuid
+ short_option: R
+ long_option: resource-version
+ is_optional: false
+
+
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/complexes/complex/${complex-name}
+ method: PUT
+ body: '{
+ "physical-location-id": "${physical-location-id}",
+ "data-center-code": "${data-center-code}",
+ "complex-name": "${complex-name}",
+ "identity-url": "${identity-url}",
+ "physical-location-type": "${physical-location-type}",
+ "street1": "${street1}",
+ "street2": "${street2}",
+ "city": "${city}",
+ "state": "${state}",
+ "postal-code": "${postal-code}",
+ "country": "${country}",
+ "region": "${region}",
+ "latitude": "${latitude}",
+ "longitude": "${longitude}",
+ "elevation": "${elevation}",
+ "lata": "${lata}",
+ "resource-version": "${resource-version}"
+ }'
+ success_codes:
+ - 200
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-create-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-create-schema-elalto.yaml
new file mode 100644
index 00000000..430506db
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-create-schema-elalto.yaml
@@ -0,0 +1,60 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: tenant-create
+description: Create a tenant under given cloud region in Onap
+
+info:
+ product: onap-elalto
+ service: aai
+ author: ONAP CLI Team onap-discuss@lists.onap.org
+
+parameters:
+ - name: cloud
+ description: Onap cloud
+ type: string
+ short_option: x
+ long_option: cloud
+ is_optional: false
+ - name: region
+ description: Onap cloud region
+ type: string
+ short_option: y
+ long_option: region
+ is_optional: false
+ - name: tenant-id
+ description: Onap cloud tenant id
+ type: uuid
+ short_option: z
+ long_option: tenant-id
+ is_optional: false
+ - name: tenant-name
+ description: Onap cloud tenant name
+ type: string
+ short_option: r
+ long_option: tenant-name
+ is_optional: false
+
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/cloud-regions/cloud-region/${cloud}/${region}/tenants/tenant/${tenant-id}
+ method: PUT
+ body: '{"tenant-id": "${tenant-id}", "tenant-name": "${tenant-name}"}'
+ success_codes:
+ - 200
+ - 201
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-delete-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-delete-schema-elalto.yaml
new file mode 100644
index 00000000..8c6d9b97
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-delete-schema-elalto.yaml
@@ -0,0 +1,59 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: tenant-delete
+description: Delete tenant under given cloud region in Onap
+
+info:
+ product: onap-elalto
+ service: aai
+ author: ONAP CLI Team onap-discuss@lists.onap.org
+
+parameters:
+ - name: cloud
+ description: Onap cloud
+ type: string
+ short_option: x
+ long_option: cloud
+ is_optional: false
+ - name: region
+ description: Onap cloud region
+ type: string
+ short_option: y
+ long_option: region
+ is_optional: false
+ - name: tenant-id
+ description: Onap cloud tenant id
+ type: string
+ short_option: z
+ long_option: tenant-id
+ is_optional: false
+ - name: resource-version
+ description: Onap cloud tenant version
+ type: uuid
+ short_option: r
+ long_option: resource-version
+ is_optional: true
+
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/cloud-regions/cloud-region/${cloud}/${region}/tenants/tenant/${tenant-id}?resource-version=${resource-version}
+ method: DELETE
+ success_codes:
+ - 204
+ - 404
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-list-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-list-schema-elalto.yaml
new file mode 100644
index 00000000..2faec9d7
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/infra/tenant/tenant-list-schema-elalto.yaml
@@ -0,0 +1,65 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: tenant-list
+description: Lists the tenants under given cloud region in Onap
+
+info:
+ product: onap-elalto
+ service: aai
+ author: ONAP CLI Team onap-discuss@lists.onap.org
+
+parameters:
+ - name: cloud
+ description: Onap cloud
+ type: string
+ short_option: x
+ long_option: cloud
+ is_optional: false
+ - name: region
+ description: Onap cloud region
+ type: string
+ short_option: y
+ long_option: region
+ is_optional: false
+
+results:
+ direction: landscape
+ attributes:
+ - name: tenant-id
+ description: Onap tenant-id
+ scope: short
+ type: string
+ - name: tenant-name
+ description: Onap tenant name
+ scope: short
+ type: string
+ - name: resource-version
+ description: Onap tenant resource version
+ scope: short
+ type: string
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/cloud-infrastructure/cloud-regions/cloud-region/${cloud}/${region}/tenants
+ method: GET
+ success_codes:
+ - 200
+ result_map:
+ tenant-id: $b{$.tenant.[*].tenant-id}
+ tenant-name: $b{$.tenant.[*].tenant-name}
+ resource-version: $b{$.tenant.[*].resource-version}
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-delete-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-delete-schema-elalto.yaml
new file mode 100644
index 00000000..4abc798b
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-delete-schema-elalto.yaml
@@ -0,0 +1,46 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: vnf-delete
+description: Delete a VNF instancefrom Onap
+
+info:
+ product: onap-elalto
+ service: aai
+ author: ONAP HPA Integration Team (onap-discuss@lists.onap.org)
+
+parameters:
+ - name: vnf-id
+ description: Id of VNF to be deleted (get from vnf-list)
+ type: string
+ short_option: x
+ long_option: vnf-id
+ is_optional: false
+ - name: resource-version
+ description: resource version of vnf
+ type: uuid
+ short_option: y
+ long_option: resource-version
+ is_optional: true
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/network/generic-vnfs/generic-vnf/${vnf-id}?resource-version=${resource-version}
+ method: DELETE
+ success_codes:
+ - 204
+ - 404
diff --git a/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-list-schema-elalto.yaml b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-list-schema-elalto.yaml
new file mode 100644
index 00000000..dadf8fa5
--- /dev/null
+++ b/products/onap-elalto/features/aai/src/main/resources/open-cli-schema/so-components/vnf-list-schema-elalto.yaml
@@ -0,0 +1,93 @@
+# Copyright 2019 Huawei Technologies Co., Ltd.
+#
+# 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.
+
+open_cli_schema_version: 1.0
+name: vnf-list
+description: List all the generic vnfs
+
+info:
+ product: onap-elalto
+ service: aai
+ author: ONAP CLI Team onap-discuss@lists.onap.org
+
+results:
+ direction: landscape
+ attributes:
+ - name: vnf-name
+ description: Name of VNF
+ scope: short
+ type: string
+ - name: vnf-id
+ description: Id of VNF
+ scope: short
+ type: string
+ - name: vnf-type
+ description: Type of VNF (composed of the service model name and the vf model name)
+ scope: short
+ type: string
+ - name: resource-version
+ description: resource version of VNF
+ scope: short
+ type: string
+ - name: vf-model-version-id
+ description: Version Id of its VF model
+ scope: long
+ type: string
+ - name: vf-model-invariant-id
+ description: Invariant Id of its VF model
+ scope: long
+ type: string
+ - name: vf-model-customization-id
+ description: Customization Id of its VF model
+ scope: long
+ type: string
+ - name: service-instance-name
+ description: Name of its service instance
+ scope: short
+ type: string
+ - name: service-instance-id
+ description: Id of its service instance
+ scope: short
+ type: string
+ - name: service-type
+ description: subsription service type
+ scope: long
+ type: string
+ - name: customer-name
+ description: global customer id
+ scope: long
+ type: string
+
+
+http:
+ service:
+ auth: basic
+ mode: direct
+ request:
+ uri: /aai/v16/network/generic-vnfs/
+ method: GET
+ success_codes:
+ - 200
+ result_map:
+ vnf-name: $b{generic-vnf.[*].vnf-name}
+ vnf-id: $b{generic-vnf.[*].vnf-id}
+ vnf-type: $b{generic-vnf.[*].vnf-type}
+ resource-version: $b{generic-vnf.[*].resource-version}
+ service-instance-name: $b{generic-vnf.[*].relationship-list.relationship.[*].related-to-property.[?(@.property-key == 'service-instance.service-instance-name')].property-value}
+ service-instance-id: $b{generic-vnf.[*].relationship-list.relationship.[*].relationship-data.[?(@.relationship-key == 'service-instance.service-instance-id')].relationship-value}
+ service-type: $b{generic-vnf.[*].relationship-list.relationship.[*].relationship-data.[?(@.relationship-key == 'service-subscription.service-type')].relationship-value}
+ customer-name: $b{generic-vnf.[*].relationship-list.relationship.[*].relationship-data.[?(@.relationship-key == 'customer.global-customer-id')].relationship-value}
+ vf-model-version-id: $b{generic-vnf.[*].model-version-id}
+ vf-model-invariant-id: $b{generic-vnf.[*].model-invariant-id}
+ vf-model-customization-id: $b{generic-vnf.[*].model-customization-id}
diff --git a/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java b/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java
index bc864529..3d2d4e4f 100644
--- a/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java
+++ b/profiles/command/src/main/java/org/onap/cli/fw/cmd/cmd/OpenCommandShellCmd.java
@@ -238,7 +238,7 @@ public class OpenCommandShellCmd extends OnapCommand {
}
if (this.output.equals("$stdout")) {
- if (pr.getStdout() != null) {
+ if (this.getExecutionContext() != null) {
try (FileInputStream is = new FileInputStream(this.getStdoutPath())){
outputValue = pr.streamToString(is);
} catch (IOException e) {
@@ -248,7 +248,7 @@ public class OpenCommandShellCmd extends OnapCommand {
outputValue = pr.getOutput();
} else if (this.output.equals("$stderr")) {
- if (pr.getStderr() != null) {
+ if (this.getExecutionContext() != null) {
try (FileInputStream is = new FileInputStream(this.getStderrPath())) {
outputValue = pr.streamToString(is);
} catch (IOException e) {