.. This work is licensed under a Creative Commons Attribution 4.0
   International License. http://creativecommons.org/licenses/by/4.0
   Copyright 2020 CMCC Technologies Co., Ltd.  All rights reserved.

.. _docs_vcpe_tosca_local:

:orphan:

vCPE Tosca Local Mode Use Case
------------------------------

Description
~~~~~~~~~~~
vCPE tosca use case is based on Network Enhanced Residential Gateway architecture specified in Technical Report 317 (TR-317), which defines how service providers deploy residential broadband services like High Speed Internet Access. The use case implementation has infrastructure services and customer service. The common infrastructure services are deployed first and shared by all customers. The use case demonstrates ONAP capabilities to design, deploy, configure and control sophisticated services.

More details on the vCPE Use Case can be found on wiki page https://wiki.onap.org/pages/viewpage.action?pageId=3246168

Local is the way how to distribute the network elements. Here we use local means we want upload the csar file to distribute the vnf and ns configurations.

Source Code
~~~~~~~~~~~
vcpe tosca local test scripts: https://git.onap.org/integration/tree/test/vcpe_tosca/local/vcpe_tosca_test.py

How to Use
~~~~~~~~~~
The use case has been automated by vcpe_tosca_test scripts. The followings are the main steps to run the use case in Integration lab environment:

1) Install ONAP CLI environment, open_cli_product is onap-dublin.
   Use https://git.onap.org/integration/tree/test/vcpe_tosca/local/scripts/install-alpine.sh to install ONAP CLI.

2) Prepare openstack test environment.

   * Create project(tenant) and user on openstack

   Openstack Horizon--Identity--Projects page

   .. image:: files/vcpe_tosca/create_project.png

   Openstack Horizon--Identity--Users page

   .. image:: files/vcpe_tosca/create_user.png

   Manage Project Members

   .. image:: files/vcpe_tosca/manage_project_user.png

   * Create and upload image for VNF

   Identify the version of the lab server, my lab server is Ubuntu 16.04.3 LTS.

   ::

      root@onap-dengyuanhong-master:~# cat /etc/lsb-release
      DISTRIB_ID=Ubuntu
      DISTRIB_RELEASE=16.04
      DISTRIB_CODENAME=xenial
      DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"


   Download the related ubuntu image from https://cloud-images.ubuntu.com/

   .. image:: files/vcpe_tosca/image.png

   Openstack Horizon--Project--Compute--Images page, create an image named image, the name must be the same with image which is defined in vnf csar file.

   .. image:: files/vcpe_tosca/create_image.png

3) Update the configuration file vcpe_config.json under https://git.onap.org/integration/tree/test/vcpe_tosca/local/config

   You should update the values if you want to run in your environment.

   Firstly, identify the Region name you used on your openstack environment, our Region name is RegionOne, it will be used by the configuration file.

   ::

      [wrsroot@controller-0 ~(keystone_admin)]$ openstack region list
      +-----------+---------------+-------------+
      | Region    | Parent Region | Description |
      +-----------+---------------+-------------+
      | RegionOne | None          |             |
      +-----------+---------------+-------------+


   Secondly, update the values according to your environment.

   ::

      "open_cli_product": set to CLI product you installed, onap-dublin is OK for this test.
      "open_cli_home": set to the oclip home path,
      "aai_url": set to msb ip and port you used,
      "msb_url": set to msb ip and port you used,
      "multicloud_url": set to msb ip and port you used,

      "complex_name": set to any complex name you want to use, the name must be unique

      "cloud_region_data": {
           "RegionOne":(update to your Region name) {
               "cloud-region-version": the cloud region version of your Cloud region, you can keep "titanium_cloud"
                "esr-system-info-id": "1111ce1f-aa78-4ebf-8d6f-4b62773e9b01",
                "service-url": the ip change to your openstack ip address,
                "user-name": the user name you created on openstack,
                "password": the user password you created on openstack,
                "system-type": "VIM",
                "ssl-insecure": true,
                "cloud-domain": "Default",
                "default-tenant": the project name you created on openstack,
                "tenant-id": the project id you created on openstack,
                "cloud-type": "openstack",
                "identity-url": the ip change to your openstack ip address,
                "system-status": "active"
           }
      }
      "cloud-owner": set to any cloud name you want to use, , the name must be unique
      "service_name": set to any service name you want to use, the name must be unique
      "customer_name": set to any customer name you want to use, the name must be unique
      "subscriber_name": set to any subscriber name you want to use, the name must be unique

      "vfc-url": set to msb ip and port you used,
      "vnfs": {
          "vgw": {
              "path": "/csar/vgw.csar", set to you vgw csar file path
              "key": "key2",
              "value": "value2"
          },
          "infra": {
              "path": "/csar/infra.csar", set to you infra csar file path
              "key": "key2",
              "value": "value2"
          },
          "vbng": {
              "path": "/csar/vbng.csar", set to you vbng csar file path
              "key": "key2",
              "value": "value2"
          },
          "vbrgemu": {
              "path": "/csar/vbrgemu.csar", set to you vbrgemu csar file path
              "key": "key2",
              "value": "value2"
          },
          "vgmux": {
              "path": "/csar/vgmux.csar", set to you vgmux csar file path
              "key": "key2",
              "value": "value2"
          }
      },
      "ns": {
           "key": "key1",
           "value": "value1",
           "path": "ns_vgw.csar", set to you ns csar file path
           "name": "vcpe11"
      },
      "location": "VCPE22_RegionOne", set to CloudOwner_CloudRegion
      "vnfm_params": {
           "GVNFMDRIVER": {
               "type": "gvnfmdriver",
               "vendor": "vfc",
               "version": "v1.0",
                "url": set to msb ip and port you used,
                "vim-id": "VCPE22_RegionOne", set to CloudOwner_CloudRegion
                "user-name": "admin",
                "user-password": "admin",
                "vnfm-version": "v1.0"
           }
      }


4) The vnf csar file include Infra, vGW, vBNG, vBRGEMU and vGMUX, and the ns csar file is ns. https://git.onap.org/integration/tree/test/vcpe_tosca/local/csar


5) The key test script is vcpe_tosca_test.py which is under https://git.onap.org/integration/tree/test/vcpe_tosca/local

   Run command is

   ::

      python3 -m unittest vcpe_tosca_test.py

   Before run the command, you should install requests: pip install requests, and update the path of configuration file vcpe_config.json.

5) Release of our environment

   ::

      vfc-nslcm: 1.3.8
      vfc-vnflcm: 1.3.8
      vfc-gvnfm: 1.3.8
      modeling-etsicatalog: 1.0.5
      multicloud-framework: 1.5.1
      multicloud-windriver: 1.5.5
      cli: onap-dublin


Note
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1) You must authorize admin to vcpe_case when managing project members in openstack.

2) You should create an image named image before running the test script, the name must be the same with image which is defined in vnf csar file.

3) You should install ONAP CLI before running the script.


Known Issues and Workaround
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1) There is time out issue when terminating vnf, the solution is refer to

   https://gerrit.onap.org/r/c/vfc/nfvo/driver/vnfm/gvnfm/+/105192

2) The process of terminating job is chaotic, the solution is refer to

   https://gerrit.onap.org/r/c/vfc/nfvo/lcm/+/105449
