Add integration support 54/92554/2
authorKanagaraj M <mkr1481@gmail.com>
Fri, 2 Aug 2019 08:51:46 +0000 (14:21 +0530)
committerKanagaraj Manickam k00365106 <kanagaraj.manickam@huawei.com>
Mon, 5 Aug 2019 14:19:34 +0000 (19:49 +0530)
Issue-ID: CLI-169

Change-Id: I816a1dbb2241e52e533411dcae26dfbf1c39e2d6
Signed-off-by: Kanagaraj Manickam k00365106 <kanagaraj.manickam@huawei.com>
deployment/zip/pom.xml
products/onap-dublin/features/integration/pom.xml [new file with mode: 0644]
products/onap-dublin/features/integration/src/main/resources/conf/ovp-tosca-vnf-provision.json [new file with mode: 0644]
products/onap-dublin/features/integration/src/main/resources/open-cli-schema/ovp-tosca-vnf-provision.yaml [new file with mode: 0644]
products/onap-dublin/features/integration/src/main/resources/script/ovp-tosca-vnf-provision.py [new file with mode: 0644]
products/onap-dublin/features/pom.xml

index cb34efe..6af31ca 100644 (file)
                                 fileset(dir:
                                 "${project.build.directory}/../../../grpc/target/lib/")
                                 }
