diff options
30 files changed, 1268 insertions, 73 deletions
@@ -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) { |