.. This work is licensed under a Creative Commons Attribution 4.0
   International License.
.. http://creativecommons.org/licenses/by/4.0
.. _instantiate:

Instantiate Service, VNF, VF modules and Network
================================================


Overview
--------

Using VID with A-La-Carte method means that the user needs to performed
by himself the instantiation of each object  : service, VNF(s), VF module(s),
network(s).

ONAP to VIM interactions will occurs when instantiating/deleting VF module(s)
or Network(s). In case of an Openstack VIM, Heat Stack(s) will
be created/deleted.

In the following description, the service model in SDC was composed of 1 VF
and 1 Virtual Link (Generic Neutron Network)

To be able to instantiate VF-module or Network object, some data need to be
declared in ONAP SDNC using SDNC Rest API. It is the place where to put
the instance specific values such as an IP address value specific
to the VNF instance for example.

In VID, terminologies are sometimes different than in other components:

VNF in VID  = VF in SDC

Node instance = VF in SDC

Network = Virtual Link in SDC


Pre-requisites
--------------

pre-instantiation operations must have been performed in AAI and VID,
via Rest API, to declare some values for:

- Subscriber Name (= customer in AAI)
- Service Type or product family (= service subscription in AAI)
- Project
- Owning Entity
- Line Of Business
- Platform
- LCP Region (= CloudOwner/RegionId in AAI)
- Tenant

see, in the ONAP User Guides, section about adding a CloudSite
and section about pre-instantiation Operations


Access to VID portal
--------------------

.. figure:: images/onap-portal.png
   :align: center

Select the VID icon

.. figure:: images/vid-icon-on-portal.png
   :align: center


Here after, the VID Home page starts

.. figure:: images/home.png
   :align: center


SDNC API selection
------------------

Select the API for "A-la-carte"

There are two choices:

- VNF_API (old) : VID will use the (old) "VNF" SDNC API
  to get/check some parameters
- GR_API (new) : VID will use the "Generic Resource"
  SDNC API to get/check some parameters

.. figure:: images/API_selection.png
   :align: center



Instantiate Service
-------------------

Click Browse SDC Service Models and search for the service to instantiate.

The view show only service models in the DISTRIBUTED state.

.. figure:: images/browse-service-models.png
   :align: center


Select a service and click Deploy.

A dialog box displays.

Complete the fields indicated by the red star and click Confirm.

.. figure:: images/create-service-instance-alacarte.png
   :align: center

A status ox appears that shows the ONAP SO instantiation progress
as well as any messages associated with the process.

.. figure:: images/create-service-instance-alacarte-success.png
   :align: center

A Service object is created in ONAP.

Click Close and next screen should appear.
It will allow to declare VNF(s) and Network(s)
that are part of the service model composition.

.. figure:: images/create-service-instance-alacarte-VNF-network.png
   :align: center


Instantiate a VNF
-----------------

From previous screen, it is possible to declare a VNF: click on
"Add node instance" and select the VNF you want to instantiate in the list

The  following screen should appear:

.. figure:: images/create-vnf-instance-alacarte.png
   :align: center

Complete the fields indicated by the red star and click Confirm.

A VNF object will be declared in ONAP.

Once, ONAP SO process is finished, click on close button.

The following screen then should appear:


.. figure:: images/create-service-instance-alacarte-after-vnf-instantiated.png
   :align: center


Warning: a this step, no VNF instance (e.g. VM) is created on the Cloud Platform.

Click on "i" blue button to obtain VNF instance display information.

From this screen, it will be possible to get:

- the service instance id value
- the VNF Type value

Those information will be necessary for the "SDNC preload" step
to instantiate the VF module

Close that screen


Instantiate VF Module
---------------------

It is now possible to declare a VF Module: click on
"Add VF-Module" and select the VF-module you want to instantiate in the list

The  following screen should appear:

.. figure:: images/create-vfmodule-instance-alacarte.png
   :align: center

From this screen, it will be possible to get:

- "Model Name" value

At this step, with this "A-La-Carte" method, it is necessary to declare
some information in ONAP SDNC.

SDNC needs to be aware about the VNF before trying to use ONAP SO
to instantiate the VF-module.

This group of data is usually called "SDNC preload" and will contain:

- vf-module instance Name
- vnf instance Name
- service instance id
- the list of vnf parameters with values, when not using the default values

Here is an example of SDNC preload for VNF, using "curl" tool
to push those data using SDNC Rest API:

::

    curl -X POST \
    https://sdnc.api.simpledemo.onap.org:30267/restconf/operations/VNF-API:preload-vnf-topology-operation \
    -H 'Accept: application/json' \
    -H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
    -H 'Content-Type: application/json' \
    -H 'X-FromAppId: API client' \
    -H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
    -H 'cache-control: no-cache' \
    -d '{
        "input": {
            "request-information": {
                "notification-url": "onap.org",
                "order-number": "1",
                "order-version": "1",
                "request-action": "PreloadVNFRequest",
                "request-id": "test"
            },
            "sdnc-request-header": {
                "svc-action": "reserve",
                "svc-notification-url": "http:\/\/onap.org:8080\/adapters\/rest\/SDNCNotify",
                "svc-request-id": "test"
            },
            "vnf-topology-information": {
                "vnf-assignments": {
                    "availability-zones": [],
                    "vnf-networks": [],
                    "vnf-vms": []
                },
                "vnf-parameters": [
                    {
                        "vnf-parameter-name": "oam_net_id",
                        "vnf-parameter-value": "oam_network_tXWW"
                    }
                ],
                "vnf-topology-identifier": {
                    "generic-vnf-name": "my-vnf-instance-01",
                    "generic-vnf-type": "Service-model-with-VNF-and-Virtual-Link/FreeRadius_VF 0",
                    "service-type": "09f9ffad-1069-43fa-97e8-da7b9a439601",
                    "vnf-name": "my_vf_module-instance-01",
                    "vnf-type": "FreeradiusVf..base_freeRadius..module-0"
                }
            }
        }
    }'