+
                                 ant.copy(todir:
                                 "${deployUnzip}/conf") {
+                                fileset(dir:
+                                "${project.build.directory}/../../../products/target/conf/")
+                                fileset(dir:
+                                "${project.build.directory}/../../../profiles/target/conf/")
                                 fileset(file:
-                                "${basedir}/src/main/release/conf/open-cli.properties")
+                                "${basedir}/src/main/release/conf/*.properties")
                                 }
 
                                 ant.copy(todir:
-                                "${deployUnzip}/conf") {
-                                fileset(file:
-                                "${basedir}/src/main/release/conf/log4j.properties")
+                                "${deployUnzip}/script") {
+                                fileset(dir:
+                                "${project.build.directory}/../../../products/target/script/")
                                 }
 
                                 ant.copy(todir:
diff --git a/products/onap-dublin/features/integration/pom.xml b/products/onap-dublin/features/integration/pom.xml
new file mode 100644 (file)
index 0000000..10ca092
--- /dev/null
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+         http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.cli</groupId>
+        <artifactId>cli-products-onap-dublin-features</artifactId>
+        <version>4.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>cli-products-onap-dublin-features-integration</artifactId>
+    <name>cli/products/onap-dublin/features/integration</name>
+    <packaging>jar</packaging>
+    <build>
+        <plugins>
+            <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+            <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-resources-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/products/onap-dublin/features/integration/src/main/resources/conf/ovp-tosca-vnf-provision.json b/products/onap-dublin/features/integration/src/main/resources/conf/ovp-tosca-vnf-provision.json
new file mode 100644 (file)
index 0000000..f3a5354
--- /dev/null
@@ -0,0 +1,141 @@
+{
+    "open_cli_product" : "onap-dublin",
+    "open_cli_home" : "/opt/vtp",
+    "aai_url" : "https://10.12.5.224:30233",
+    "aai_username" : "AAI",
+    "aai_password" : "AAI",
+
+    "sdc_onboarding_url" : "http://10.43.89.129:8081",
+    "sdc_catalog_url" : "http://10.12.5.224:30205",
+    "sdc_password" : "demo123456!",
+    "sdc_creator" : "cs0008",
+    "sdc_tester" : "jm0007",
+    "sdc_governor" : "gv0001",
+    "sdc_operator" : "op0001",
+    "sdc_consumer" : "ocomp",
+
+    "multicloud_url" : "http://10.12.5.224:30280",
+
+    "//" : "#Parameters required to create cloud complex",
+    "complex_name" : "OVP-LCM",
+    "street1" : "street1",
+    "street2" : "street2",
+    "physical_location" : "phy_type",
+    "data_center_code" : "ocomp",
+    "latitude" : "32.89948",
+    "longitude" : "97.045443",
+    "lata" : "example-lata-val-28399",
+    "elevation" : "example-elevation-val-28399",
+    "region" : "northwest",
+    "state" : "oregon",
+    "city" : "hillsboro",
+    "postal-code" : "00000",
+    "country" : "USA",
+    "identity_url" : "http://10.12.11.1:5000/v3",
+    "service-model-name" : "usn",
+    "//" : "#Dictionary containing cloud regions and their Parameters",
+
+    "cloud_region_data":{
+        "ONAP-POD-01-Rail-05":{
+            "cloud-region-version" : "titanium_cloud",
+            "esr-system-info-id":"5c85ce1f-aa78-4ebf-8d6f-4b62784e9bc7",
+            "service-url": "http://10.12.11.1:5000/v3",
+            "user-name":"${cloud-username}",
+            "password":"${cloud-password}",
+            "system-type": "VIM",
+            "ssl-insecure":true,
+            "cloud-domain":"Default",
+            "default-tenant":"Integration-HPA",
+            "tenant-id" : "709ba629fe194f8699b12f9d6ffd86a0",
+            "cloud-type" : "openstack",
+            "identity-url": "WillBeUpdatedByMultiCloud",
+            "system-status":"active"
+        }
+    },
+
+    "//" : "#Parameters to register cloud region",
+    "cloud-owner" : "CloudOwner",
+    "owner-defined-type" : "t1",
+    "cloud-zone" : "CloudZone",
+
+    "service_name" : "USN",
+    "customer_name" : "ocomp",
+    "subscriber_name" : "ocomp",
+
+    "//" : "Onboarding parameters",
+    "vendor-name" : "Huawei",
+    "entitlement-pool-name" : "ovp-pool",
+    "entitlement-description" : "ovp-pool",
+    "start-date" : "08/01/2019",
+    "expiry-date" : "12/31/2019",
+    "key-group-name" : "ovp-key",
+    "key-group-type" : "Universal",
+    "feature-grp-name" : "ovp-feature",
+    "feature-grp-desc" : "ovp-feature",
+    "part-no" : "ovp-part",
+    "agreement-name" : "ovp-agreement",
+    "agreement-desc" : "ovp-agreement",
+
+    "onboarding-method" : "NetworkPackage",
+
+    "//" : "Be sure to include single quotes in parameters that have spaces",
+    "project-code" : "000000",
+    "service-model-name" : "usn",
+    "service-model-desc" : "'usn service'",
+    "icon-id" : "network_l_1-3",
+    "category-display" : "'Network L1-3'",
+    "category" : "'network l1-3'",
+
+    "service-test-remarks" : "ovp test",
+    "service-accept-remarks" : "accepted",
+    "service-approve-remarks" : "approved",
+
+    "//" : "#Parameters to vfc",
+    "vfc-url": "http://10.12.5.224:30280",
+    "vnfs":{
+        "usn":{
+            "path": "/opt/vtp/data/usn.csar",
+            "csar-id": "You need change it",
+            "vsp-name" : "ovp-usn",
+            "vsp-desc" : "ovp usn",
+            "vsp-version" : "1.0",
+            "vf-name" : "ovp-vf",
+            "vf-description" : "ovp vf",
+            "vf-remarks" :"ovp test",
+            "vf-version" : "1.0",
+            "key": "key2",
+            "value": "value2"
+        }
+    },
+    "ns":{
+        "csar-id": "You need change it",
+        "key": "key1",
+        "value": "value1",
+        "path": "/opt/vtp/data/usn_service.csar",
+        "name": "ovp-usn"
+    },
+    "location": "CloudOwner_ONAP-POD-01-Rail-05",
+    "vnfm_params":{
+        "GVNFMDRIVER":{
+            "type": "gvnfmdriver",
+            "vendor": "vfc",
+            "version": "v1.0",
+            "url": "http://msb-iag:80/",
+            "vim-id": "CloudOwner_ONAP-POD-01-Rail-05",
+            "user-name": "admin",
+            "user-password": "admin",
+            "vnfm-version": "v1.0"
+        },
+        "HWVNFMDRIVER":{
+            "type": "hwvnfmdriver",
+            "vendor": "vfc",
+            "version": "v1.0",
+            "url": "http://msb-iag:80/",
+            "vim-id": "CloudOwner_ONAP-POD-01-Rail-05",
+            "user-name": "admin",
+            "user-password": "admin",
+            "vnfm-version": "v1.0"
+        }
+    },
+     "sdc-controller-id": "2"
+}
diff --git a/products/onap-dublin/features/integration/src/main/resources/open-cli-schema/ovp-tosca-vnf-provision.yaml b/products/onap-dublin/features/integration/src/main/resources/open-cli-schema/ovp-tosca-vnf-provision.yaml
new file mode 100644 (file)
index 0000000..b98bef7
--- /dev/null
@@ -0,0 +1,90 @@
+# 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: tosca-vnf-provision
+description: |
+ Provision TOSCA based VNF using ONAP.
+ More details: https://wiki.lfnetworking.org/display/LN/TOSCA+VNF+Validation+Planning
+
+info:
+  product: onap-dublin
+  service: vnf-validation
+  author: ONAP VTP Team onap-discuss@lists.onap.org
+
+parameters:
+  - name: config-json
+    description: Configuration file path
+    type: string
+    short_option: x
+    long_option: config-json
+    default_value: $s{env:OPEN_CLI_HOME}/conf/ovp-tosca-vnf-provision.json
+    is_optional: false
+  - name: vsp
+    description: Path to the ONAP vendor service product (VSP) for the VNF to provision
+    type: binary
+    short_option: y
+    long_option: vsp
+    is_optional: false
+  - name: vnf-csar
+    description: Path to the TOSCA CSAR for the VNF to provision
+    type: binary
+    short_option: r
+    long_option: vnf-csar
+    is_optional: false
+  - name: ns-csar
+    description: Path to the TOSCA CSAR for the NS service to provision
+    type: binary
+    short_option: b
+    long_option: ns-csar
+    is_optional: true
+    default: false
+  - name: vnfm-driver
+    description: VNFM driver to use
+    type: string
+    short_option: c
+    long_option: vnfm-driver
+    is_optional: false
+
+results:
+  direction: portrait
+  attributes:
+    - name: vnf-id
+      description: ONAP VNF instance id
+      scope: short
+      type: string
+    - name: vnf-status
+      description: Onap VNF status
+      scope: short
+      type: string
+    - name: ns-id
+      description: Onap NS service instance id
+      scope: short
+      type: string
+    - name: ns-status
+      description: Onap NS status
+      scope: short
+      type: string
+cmd:
+  command:
+    -  python $s{env:OPEN_CLI_HOME}/script/ovp-tosca-vnf-provision.py --result-json $s{tmp:result.json} --config-json ${config-json} --vsp ${vsp} --vnf-csar ${vnf-csar} --ns-csar ${ns-csar} --vnfm-driver ${vnfm-driver}
+  success_codes:
+    - 0
+  working_directory: .
+  output: $s{tmp:result.json}
+  result_map:
+    vnf-id: $o{$.vnf_id}
+    vnf-status: $o{$.vnf_status}
+    ns-id: $o{$.ns_id}
+    ns-status: $o{$.vnf_status}
\ No newline at end of file
diff --git a/products/onap-dublin/features/integration/src/main/resources/script/ovp-tosca-vnf-provision.py b/products/onap-dublin/features/integration/src/main/resources/script/ovp-tosca-vnf-provision.py
new file mode 100644 (file)
index 0000000..dddb0a0
--- /dev/null
@@ -0,0 +1,456 @@
+#!/usr/bin/python
+
+import json
+import os
+import time
+import argparse
+import sys
+import requests
+import __main__
+
+def get_parameters(file):
+    parameters = json.load(file)
+    return parameters
+
+def get_out_helper(in_string):
+    out_list = (((in_string.replace('-','')).replace('|', '')).replace('+', '')).split()
+    return out_list
+
+def get_out_helper_2(in_string):
+    out_list = ((in_string.replace('|', '')).replace('+', '')).split()
+    return out_list
+
+def set_open_cli_env(parameters):
+    os.environ["OPEN_CLI_PRODUCT_IN_USE"] = parameters["open_cli_product"]
+    os.environ["OPEN_CLI_HOME"] = parameters["open_cli_home"]
+
+def create_complex(parameters):
+    complex_create_string = "oclip complex-create -j {} -r {} -x {} -y {} -lt {} -l {} -i {} -lo {} \
+                         -S {} -la {} -g {} -w {} -z {} -k {} -o {} -q {} -m {} -u {} -p {}".format(parameters["street2"], \
+                          parameters["physical_location"], parameters["complex_name"], \
+                          parameters["data_center_code"], parameters["latitude"], parameters["region"], \
+                          parameters["street1"], parameters["longitude"], parameters["state"], \
+                          parameters["lata"], parameters["city"], parameters["postal-code"], \
+                          parameters["complex_name"], parameters["country"], parameters["elevation"], \
+                          parameters["identity_url"], parameters["aai_url"], parameters["aai_username"], \
+                          parameters["aai_password"])
+
+    os.system(complex_create_string)
+
+def create_vlm(parameters):
+    vlm_create_string = "oclip vlm-create -x {} -u {} -p {} -m {}".format(parameters["vendor-name"], \
+      parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_onboarding_url"])
+    command_out = (os.popen(vlm_create_string)).read()
+    out_list = get_out_helper(command_out)
+    vlm_id = out_list[3]
+    vlm_version = out_list[5]
+
+    entitlement_string = "oclip vlm-entitlement-pool-create -x {} -y {} -e {} -z {} -k {} -g {} -l {} -u {} -p {} -m {}".format( \
+      parameters["entitlement-pool-name"], vlm_id, vlm_version, parameters["entitlement-description"], parameters["vendor-name"], \
+      parameters["expiry-date"], parameters["start-date"],  parameters["sdc_creator"], parameters["sdc_password"], \
+      parameters["sdc_onboarding_url"])
+    command_out = (os.popen(entitlement_string)).read()
+    entitlement_id = (get_out_helper(command_out))[3]
+
+
+    key_group_string = "oclip vlm-key-group-create -c {} -e {} -x {} -y {} -u {} -p {} -m {}".format(vlm_id, vlm_version, \
+      parameters["key-group-name"], parameters["key-group-type"],  parameters["sdc_creator"], parameters["sdc_password"], \
+      parameters["sdc_onboarding_url"])
+    command_out = (os.popen(key_group_string)).read()
+    key_group_id = (get_out_helper(command_out))[3]
+
+    feature_group_string = "oclip vlm-feature-group-create -x {} -y {} -e {} -z {} -g {} -b {} -c {} -u {} -p {} -m {}".format(
+      parameters["feature-grp-name"], vlm_id, vlm_version, parameters["feature-grp-desc"], key_group_id, entitlement_id, \
+      parameters["part-no"], parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_onboarding_url"])
+    command_out = (os.popen(feature_group_string)).read()
+    feature_group_id = (get_out_helper(command_out))[3]
+
+    agreement_string = "oclip vlm-aggreement-create -x {} -y {} -e {} -z {} -g {} -u {} -p {} -m {}".format(parameters["agreement-name"], \
+      vlm_id, vlm_version, parameters["agreement-desc"], feature_group_id, parameters["sdc_creator"], parameters["sdc_password"], \
+      parameters["sdc_onboarding_url"])
+    command_out = (os.popen(agreement_string)).read()
+    agreement_id = (get_out_helper(command_out))[3]
+
+    submit_string = "oclip vlm-submit -x {} -y {} -u {} -p {} -m {}".format(vlm_id, vlm_version, parameters["sdc_creator"], \
+      parameters["sdc_password"], parameters["sdc_onboarding_url"])
+    os.system(submit_string)
+
+    output = [feature_group_id, agreement_id, vlm_version, vlm_id ]
+    return output
+
+def create_vsp(parameters, in_list):
+    vnfs = parameters["vnf"]
+    vsp_dict = {}
+    for name, value in vnfs.iteritems():
+        create_string = "oclip vsp-create -j {} -o {} -e {} -x {} -y {} -i {} -c {} -g {} -u {} -p {} -m {}".format( in_list[0], \
+          parameters["onboarding-method"], parameters["vendor-name" ], value.get("vsp-name"), value.get("vsp-desc"), in_list[1], \
+          in_list[2], in_list[3], parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_onboarding_url"] )
+        command_out = (os.popen(create_string)).read()
+        out_list = get_out_helper(command_out)
+        vsp_id = out_list[3]
+        vsp_version = out_list[5]
+
+        os.system("oclip vsp-add-artifact -x {} -y {} -z {} -u {} -p {} -m {}".format(vsp_id, vsp_version, value.get("path"), \
+          parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_onboarding_url"]))
+
+        os.system("oclip vsp-validate -x {} -y {} -u {} -p {} -m {}".format(vsp_id, vsp_version, parameters["sdc_creator"], \
+          parameters["sdc_password"], parameters["sdc_onboarding_url"]))
+
+        os.system("oclip vsp-submit -x {} -y {} -u {} -p {} -m {}".format(vsp_id, vsp_version, parameters["sdc_creator"], \
+          parameters["sdc_password"], parameters["sdc_onboarding_url"]))
+
+        os.system("oclip vsp-package -x {} -y {} -u {} -p {} -m {}".format(vsp_id, vsp_version, parameters["sdc_creator"], \
+          parameters["sdc_password"], parameters["sdc_onboarding_url"]))
+
+        vsp_ids[name] = vsp_id
+    return vsp_ids
+
+def create_vf_model(parameters, vsp_dict):
+    vnfs = parameters["vnfs"]
+    vf_dict = {}
+    for name, value in vnfs.iteritems():
+        create_string = "oclip vf-model-create -y {} -g {} -x {} -z {} -b {} -u {} -p {} -m {}".format(value.get("vf-description"), \
+          value.get("vsp-version"), value.get("vf-name"), parameters["vendor-name"], vsp_dict[name], \
+          parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_catalog_url"])
+        os.system(create_string)
+
+        output = (os.popen("oclip vf-model-list -m {} -u {} -p {} | grep {}".format(parameters["sdc_catalog_url"], \
+          parameters["sdc_creator"], parameters["sdc_password"], value.get("vf-name")))).read()
+        output = (get_out_helper_2(output))
+
+        vf_unique_id = output[1]
+
+        # checkout
+        output = (os.popen("oclip vf-model-checkout --host-url {} --host-username {} --host-password {} --vf-model-uuid {} --format json".format(
+             parameters["sdc_catalog_url"], parameters["sdc_creator"], parameters["sdc_password"], vf_unique_id))).read()
+        vf_unique_id = (json.loads(output))['ID']
+
+        # add consumer, if already exist , just ignore, below command would fail simply !!
+        os.system("oclip sdc-consumer-create --consumer-name {}".format(parameters["sdc_consumer"]))
+
+        def get_vnf_name(vnf_csar_path):
+            return vnf_csar_path.replace("_"," ").replace(".", " ").replace("-"," ")
+
+        # add artifact
+        os.system("oclip vf-model-add-artifact --host-url {} --host-username {} --host-password {} --vf-model-uuid {} --artifact {} --artifact-name {}".format(
+             parameters["sdc_catalog_url"], parameters["sdc_consumer"], parameters["sdc_password"], vf_unique_id, vnf_csar, get_vnf_name(vnf_csar)))
+
+        # check-in
+        os.system("oclip vf-model-checkin --host-url {} --host-username {} --host-password {} --vf-model-uuid {}".format(
+             parameters["sdc_catalog_url"], parameters["sdc_creator"], parameters["sdc_password"], vf_unique_id))
+
+        os.system("oclip vf-model-certify -b {} -r {} -u {} -p {} -m {}".format(vf_unique_id, value.get("vf-remarks"), \
+          parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_catalog_url"]))
+
+        #Check for new parameters after certification
+        output = (os.popen("oclip vf-model-list -m {} -u {} -p {} | grep {}".format(parameters["sdc_catalog_url"], \
+                              parameters["sdc_creator"], parameters["sdc_password"], value.get("vf-name")))).read()
+        output = (get_out_helper_2(output))
+
+        vf_dict[name] = output[1]
+
+    return vf_dict
+
+
+def create_service_model(parameters, vf_dict):
+    vnfs = parameters["vnfs"]
+
+    create_string = "oclip service-model-create -z {} -y {} -e {} -x {} -c {} -b {} -u {} -p {} -m {} |grep ID".format(parameters["project-code"], \
+    parameters["service-model-desc"], parameters["icon-id"], parameters["service-model-name"], parameters["category-display"], \
+    parameters["category"],parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_catalog_url"])
+
+    service_model_id = (get_out_helper_2((os.popen(create_string)).read()))[1]
+
+    # checkout
+    output = (os.popen("oclip service-model-checkout --host-url {} --host-username {} --host-password {} --service-model-uuid {} --format json".format(
+         parameters["sdc_catalog_url"], parameters["sdc_creator"], parameters["sdc_password"], service_model_id))).read()
+    service_model_id = (json.loads(output))['ID']
+
+    # add consumer, if already exist , just ignore, below command would fail simply !!
+    os.system("oclip sdc-consumer-create --consumer-name {}".format(parameters["sdc_consumer"]))
+
+    for name, value in vnfs.iteritems():
+        output = (os.popen("oclip service-model-add-vf -x {} -b {} -y {} -z {} -u {} -p {} -m {}".format(service_model_id, \
+                   parameters["vf-version"], vf_dict[name], value.get("vf-name"), parameters["sdc_creator"], \
+                   parameters["sdc_password"], parameters["sdc_catalog_url"] ))).read()
+        vf_unique_id = (json.loads(output))['ID']
+        vf_uuid = (json.loads(output))['UUID']
+
+        def get_ns_name(ns_csar_path):
+            return vnf_csar_path.replace("_"," ").replace(".", " ").replace("-"," ")
+
+        # add artifact
+        os.system("oclip service-model-add-artifact --host-url {} --host-username {} --host-password {} --service-uniqueId {} --artifact {} --artifact-name {}".format(
+             parameters["sdc_catalog_url"], parameters["sdc_consumer"], parameters["sdc_password"], vf_unique_id, ns_csar, get_vnf_name(ns_csar)))
+
+        # set properties
+        os.system("oclip service-model-set-property --host-url {} --host-username {} --host-password {} --service-uniqueId {} --resource-uuid {} --resource-uniqueId {} --property-name nf_type --property-value {}".format(
+            parameters["sdc_catalog_url"], parameters["sdc_consumer"], parameters["sdc_password"], service_model_id , vf_unique_id, vf_uuid, vnfm_driver))
+
+    # check-in
+    os.system("oclip service-model-checkin --host-url {} --host-username {} --host-password {} --service-model-uuid {}".format(
+         parameters["sdc_catalog_url"], parameters["sdc_creator"], parameters["sdc_password"], service_model_id))
+
+
+    os.system("oclip service-model-test-request -b {} -r {} -u {} -p {} -m {}".format(service_model_id, parameters["service-test-remarks"], \
+    parameters["sdc_creator"], parameters["sdc_password"], parameters["sdc_catalog_url"]))
+
+    os.system("oclip service-model-test-start -b {} -u {} -p {} -m {}".format(service_model_id, parameters["sdc_tester"], \
+    parameters["sdc_password"], parameters["sdc_catalog_url"]))
+
+    os.system("oclip service-model-test-accept -b {} -r {} -u {} -p {} -m {}".format(service_model_id, parameters["service-accept-remarks"], \
+    parameters["sdc_tester"], parameters["sdc_password"], parameters["sdc_catalog_url"]))
+
+    #Get uniqueId for the service model
+    service_model_values = (os.popen("oclip service-model-list -u {} -p {} -m {} |grep {}".format(parameters["sdc_creator"], \
+      parameters["sdc_password"], parameters["sdc_catalog_url"], parameters["service-model-name"]))).read()
+    service_model_values = get_out_helper_2(service_model_values)
+    service_model_uniqueId = (service_model_values)[1]
+
+    os.system("oclip service-model-approve -b {} -r {} -u {} -p {} -m {}".format(service_model_uniqueId, parameters["service-approve-remarks"], \
+    parameters["sdc_governor"], parameters["sdc_password"], parameters["sdc_catalog_url"]))
+
+    os.system("oclip service-model-distribute -b {} -u {} -p {} -m {}".format(service_model_uniqueId, parameters["sdc_operator"], \
+    parameters["sdc_password"], parameters["sdc_catalog_url"]))
+
+    return service_model_values
+
+def register_cloud_helper(cloud_region, values, parameters):
+    #Create Cloud
+    cloud_create_string = 'oclip cloud-create -e {} -b {} -I {{\\\\\\"openstack-region-id\\\\\\":\\\\\\"{}\\\\\\"}} \
+    -x {} -y {} -j {} -w {} -l {} -url {} -n {} -q {} -r {} -Q {} -i {} -g {} -z {} -k {} -c {} -m {} -u {} -p {}'.format(
+      values.get("esr-system-info-id"), values.get("user-name"), cloud_region, parameters["cloud-owner"], \
+      cloud_region, values.get("password"), values.get("cloud-region-version"), values.get("default-tenant"), \
+      values.get("service-url"), parameters["complex_name"], values.get("cloud-type"), parameters["owner-defined-type"], \
+      values.get("system-type"), values.get("identity-url"), parameters["cloud-zone"], values.get("ssl-insecure"), \
+      values.get("system-status"), values.get("cloud-domain"), parameters["aai_url"], parameters["aai_username"], \
+      parameters["aai_password"])
+
+
+    os.system(cloud_create_string)
+
+    #Associate Cloud with complex
+    complex_associate_string = "oclip complex-associate -x {} -y {} -z {} -m {} -u {} -p {}".format(parameters["complex_name"], \
+      cloud_region, parameters["cloud-owner"], parameters["aai_url"], parameters["aai_username"], parameters["aai_password"])
+    os.system(complex_associate_string)
+
+    #Register Cloud with Multicloud
+    multicloud_register_string = "oclip multicloud-register-cloud -y {} -x {} -m {}".format(parameters["cloud-owner"], \
+      cloud_region, parameters["multicloud_url"])
+    os.system(multicloud_register_string)
+
+def register_all_clouds(parameters):
+    cloud_dictionary = parameters["cloud_region_data"]
+    for cloud_region, cloud_region_values in cloud_dictionary.iteritems():
+        register_cloud_helper(cloud_region, cloud_region_values, parameters)
+
+def create_service_type(parameters):
+    create_string = "oclip service-type-create -x {} -m {} -u {} -p {}".format( parameters["service_name"], \
+      parameters["aai_url"], parameters["aai_username"], parameters["aai_password"])
+    os.system(create_string)
+
+def create_customer(parameters):
+    create_string = "oclip customer-create -x {} -y {} -m {} -u {} -p {}".format( parameters["customer_name"], \
+    parameters["subscriber_name"], parameters["aai_url"], parameters["aai_username"], parameters["aai_password"])
+    os.system(create_string)
+
+def add_customer_subscription(parameters):
+    subscription_check = 0
+    for cloud_region, cloud_region_values in (parameters["cloud_region_data"]).iteritems():
+      if subscription_check == 0 :
+        subscription_string = "oclip subscription-create -x {} -c {} -z {} -e {} -y {} -r {} -m {} -u {} -p {}".format(\
+          parameters["customer_name"], cloud_region_values.get("tenant-id"), parameters["cloud-owner"], parameters["service_name"],\
+          cloud_region_values.get("default-tenant"), cloud_region, parameters["aai_url"], parameters["aai_username"], parameters["aai_password"] )
+      else:
+        subscription_string = "oclip subscription-cloud-add -x {} -c {} -z {} -e {} -y {} -r {} -m {} -u {} -p {}".format(\
+          parameters["customer_name"], cloud_region_values.get("tenant-id"), parameters["cloud-owner"], parameters["service_name"],\
+          cloud_region_values.get("default-tenant"), cloud_region, parameters["aai_url"], parameters["aai_username"], parameters["aai_password"] )
+      os.system(subscription_string)
+      subscription_check+=1
+
+def register_vnfm_helper(vnfm_key, values, parameters):
+    #Create vnfm
+    vnfm_create_string = 'oclip vnfm-create -b {} -c {} -e {} -v {} -g {} -x {} -i {} -j {} -q {} \
+    -m {} -u {} -p {}'.format(vnfm_key, values.get("type"), values.get("vendor"), \
+      values.get("version"), values.get("url"), values.get("vim-id"), \
+      values.get("user-name"), values.get("user-password"), values.get("vnfm-version"), \
+      parameters["aai_url"], parameters["aai_username"], parameters["aai_password"])
+
+    os.system(vnfm_create_string)
+
+def register_vnfm(parameters):
+    vnfm_params = parameters["vnfm_params"]
+    for vnfm_key, vnfm_values in vnfm_params.iteritems():
+        register_vnfm_helper(vnfm_key, vnfm_values, parameters)
+
+
+def onboard_vnf(parameters):
+    vnfs = parameters["vnfs"]
+    vnf_onboard_outputs = {}
+
+    for key, value in vnfs.items():
+        vnf_onboard_string = 'oclip vfc-catalog-onboard-vnf -c {}'.format(value.get("csar-id"))
+        vnf_onboard_outs[key] = (os.popen(ns_onboard_string)).read()
+    return vnf_onboard_outputs
+
+def onboard_ns(parameters):
+    ns_onboard_string = 'oclip vfc-catalog-onboard-ns -c {}'.format(parameters["ns-csar-id"])
+    ns_onboard_out = (os.popen(ns_onboard_string)).read()
+    return ns_onboard_out
+
+def create_ns(parameters, csar_id):
+    ns = parameters["ns"]
+    ns_create_string = 'oclip vfc-nslcm-create -m {} -c {} -n {} -q {} -S {}'.format(parameters["vfc-url"], \
+       csar_id, ns.get("name"), parameters["customer_name"], parameters["service_name"])
+    print ns_create_string
+    ns_create_out = (os.popen(ns_create_string)).read()
+    print ns_create_out
+    ns_instance_id = (get_out_helper_2(ns_create_out))[3]
+    return ns_instance_id
+
+def instantiate_ns(parameters, ns_instance_id):
+    ns_instantiate_string = 'oclip vfc-nslcm-instantiate -m {} -i {} -c {} -n {}'.format(parameters["vfc-url"], \
+        ns_instance_id, parameters["location"], parameters["sdc-controller-id"])
+    print ns_instantiate_string
+
+    ns_instantiate_out = (os.popen(ns_instantiate_string)).read()
+    return ns_instantiate_out
+
+def create_ns_package(parameters):
+    ns = parameters["ns"]
+    create_ns_string = 'oclip vfc-catalog-create-ns -m {} -c {} -e {}'.format(parameters["vfc-url"], \
+      ns.get("key"), ns.get("value"))
+    cmd_out = (os.popen(create_ns_string)).read()
+    out_list =  get_out_helper_2(cmd_out)
+    return out_list[4]
+
+def create_vnf_package(parameters):
+    vnfs = parameters["vnfs"]
+    outputs = {}
+
+    for vnf_key, vnf_values in vnfs.iteritems():
+        create_vnf_string = 'oclip vfc-catalog-create-vnf -m {} -c {} -e {}'.format(parameters["vfc-url"], \
+          vnf_values.get("key"), vnf_values.get("value"))
+        cmd_out = (os.popen(create_vnf_string)).read()
+        out_list =  get_out_helper_2(cmd_out)
+        outputs[vnf_key] = out_list[4]
+
+    return outputs
+
+def upload_ns_package(parameters, ns_package_output):
+    ns = parameters["ns"]
+    ns_upload_string = '{}/api/nsd/v1/ns_descriptors/{}/nsd_content'.format(parameters["vfc-url"], ns_package_output)
+    print ns_upload_string
+    print ns.get("path")
+    resp = requests.put(ns_upload_string, files={'file': open(ns.get("path"), 'rb')})
+    return resp
+
+def upload_vnf_package(parameters, vnf_package_output):
+    vnfs = parameters["vnfs"]
+    for vnf_key, vnf_values in vnfs.iteritems():
+        vnf_upload_str = '{}/api/vnfpkgm/v1/vnf_packages/{}/package_content'.format(parameters["vfc-url"], \
+          vnf_package_output[vnf_key], vnf_package_output[vnf_key])
+        resp = requests.put(vnf_upload_str, files={'file': open(vnf_values.get("path"), 'rb')})
+    return resp
+
+
+def provision_vnf():
+
+    result_json = {}
+    result_json['vnf_id'] = ''
+    result_json['vnf_status'] = ''
+    result_json['ns_id'] = ''
+    result_json['ns_status'] = ''
+
+    # 1.Setup cloud and service
+    #setup cloud and region
+    create_complex(parameters)
+    register_all_clouds(parameters)
+
+    # setup subscription and customer
+    create_service_type(parameters)
+    create_customer(parameters)
+    add_customer_subscription(parameters)
+
+    # setup vnfm
+    register_vnfm(parameters)
+
+    # Setup License
+    vlm_output = create_vlm(parameters)
+    print "vlm parameters={}".format(vlm_output)
+
+    # 2. on-board VSP
+    vsp_id = create_vsp(parameters, vlm_output)
+    print "vsp id={}".format(vsp_id)
+
+    # 3. model VF
+    vf_model_dict = create_vf_model(parameters, vsp_id)
+    print "vf model parameters={}".format(vf_model_dict)
+    vf_id = vf_model_dict["vf_id"]
+    vf_unique_id = vf_model_dict["vf_unique_id"]
+
+    # 4. model NS and 5. Approve and distribute
+    service_model_list = create_service_model(parameters, vf_unique_id)
+    print "service model parameters={}".format(service_model_list)
+
+    # 6. onboard VNF
+    vnf_onboard_output = onboard_vnf(parameters)
+    print vnf_onboard_output
+
+    # 7. onboard NS
+    ns_onboard_out = onboard_ns(parameters)
+    print ns_onboard_out
+
+    # 8. create NS
+    ns_instance_id = create_ns(parameters, ns_package_output)
+    print ns_instance_id
+
+    instantiate_ns_output = instantiate_ns(parameters, ns_instance_id)
+    print instantiate_ns_output
+
+    return result_json
+
+def persist_result(result_path, result):
+    f = open(result_json_path, "w")
+
+    result_json = {}
+    result_json['vnf_id'] = result['vnf_id']
+    result_json['vnf_status'] = result['vnf_status']
+    result_json['ns_id'] = result['ns_id']
+    result_json['ns_status'] = result['ns_status']
+
+    f.write(json.dumps(result_json))
+
+    print result_json
+
+    f.close()
+
+#Main
+parser = argparse.ArgumentParser()
+parser.add_argument('--config-json', action='store', dest='config_file_path', help='Config file path')
+parser.add_argument('--vsp', action='store', dest='vsp', help='ONAP VSP')
+parser.add_argument('--vnf-csar', action='store', dest='vnf_csar', help='VNF CSAR')
+parser.add_argument('--ns-csar', action='store', dest='ns_csar', help='NS CSAR')
+parser.add_argument('--vnfm-driver', action='store', dest='vnfm_driver', help='gVNFM or hwVNFM')
+parser.add_argument('--result-json', action='store', dest='result_json_path', help='Output result json')
+
+#Retrive the params
+args = parser.parse_args()
+print args
+
+config_file = open(args.config_file_path)
+vsp = args.vsp
+vnf_csar = args.vnf_csar
+ns_csar = args.ns_csar
+vnfm_driver = args.vnfm_driver
+result_json_path = args.result_json_path
+
+# setup CLI
+parameters = get_parameters(config_file)
+set_open_cli_env(parameters)
+
+output = provision_vnf()
+
+persist_result(result_json_path, output)
+
+print "Provision is completed !"
\ No newline at end of file
index 4fa428b..95b2533 100644 (file)
@@ -41,6 +41,7 @@
         <module>sdnc</module>
         <module>so</module>
         <module>vnfsdk</module>
+        <module>integration</module>
     </modules>
 
      <build>