.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright (c) 2017-2018 VMware, Inc.

==================================
MultiCloud HPA Discovery Pluggable
==================================

To better support more HPA capabilities without modifying the implementation code
for Multicloud. So we need to extract the HPA discovery part of the code and make
it into many drivers(HPA Discovery Driver). if we want to add new HPA feature  or
modify the implementation code for the  existing  feature, we just need to modify
HPA Discovery Driver code.

Problem Description
===================

Currently, every time we add or modify an HPA feature, we need to modify the part
of HPA discovery code,  which will affect the other HPA features. It is difficult
for device vendors to participate because they need to understand the entire ONAP
process.
In fact, we should design it so that it only requires the vendor to focus on both
discovery and use.


Propose Change
==============

Extract the original part of HPA discovery code and make it into many drivers. we
need to add hooks in Openstack,  Kubernetes and other plugins. then we develop
drivers for various language. we will get below benefit:

#. Each driver development is independent, and modifying the driver and adding
the driver does not have any impact on each other.
#. It is easier for vendors to participate in the development of ONAP. They no
longer need to understand the whole working principle of ONAP, but only need to
understand the interface of the driver.
#. Any driver problem will not affect the HPA discovery process.
#. The publishing difficulty of openstack package is reduced. Even if the latest
driver has a little problem. We just need to point to the stable driver version
of the pip package in the dockerfile.

We plan to develop drivers in python language(in R6 release) and drivers in golang
language(in R7 release).

Add New Driver
-------------------------------
The hardware vendor determines whether upstream drivers. If vendor upstream driver,
then submitted the driver code to multicloud/openstack repo. then He/She will also
need package the driver and push to pip repo for distribution. In case that vendor
doesn't upstream the driver, he/she could maintain the driver in local repo as well.

  # Dockerfile(Example)

  from multi-windriver:1.4.0

  pip install <hpa-discovery-driver1(device vendor1)>

  pip install <add hpa-discovery-driver2(device vendor2)>

Driver Version Control
----------------------

We will make HPA discovery drivers as pip packages to release pip REPO. name like:

onap-device-driver-<drivername>-<version>

when we release the plugin, we will add the driver of pip package to the docker.

Driver code Management
----------------------
For python language driver, we put it into multi-cloud openstack plugin.

For golang language driver, we put it into multi-cloud kubernetes plugin.

Security
--------
we solve one flavor each time, the result maximin is 1500 bytes. We will verify the
validity of the data?

CRUD
----
Driver don't write AAI, plugin will write AAI. driver just format data.

Create
^^^^^^
Fill discover HPA data, transform data, format data in the driver, and then return
the data, call AAI.

Delete
^^^^^^
Driver don't write AAI and just return resource URL accord to flavor information.

Update
^^^^^^
update flow is same as create flow.

please see https://git.onap.org/multicloud/openstack/tree/share/common/msapi/helper.py L142

Consume
-------
OOF can parse the AAI data, the driver just need to follow AAI schema. OOF output is
oof_directives which is defined in https://git.onap.org/multicloud/framework/tree/docs/specs/multicloud_infra_workload.rst.

check VIM capacity will store in driver. driver will get information from "Collectd". This will be completed in next release.

FCAPS
-----
Driver with some issue: alarm(pool or other mode).
if driver have some issues, the hpa capabilities will be empty.

Usage
=====
Local use
---------

To integrate with multicloud openstack plugin, run below command

 $ python setup.py build

 $ python setup.py install

based on pip package
--------------------

To integrate with multicloud openstack plugin, run below command in create docker image

 $ pip install <package-name>

Tests
=====

#. Unit Tests with tox.
#. Integration test will use SRIOV-NIC as example.

Reference
=========
https://wiki.onap.org/display/DW/Multicloud+HPA+Discovery+Pluggable