Data mapping between ONAP SDNC terminology and ONAP SO

- "generic-vnf-name" value must be equal to the VNF instance name value
  (see VNF instance detail screen)
- "generic-vnf-type" value must be equal to VNF Type value
  (see VNF instance detail screen)
- "service-type" value must be equal to the service instance id value
  (see VNF instance detail screen)
- "vnf-name" value must be equal to the VF module instance name value
- "vnf-type" value must be equal to the "Model Name" value
  (see create VF module screen)


If there is a need for an instance specific value
of a VNF parameter (for example : an OAM network id value,
specific to this VNF instance),
the "vnf-parameters" must be completed with a list of name/value.

Once the "SDNC preload" is completed, send it to SDNC using any Rest API Tool.

Then, continue on VID and complete the fields indicated by the red star
and click "Confirm".

Warning : be very careful to use exactly the same VF module instance name
on this screen and in the "SDNC preload"

Wait for success and close the popup screen.

The following screen should appear:

.. figure:: images/create-service-instance-alacarte-after-vfmodule-instantiated.png
   :align: center

At that point, the VNF is now instantiated in the cloud platform.


Instantiate Network
-------------------

Instantiating a network is quite similar to vf-module instantiation
(there is also the need for a "SDNC preload")

Click on "Add Network" and select the Network you want
to instantiate in the list

The  following screen should appear:

.. figure:: images/create-network-instance-alacarte.png
   :align: center


Prepare the "SDNC preload" with:

- "network-role": provide any value,
- "network-technology": use "neutron" as this example will instantiate
  a network using openstack neutron application
- "service-type": value must be equal to "Service Name"
  (=service model name) displayed on VID screen
- "network-name": value must be equal to the desired network instance name,
- "network-type": value must be equal to "Model Name""Generic NeutronNet"
  displayed on VID screen

In addition:

- in "provider-network-information" section, it is possible to indicate
  some network characteristics
- it is possible to add a section about "subnets"

Here after, an "SDNC preload" example that can be use for Network
instantiation.

::

    curl -X POST \
    http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-network-topology-operation \
    -H 'Accept: application/json' \
    -H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \
    -H 'Content-Type: application/json' \
    -H 'X-FromAppId: API client' \
    -H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \
    -H 'cache-control: no-cache' \
    -d '{
    "input": {
        "request-information": {
        "request-id": "postman001",
        "notification-url": "http://so.onap.org",
        "order-number": "postman001",
        "request-sub-action": "SUPP",
        "request-action": "PreloadNetworkRequest",
        "source": "postman",
        "order-version": "1.0"
        },
        "network-topology-information": {
        "network-policy": [],
        "route-table-reference": [],
        "vpn-bindings": [],
        "network-topology-identifier": {
            "network-role": "integration_test_net",
            "network-technology": "neutron",
            "service-type": "Service-model-with-VNF-and-Virtual-Link",
            "network-name": "my-network-instance-001",
            "network-type": "Generic NeutronNet"
        },
        "provider-network-information": {
            "is-external-network": "false",
            "is-provider-network": "false",
            "is-shared-network": "false"
        },
        "subnets": [
            {
            "subnet-name": "my-sub_network-instance-001",
            "subnet-role": "OAM",
            "start-address": "192.168.90.0",
            "cidr-mask": "24",
            "ip-version": "4",
            "dhcp-enabled": "Y",
            "dhcp-start-address": "",
            "dhcp-end-address": "",
            "gateway-address": "192.168.90.1",
            "host-routes":[]
            }
                ]
        },
        "sdnc-request-header": {
        "svc-action": "reserve",
        "svc-notification-url": "http://so.onap.org",
        "svc-request-id": "postman001"
        }
    }
    }
    '

Once the "SDNC preload" is completed, send it to SDNC using any Rest API Tool.

Then, continue on VID and complete the fields indicated by the red star
and click "Confirm".

Warning : be very careful to use exactly the same network instance name
on this screen and in the "SDNC preload"

Wait for success and close the popup screen.

The  following screen should appear:

.. figure:: images/create-network-instance-alacarte-after-instantiated.png
   :align: center

At that point, the Network and subnets are now instantiated
in the cloud platform.

Also, all those network information are available in ONAP AAI,
under the terminology
"l3-network", with the "neutron-network-id" and the "neutron-subnet-id"
provided by
the openstack platform.


Deleting Network, VF module, VNF, Service
-----------------------------------------

To delete a service instance using VID, it is necessary to delete objects
in the following sequence:

- delete VF module(s)
- delete VNF instance(s)
- delete Network(s)
- delete service instance

To proceed those deletion, from VID Home screen

- search for existing service instance
- edit/view the service instance you want to delete
- click on red button with white cross and confirm for each object
