DCAE Controller documentation DCAEGEN2-213

Issue-ID: DCAEGEN2-213
Change-Id: I7f2023b7f88b73eef852eca0bbf9086e14903cd6
Signed-off-by: Ralph Knag <rhknag@research.att.com>
diff --git a/docs/sections/components/component-specification/common-specification.rst b/docs/sections/components/component-specification/common-specification.rst
new file mode 100755
index 0000000..a29610f
--- /dev/null
+++ b/docs/sections/components/component-specification/common-specification.rst
@@ -0,0 +1,1418 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.

+.. http://creativecommons.org/licenses/by/4.0

+

+.. _common-specification:

+

+Common Elements of the Component Specification

+==============================================

+

+This page describes the component specification (JSON) sections that are

+common to both Docker and CDAP components. Differences for each are

+pointed out below. Elements that are very different, and described in

+the CDAP or Docker specific pages.

+

+.. _metadata:

+

+Component Metadata

+------------------

+

+Metadata refers to the properties found under the ``self`` JSON. This

+group of properties is used to uniquely identify this component

+specification and identify the component that this specification is used

+to capture.

+

+Example:

+

+::

+

+    "self": {

+        "version": "1.0.0",

+        "name": "asimov.component.kpi_anomaly",

+        "description": "Classifies VNF KPI data as anomalous",

+        "component_type": "docker"

+    },

+

+``self`` Schema:

+

++-------------+--------+----------------+

+| Property    | Type   | Description    |

+| Name        |        |                |

++=============+========+================+

+| version     | string | *Required*.    |

+|             |        | Semantic       |

+|             |        | version        |

+|             |        | for this       |

+|             |        | specification  |

++-------------+--------+----------------+

+| name        | string | *Required*.    |

+|             |        | Full           |

+|             |        | name of        |

+|             |        | this           |

+|             |        | component      |

+|             |        | which is       |

+|             |        | also           |

+|             |        | used as        |

+|             |        | this           |

+|             |        | component's    |

+|             |        | catalog        |

+|             |        | id.            |

++-------------+--------+----------------+

+| description | string | *Required*     |

+|             |        | Human-readable |

+|             |        | text           |

+|             |        | describing     |

+|             |        | the            |

+|             |        | component      |

+|             |        | and the        |

+|             |        | components     |

+|             |        | functional     |

+|             |        | purpose.       |

++-------------+--------+----------------+

+| component_t\| string | *Required*     |

+| ype         |        | Identify       |

+|             |        | what           |

+|             |        | containe\      |

+|             |        | rization       |

+|             |        | technolo\      |

+|             |        | gy             |

+|             |        | this           |

+|             |        | componen\      |

+|             |        | t              |

+|             |        | uses:          |

+|             |        | *docker*       |

+|             |        | or             |

+|             |        | *cdap*.        |

+|             |        |                |

++-------------+--------+----------------+

+

+.. _interfaces:

+

+Interfaces

+----------

+

+Interfaces are the JSON objects found under the ``streams`` key and the

+``services`` key. These are used to describe the interfaces that the

+component uses and the interfaces that the component provides. The

+description of each interface includes the associated :any:`data

+format <data-formats>`.

+

+Streams

+~~~~~~~

+

+-  The ``streams`` JSON is for specifying data produced for consumption

+   by other components, and the streams expected to subscribe to that is

+   produced by other components. These are “fire and forget” type

+   interfaces where the publisher of a stream does not expect or parse a

+   response from the subscriber.

+-  The term ``stream`` here is abstract and neither refers to “CDAP

+   streams” or “DMaaP feeds”. While a stream is very likely a DMaaP

+   feed, it could be a direct stream of data being routed via HTTP too.

+   It abstractly refers to a sequence of data leaving a publisher.

+-  Streams have anonymous publish/subscribe semantics, which decouples

+   the production of information from its consumption.

+-  In general, components are not aware of who they are communicating

+   with.

+-  Instead, components that are interested in data, subscribe to the

+   relevant stream; components that generate data publish to the

+   relevant stream.

+-  There can be multiple publishers and subscribers to a stream. Streams

+   are intended for unidirectional, streaming communication.

+

+Streams interfaces that implement an HTTP endpoint must support POST.

+

+Streams are split into:

+

++-------------+----+----------+

+| Property    | Ty\| Descript\|

+| Name        | pe | ion      |

++=============+====+==========+

+| subscribes  | JS\| *Require\|

+|             | ON | d*.      |

+|             | li\| List of  |

+|             | st | all      |

+|             |    | availabl\|

+|             |    | e        |

+|             |    | stream   |

+|             |    | interfac\|

+|             |    | es       |

+|             |    | that     |

+|             |    | this     |

+|             |    | componen\|

+|             |    | t        |

+|             |    | has that |

+|             |    | can be   |

+|             |    | used for |

+|             |    | subscrib\|

+|             |    | ing      |

++-------------+----+----------+

+| publishes   | JS\| *Require\|

+|             | ON | d*.      |

+|             | li\| List of  |

+|             | st | all      |

+|             |    | stream   |

+|             |    | interfac\|

+|             |    | es       |

+|             |    | that     |

+|             |    | this     |

+|             |    | componen\|

+|             |    | t        |

+|             |    | will     |

+|             |    | publish  |

+|             |    | onto     |

++-------------+----+----------+

+

+Subscribes

+^^^^^^^^^^

+

+Example:

+

+.. code:: json

+

+    "streams": {

+        "subscribes": [{

+            "format": "dcae.vnf.kpi",

+            "version": "1.0.0",

+            "route": "/data",        // for CDAP this value is not used

+            "type": "http"

+        }],

+    ...

+    }

+

+This describes that ``asimov.component.kpi_anomaly`` exposes an HTTP

+endpoint called ``/data`` which accepts requests that have the data

+format of ``dcae.vnf.kpi`` version ``1.0.0``.

+

+``subscribes`` Schema:

+

++-------------+----+--------------------+

+| Property    | Ty\| Descript\          |

+| Name        | pe | ion                |

++=============+====+====================+

+| format      | st\| *Require\          |

+|             | ri\| d*.                |

+|             | ng | Data               |

+|             |    | format             |

+|             |    | id of              |

+|             |    | the data           |

+|             |    | format             |

+|             |    | that is            |

+|             |    | used by            |

+|             |    | this               |

+|             |    | interfac\          |

+|             |    | e                  |

++-------------+----+--------------------+

+| version     | st\| *Require\          |

+|             | ri\| d*.                |

+|             | ng | Data               |

+|             |    | format             |

+|             |    | version            |

+|             |    | of the             |

+|             |    | data               |

+|             |    | format             |

+|             |    | that is            |

+|             |    | used by            |

+|             |    | this               |

+|             |    | interfac\          |

+|             |    | e                  |

++-------------+----+--------------------+

+| route       | st\| *Require\          |

+|             | ri\| d                  |

+|             | ng | for HTTP           |

+|             |    | and data           |

+|             |    | router*.           |

+|             |    | The HTTP           |

+|             |    | route              |

+|             |    | that               |

+|             |    | this               |

+|             |    | interfac\          |

+|             |    | e                  |

+|             |    | listens            |

+|             |    | on                 |

++-------------+----+--------------------+

+| config_key  | st\| *Require\          |

+|             | ri\| d \                |

+|             | ng | for \              |

+|             |    | message_router\    |

+|             |    | and data \         |

+|             |    | router*.           |

+|             |    | The HTTP           |

+|             |    | route              |

+|             |    | that               |

+|             |    | this               |

+|             |    | interfac\          |

+|             |    | e                  |

+|             |    | listens            |

+|             |    | on                 |

++-------------+----+--------------------+

+| type        | st\| *Require\          |

+|             | ri\| d*.                |

+|             | ng | Type of            |

+|             |    | stream:            |

+|             |    | ``http``           |

+|             |    | ,                  |

+|             |    | ``message_router`` |

+|             |    | ,                  |

+|             |    | ``data_router``    |

++-------------+----+--------------------+

+

+.. _message-router:

+

+Message router

+''''''''''''''

+

+Message router subscribers are http clients rather than http services

+and performs a http a ``GET`` call. Thus, message router subscribers

+description is structured like message router publishers and requires

+``config_key``:

+

+.. code:: json

+

+    "streams": {

+        "subscribes": [{

+            "format": "dcae.some-format",

+            "version": "1.0.0",

+            "config_key": "some_format_handle",

+            "type": "message router"

+        }],

+    ...

+    }

+

+

+.. _data-router:

+

+Data router

+'''''''''''

+

+Data router subscribers are http or https services that handle ``PUT``

+requests from data router. Developers must provide the ``route`` or url

+path/endpoint that is expected to handle data router requests. This will

+be used to construct the delivery url needed to register the subscriber

+to the provisioned feed. Developers must also provide a ``config_key``

+because there is dynamic configuration information associated with the

+feed that the application will need e.g. username and password. See the

+page on :doc:`DMaaP connection objects <../dcae-cli/dmaap-connection-objects>` for more details on

+the configuration information.

+

+Example (not tied to the larger example):

+

+.. code:: json

+

+    "streams": {

+        "subscribes": [{

+            "config_key": "some-sub-dr",

+            "format": "sandbox.platform.any",

+            "route": "/identity",

+            "type": "data_router",

+            "version": "0.1.0"

+        }],

+    ...

+    }

+

+Publishes

+^^^^^^^^^

+

+Example:

+

+.. code:: json

+

+    "streams": {

+    ...

+        "publishes": [{

+            "format": "asimov.format.integerClassification",

+            "version": "1.0.0",

+            "config_key": "prediction",

+            "type": "http"

+        }]

+    },

+

+This describes that ``asimov.component.kpi_anomaly`` publishes by making

+POST requests to streams that support the data format

+``asimov.format.integerClassification`` version ``1.0.0``.

+

+``publishes`` Schema:

+

++-------------+----+--------------------+

+| Property    | Ty\| Descript\          |

+| Name        | pe | ion                |

++=============+====+====================+

+| format      | st\| *Require\          |

+|             | ri\| d*.                |

+|             | ng | Data               |

+|             |    | format             |

+|             |    | id of              |

+|             |    | the data           |

+|             |    | format             |

+|             |    | that is            |

+|             |    | used by            |

+|             |    | this               |

+|             |    | interfac\          |

+|             |    | e                  |

++-------------+----+--------------------+

+| version     | st\| *Require\          |

+|             | ri\| d*.                |

+|             | ng | Data               |

+|             |    | format             |

+|             |    | version            |

+|             |    | of the             |

+|             |    | data               |

+|             |    | format             |

+|             |    | that is            |

+|             |    | used by            |

+|             |    | this               |

+|             |    | interfac\          |

+|             |    | e                  |

++-------------+----+--------------------+

+| config_key  | st\| *Require\          |

+|             | ri\| d*.                |

+|             | ng | The JSON           |

+|             |    | key in             |

+|             |    | the                |

+|             |    | generate\          |

+|             |    | d                  |

+|             |    | applicat           |

+|             |    | ion                |

+|             |    | configur\          |

+|             |    | ation              |

+|             |    | that               |

+|             |    | will be            |

+|             |    | used to            |

+|             |    | pass the           |

+|             |    | downstre\          |

+|             |    | am                 |

+|             |    | componen\          |

+|             |    | t’s                |

+|             |    | (the               |

+|             |    | subscrib\          |

+|             |    | er’s)              |

+|             |    | connecti\          |

+|             |    | on                 |

+|             |    | informat\          |

+|             |    | ion.               |

++-------------+----+--------------------+

+| type        | st\| *Require\          |

+|             | ri\| d*.                |

+|             | ng | Type of            |

+|             |    | stream:            |

+|             |    | ``http``           |

+|             |    | ,                  |

+|             |    | ``message_router`` |

+|             |    | ,                  |

+|             |    | ``data_router``    |

++-------------+----+--------------------+

+

+.. message-router-1:

+

+Message router

+''''''''''''''

+

+Message router publishers are http clients of DMaap message_router.

+Developers must provide a ``config_key`` because there is dynamic

+configuration information associated with the feed that the application

+will need to receive e.g. topic url, username, password. See the page on

+:doc:`DMaaP connection objects <../dcae-cli/dmaap-connection-objects>` for more details on

+the configuration information.

+

+Example (not tied to the larger example):

+

+.. code:: json

+

+    "streams": {

+    ...

+        "publishes": [{

+            "config_key": "some-pub-mr",

+            "format": "sandbox.platform.any",

+            "type": "message_router",

+            "version": "0.1.0"

+        }]

+    }

+

+.. data-router-1:

+

+Data router

+'''''''''''

+

+Data router publishers are http clients that make ``PUT`` requests to

+data router. Developers must also provide a ``config_key`` because there

+is dynamic configuration information associated with the feed that the

+application will need to receive e.g. publish url, username, password.

+See the page on :doc:`DMaaP connection objects <../dcae-cli/dmaap-connection-objects>` for more details on

+the configuration information.

+

+Example (not tied to the larger example):

+

+.. code:: json

+

+    "streams": {

+    ...

+        "publishes": [{

+            "config_key": "some-pub-dr",

+            "format": "sandbox.platform.any",

+            "type": "data_router",

+            "version": "0.1.0"

+        }]

+    }

+

+Quick Reference

+^^^^^^^^^^^^^^^

+

+Refer to this :doc:`Quick Reference <streams-grid>` for a

+comparison of the Streams ‘Publishes’ and ‘Subscribes’ sections.

+

+Services

+~~~~~~~~

+

+-  The publish / subscribe model is a very flexible communication

+   paradigm, but its many-to-many one-way transport is not appropriate

+   for RPC request / reply interactions, which are often required in a

+   distributed system.

+-  Request / reply is done via a Service, which is defined by a pair of

+   messages: one for the request and one for the reply.

+

+Services are split into:

+

++-------------+----+----------+

+| Property    | Ty\| Descript\|

+| Name        | pe | ion      |

++=============+====+==========+

+| calls       | JS\| *Require\|

+|             | ON | d*.      |

+|             | li\| List of  |

+|             | st | all      |

+|             |    | service  |

+|             |    | interfac\|

+|             |    | es       |

+|             |    | that     |

+|             |    | this     |

+|             |    | componen\|

+|             |    | t        |

+|             |    | will     |

+|             |    | call     |

++-------------+----+----------+

+| provides    | JS\| *Require\|

+|             | ON | d*.      |

+|             | li\| List of  |

+|             | st | all      |

+|             |    | service  |

+|             |    | interfac\|

+|             |    | es       |

+|             |    | that     |

+|             |    | this     |

+|             |    | componen\|

+|             |    | t        |

+|             |    | exposes  |

+|             |    | and      |

+|             |    | provides |

++-------------+----+----------+

+

+Calls

+^^^^^

+

+The JSON ``services/calls`` is for specifying that the component relies

+on an HTTP(S) service—the component sends that service an HTTP request,

+and that service responds with an HTTP reply. An example of this is how

+string matching (SM) depends on the AAI Broker. SM performs a

+synchronous REST call to the AAI broker, providing it the VMNAME of the

+VNF, and the AAI Broker responds with additional details about the VNF.

+This dependency is expressed via ``services/calls``. In contrast, the

+output of string matching (the alerts it computes) is sent directly to

+policy as a fire-and-forget interface, so that is an example of a

+``stream``.

+

+Example:

+

+.. code:: json

+

+    "services": {

+        "calls": [{

+            "config_key": "vnf-db",

+            "request": {

+                "format": "dcae.vnf.meta",

+                "version": "1.0.0"

+                },

+            "response": {

+                "format": "dcae.vnf.kpi",

+                "version": "1.0.0"

+                }

+        }],

+    ...

+    }

+

+This describes that ``asimov.component.kpi_anomaly`` will make HTTP

+calls to a downstream component that accepts requests of data format

+``dcae.vnf.meta`` version ``1.0.0`` and is expecting the response to be

+``dcae.vnf.kpi`` version ``1.0.0``.

+

+``calls`` Schema:

+

++-------------+----+----------+

+| Property    | Ty\| Descript\|

+| Name        | pe | ion      |

++=============+====+==========+

+| request     | JS\| *Require\|

+|             | ON | d*.      |

+|             | ob\| Descript\|

+|             | je\| ion      |

+|             | ct | of the   |

+|             |    | expected |

+|             |    | request  |

+|             |    | for this |

+|             |    | downstre\|

+|             |    | am       |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+| response    | JS\| *Require\|

+|             | ON | d*.      |

+|             | ob\| Descript\|

+|             | je\| ion      |

+|             | ct | of the   |

+|             |    | expected |

+|             |    | response |

+|             |    | for this |

+|             |    | downstre\|

+|             |    | am       |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+| config_key  | st\| *Require\|

+|             | ri\| d*.      |

+|             | ng | The JSON |

+|             |    | key in   |

+|             |    | the      |

+|             |    | generate\|

+|             |    | d        |

+|             |    | applicat |

+|             |    | ion      |

+|             |    | configur\|

+|             |    | ation    |

+|             |    | that     |

+|             |    | will be  |

+|             |    | used to  |

+|             |    | pass the |

+|             |    | downstre\|

+|             |    | am       |

+|             |    | componen |

+|             |    | t        |

+|             |    | connecti\|

+|             |    | on       |

+|             |    | informat\|

+|             |    | ion.     |

++-------------+----+----------+

+

+The JSON object schema for both ``request`` and ``response``:

+

++-------------+----+----------+

+| Property    | Ty\| Descript\|

+| Name        | pe | ion      |

++=============+====+==========+

+| format      | st\| *Require\|

+|             | ri\| d*.      |

+|             | ng | Data     |

+|             |    | format   |

+|             |    | id of    |

+|             |    | the data |

+|             |    | format   |

+|             |    | that is  |

+|             |    | used by  |

+|             |    | this     |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+| version     | st\| *Require\|

+|             | ri\| d*.      |

+|             | ng | Data     |

+|             |    | format   |

+|             |    | version  |

+|             |    | of the   |

+|             |    | data     |

+|             |    | format   |

+|             |    | that is  |

+|             |    | used by  |

+|             |    | this     |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+

+Provides

+^^^^^^^^

+

+Example:

+

+.. code:: json

+

+    "services": {

+    ...

+        "provides": [{

+            "route": "/score-vnf",

+            "request": {

+                "format": "dcae.vnf.meta",

+                "version": "1.0.0"

+                },

+            "response": {

+                "format": "asimov.format.integerClassification",

+                "version": "1.0.0"

+                }

+        }]

+    },

+

+This describes that ``asimov.component.kpi_anomaly`` provides a service

+interface and it is exposed on the ``/score-vnf`` HTTP endpoint. The

+endpoint accepts requests that have the data format ``dcae.vnf.meta``

+version ``1.0.0`` and gives back a response of

+``asimov.format.integerClassification`` version ``1.0.0``.

+

+``provides`` Schema for a Docker component:

+

++-------------+----+----------+

+| Property    | Ty\| Descript\|

+| Name        | pe | ion      |

++=============+====+==========+

+| request     | JS\| *Require\|

+|             | ON | d*.      |

+|             | ob\| Descript\|

+|             | je\| ion      |

+|             | ct | of the   |

+|             |    | expected |

+|             |    | request  |

+|             |    | for this |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+| response    | JS\| *Require\|

+|             | ON | d*.      |

+|             | ob\| Descript\|

+|             | je\| ion      |

+|             | ct | of the   |

+|             |    | expected |

+|             |    | response |

+|             |    | for this |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+| route       | st\| *Require\|

+|             | ri\| d*.      |

+|             | ng | The HTTP |

+|             |    | route    |

+|             |    | that     |

+|             |    | this     |

+|             |    | interfac\|

+|             |    | e        |

+|             |    | listens  |

+|             |    | on       |

++-------------+----+----------+

+

+The JSON object schema for both ``request`` and ``response``:

+

++-------------+----+----------+

+| Property    | Ty\| Descript\|

+| Name        | pe | ion      |

++=============+====+==========+

+| format      | st\| *Require\|

+|             | ri\| d*.      |

+|             | ng | Data     |

+|             |    | format   |

+|             |    | id of    |

+|             |    | the data |

+|             |    | format   |

+|             |    | that is  |

+|             |    | used by  |

+|             |    | this     |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+| version     | st\| *Require\|

+|             | ri\| d*.      |

+|             | ng | Data     |

+|             |    | format   |

+|             |    | version  |

+|             |    | of the   |

+|             |    | data     |

+|             |    | format   |

+|             |    | that is  |

+|             |    | used by  |

+|             |    | this     |

+|             |    | interfac\|

+|             |    | e        |

++-------------+----+----------+

+

+Note, for CDAP, there is a slight variation due to the way CDAP exposes

+services:

+

+::

+

+          "provides":[                             // note this is a list of JSON

+             {  

+                "request":{  ...},

+                "response":{  ...},

+                "service_name":"name CDAP service", 

+                "service_endpoint":"greet",         // E.g the URL is /services/service_name/methods/service_endpoint

+                "verb":"GET"                        // GET, PUT, or POST

+             }

+          ]

+

+``provides`` Schema for a CDAP component:

+

++-------------+----+-----------+

+| Property    | Ty\| Descript\ |

+| Name        | pe | ion       |

++=============+====+===========+

+| request     | JS\| *Require\ |

+|             | ON | d*.       |

+|             | ob\| Descript\ |

+|             | je\| ion       |

+|             | ct | of the    |

+|             |    | expected  |

+|             |    | request   |

+|             |    | data      |

+|             |    | format    |

+|             |    | for this  |

+|             |    | interfac\ |

+|             |    | e         |

++-------------+----+-----------+

+| response    | JS\| *Require\ |

+|             | ON | d*.       |

+|             | ob\| Descript\ |

+|             | je\| ion       |

+|             | ct | of the    |

+|             |    | expected  |

+|             |    | response  |

+|             |    | for this  |

+|             |    | interfac\ |

+|             |    | e         |

++-------------+----+-----------+

+| service_nam\| st\| *Require\ |

+| e           | ri\| d*.       |

+|             | ng | The CDAP  |

+|             |    | service   |

+|             |    | name (eg  |

+|             |    | “Greetin\ |

+|             |    | g”)       |

++-------------+----+-----------+

+| service_end | st\| *Require\ |

+| point       | ri\| d*.       |

+|             | ng | The CDAP  |

+|             |    | service   |

+|             |    | endpoint  |

+|             |    | for this  |

+|             |    | service_n\|

+|             |    | ame       |

+|             |    | (eg       |

+|             |    | “/greet”  |

+|             |    | )         |

++-------------+----+-----------+

+| verb        | st\| *Require\ |

+|             | ri\| d*.       |

+|             | ng | ‘GET’,    |

+|             |    | ‘PUT’ or  |

+|             |    | ‘POST’    |

++-------------+----+-----------+

+

+Parameters

+----------

+

+``parameters`` is where to specify the component’s application

+configuration parameters that are not connection information.

+

++---------------+------------+----------------------------------+

+| Property Name | Type       | Description                      |

++===============+============+==================================+

+| parameters    | JSON array | Each entry is a parameter object |

++---------------+------------+----------------------------------+

+

+Parameter object has the following available properties:

+

++--------------+----+----------+------+

+| Property     | Ty\| Descript\| Defa\|

+| Name         | pe | ion      | ult  |

++==============+====+==========+======+

+| name         | st\| *Require\|      |

+|              | ri\| d*.      |      |

+|              | ng | The      |      |

+|              |    | property |      |

+|              |    | name     |      |

+|              |    | that     |      |

+|              |    | will be  |      |

+|              |    | used as  |      |

+|              |    | the key  |      |

+|              |    | in the   |      |

+|              |    | generate\|      |

+|              |    | d        |      |

+|              |    | config   |      |

++--------------+----+----------+------+

+| value        | an\| *Require\|      |

+|              | y  | d*.      |      |

+|              |    | The      |      |

+|              |    | default  |      |

+|              |    | value    |      |

+|              |    | for the  |      |

+|              |    | given    |      |

+|              |    | paramete\|      |

+|              |    | r        |      |

++--------------+----+----------+------+

+| description  | st\| *Require\|      |

+|              | ri\| d*.      |      |

+|              | ng | Human-re\|      |

+|              |    | adable   |      |

+|              |    | text     |      |

+|              |    | describi\|      |

+|              |    | ng       |      |

+|              |    | the      |      |

+|              |    | paramete\|      |

+|              |    | r        |      |

+|              |    | like     |      |

+|              |    | what its |      |

+|              |    | for      |      |

++--------------+----+----------+------+

+| type         | st\| The      |      |

+|              | ri\| required |      |

+|              | ng | data     |      |

+|              |    | type for |      |

+|              |    | the      |      |

+|              |    | paramete\|      |

+|              |    | r        |      |

++--------------+----+----------+------+

+| required     | bo\| An       | true |

+|              | ol\| optional |      |

+|              | ea\| key that |      |

+|              | n  | declares |      |

+|              |    | a        |      |

+|              |    | paramete\|      |

+|              |    | r        |      |

+|              |    | as       |      |

+|              |    | required |      |

+|              |    | (true)   |      |

+|              |    | or not   |      |

+|              |    | (false)  |      |

++--------------+----+----------+------+

+| constraints  | ar\| The      |      |

+|              | ra\| optional |      |

+|              | y  | list of  |      |

+|              |    | sequence |      |

+|              |    | d        |      |

+|              |    | constrai\|      |

+|              |    | nt       |      |

+|              |    | clauses  |      |

+|              |    | for the  |      |

+|              |    | paramete\|      |

+|              |    | r.       |      |

+|              |    | See      |      |

+|              |    | below    |      |

++--------------+----+----------+------+

+| entry_schem\ | st\| The      |      |

+| a            | ri\| optional |      |

+|              | ng | key that |      |

+|              |    | is used  |      |

+|              |    | to       |      |

+|              |    | declare  |      |

+|              |    | the name |      |

+|              |    | of the   |      |

+|              |    | Datatype |      |

+|              |    | definiti\|      |

+|              |    | on       |      |

+|              |    | for      |      |

+|              |    | entries  |      |

+|              |    | of set   |      |

+|              |    | types    |      |

+|              |    | such as  |      |

+|              |    | the      |      |

+|              |    | TOSCA    |      |

+|              |    | ‘list’   |      |

+|              |    | or       |      |

+|              |    | ‘map’.   |      |

+|              |    | Only 1   |      |

+|              |    | level is |      |

+|              |    | supporte\|      |

+|              |    | d        |      |

+|              |    | at this  |      |

+|              |    | time     |      |

++--------------+----+----------+------+

+| designer_ed\ | bo\| An       | true |

+| itable       | ol\| optional |      |

+|              | ea\| key that |      |

+|              | n  | declares |      |

+|              |    | a        |      |

+|              |    | paramete\|      |

+|              |    | r        |      |

+|              |    | to be    |      |

+|              |    | editable |      |

+|              |    | by       |      |

+|              |    | designer |      |

+|              |    | (true)   |      |

+|              |    | or not   |      |

+|              |    | (false)  |      |

++--------------+----+----------+------+

+| sourced_at_d\| bo\| An       | fals\|

+| eployment    | ol\| optional | e    |

+|              | ea\| key that |      |

+|              | n  | declares |      |

+|              |    | a        |      |

+|              |    | paramete\|      |

+|              |    | r’s      |      |

+|              |    | value to |      |

+|              |    | be       |      |

+|              |    | assigned |      |

+|              |    | at       |      |

+|              |    | deployme\|      |

+|              |    | nt       |      |

+|              |    | time     |      |

+|              |    | (true)   |      |

++--------------+----+----------+------+

+| policy_edit\ | bo\| An       | true |

+| able         | ol\| optional |      |

+|              | ea\| key that |      |

+|              | n  | declares |      |

+|              |    | a        |      |

+|              |    | paramete\|      |

+|              |    | r        |      |

+|              |    | to be    |      |

+|              |    | editable |      |

+|              |    | by       |      |

+|              |    | policy   |      |

+|              |    | (true)   |      |

+|              |    | or not   |      |

+|              |    | (false)  |      |

++--------------+----+----------+------+

+| policy_sche\ | ar\| The      |      |

+| ma           | ra\| optional |      |

+|              | y  | list of  |      |

+|              |    | schema   |      |

+|              |    | definiti\|      |

+|              |    | ons      |      |

+|              |    | used for |      |

+|              |    | policy.  |      |

+|              |    | See      |      |

+|              |    | below    |      |

++--------------+----+----------+------+

+

+Example:

+

+.. code:: json

+

+    "parameters": [

+        {

+            "name": "threshold",

+            "value": 0.75,

+            "description": "Probability threshold to exceed to be anomalous"

+        }

+    ]

+

+Many of the parameter properties have been copied from TOSCA model

+property definitions and are to be used for service design composition

+and policy creation. See `section 3.5.8 *Property

+definition* <http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.1/TOSCA-Simple-Profile-YAML-v1.1.html>`__.

+

+The property ``constraints`` is a list of objects where each constraint

+object:

+

++--------------+----+----------+

+| Property     | Ty\| Descript\|

+| Name         | pe | ion      |

++==============+====+==========+

+| equal        |    | Constrai\|

+|              |    | ns       |

+|              |    | a        |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value    |

+|              |    | equal to |

+|              |    | (‘=’)    |

+|              |    | the      |

+|              |    | value    |

+|              |    | declared |

++--------------+----+----------+

+| greater_tha\ | nu\| Constrai\|

+| n            | mb\| ns       |

+|              | er | a        |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete |

+|              |    | r        |

+|              |    | to a     |

+|              |    | value    |

+|              |    | greater  |

+|              |    | than     |

+|              |    | (‘>’)    |

+|              |    | the      |

+|              |    | value    |

+|              |    | declared |

++--------------+----+----------+

+| greater_or_e\| nu\| Constrai\|

+| qual         | mb\| ns       |

+|              | er | a        |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value    |

+|              |    | greater  |

+|              |    | than or  |

+|              |    | equal to |

+|              |    | (‘>=’)   |

+|              |    | the      |

+|              |    | value    |

+|              |    | declared |

++--------------+----+----------+

+| less_than    | nu\| Constrai\|

+|              | mb\| ns       |

+|              | er | a        |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value    |

+|              |    | less     |

+|              |    | than     |

+|              |    | (‘<’)    |

+|              |    | the      |

+|              |    | value    |

+|              |    | declared |

++--------------+----+----------+

+| less_or_equ\ | nu\| Constrai\|

+| al           | mb\| ns       |

+|              | er | a        |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value    |

+|              |    | less     |

+|              |    | than or  |

+|              |    | equal to |

+|              |    | (‘<=’)   |

+|              |    | the      |

+|              |    | value    |

+|              |    | declared |

++--------------+----+----------+

+| valid_value\ | ar\| Constrai\|

+| s            | ra\| ns       |

+|              | y  | a        |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value    |

+|              |    | that is  |

+|              |    | in the   |

+|              |    | list of  |

+|              |    | declared |

+|              |    | values   |

++--------------+----+----------+

+| length       | nu\| Constrai\|

+|              | mb\| ns       |

+|              | er | the      |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value of |

+|              |    | a given  |

+|              |    | length   |

++--------------+----+----------+

+| min_length   | nu\| Constrai\|

+|              | mb\| ns       |

+|              | er | the      |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value to |

+|              |    | a        |

+|              |    | minimum  |

+|              |    | length   |

++--------------+----+----------+

+| max_length   | nu\| Constrai\|

+|              | mb\| ns       |

+|              | er | the      |

+|              |    | property |

+|              |    | or       |

+|              |    | paramete\|

+|              |    | r        |

+|              |    | to a     |

+|              |    | value to |

+|              |    | a        |

+|              |    | maximum  |

+|              |    | length   |

++--------------+----+----------+

+

+``threshold`` is the configuration parameter and will get set to 0.75

+when the configuration gets generated.

+

+The property ``policy_schema`` is a list of objects where each

+policy_schema object:

+

++-------------+----+----------+------+

+| Property    | Ty\| Descript\| Defa\|

+| Name        | pe | ion      | ult  |

++=============+====+==========+======+

+| name        | st\| *Require\|      |

+|             | ri\| d*.      |      |

+|             | ng | paramete\|      |

+|             |    | r        |      |

+|             |    | name     |      |

++-------------+----+----------+------+

+| value       | st\| default  |      |

+|             | ri\| value    |      |

+|             | ng | for the  |      |

+|             |    | paramete\|      |

+|             |    | r        |      |

++-------------+----+----------+------+

+| description | st\| paramete\|      |

+|             | ri\| r        |      |

+|             | ng | descript\|      |

+|             |    | ion      |      |

++-------------+----+----------+------+

+| type        | en\| *Require\|      |

+|             | um | d*.      |      |

+|             |    | data     |      |

+|             |    | type of  |      |

+|             |    | the      |      |

+|             |    | paramete\|      |

+|             |    | r,       |      |

+|             |    | ‘string’ |      |

+|             |    | ,        |      |

+|             |    | ‘number’ |      |

+|             |    | ,        |      |

+|             |    | ‘boolean |      |

+|             |    | ’,       |      |

+|             |    | ‘datetim\|      |

+|             |    | e’,      |      |

+|             |    | ‘list’,  |      |

+|             |    | or ‘map’ |      |

++-------------+----+----------+------+

+| required    | bo\| is       | true |

+|             | ol\| paramete\|      |

+|             | ea\| r        |      |

+|             | n  | required |      |

+|             |    | or not?  |      |

++-------------+----+----------+------+

+| constraints | ar\| The      |      |

+|             | ra\| optional |      |

+|             | y  | list of  |      |

+|             |    | sequence\|      |

+|             |    | d        |      |

+|             |    | constrai\|      |

+|             |    | nt       |      |

+|             |    | clauses  |      |

+|             |    | for the  |      |

+|             |    | paramete\|      |

+|             |    | r.       |      |

+|             |    | See      |      |

+|             |    | above    |      |

++-------------+----+----------+------+

+| entry_schem\| st\| The      |      |

+| a           | ri\| optional |      |

+|             | ng | key that |      |

+|             |    | is used  |      |

+|             |    | to       |      |

+|             |    | declare  |      |

+|             |    | the name |      |

+|             |    | of the   |      |

+|             |    | Datatype |      |

+|             |    | definiti\|      |

+|             |    | on       |      |

+|             |    | for      |      |

+|             |    | certain  |      |

+|             |    | types.   |      |

+|             |    | entry_sc\|      |

+|             |    | hema     |      |

+|             |    | must be  |      |

+|             |    | defined  |      |

+|             |    | when the |      |

+|             |    | type is  |      |

+|             |    | either   |      |

+|             |    | list or  |      |

+|             |    | map. If  |      |

+|             |    | the type |      |

+|             |    | is list  |      |

+|             |    | and the  |      |

+|             |    | entry    |      |

+|             |    | type is  |      |

+|             |    | a simple |      |

+|             |    | type     |      |

+|             |    | (string, |      |

+|             |    | number,  |      |

+|             |    | bookean, |      |

+|             |    | datetime |      |

+|             |    | ),       |      |

+|             |    | follow   |      |

+|             |    | with an  |      |

+|             |    | string   |      |

+|             |    | to       |      |

+|             |    | describe |      |

+|             |    | the      |      |

+|             |    | entry    |      |

++-------------+----+----------+------+

+|             | If |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | ty\|          |      |

+|             | pe |          |      |

+|             | is |          |      |

+|             | li\|          |      |

+|             | st |          |      |

+|             | an\|          |      |

+|             | d  |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | en\|          |      |

+|             | tr\|          |      |

+|             | y  |          |      |

+|             | ty\|          |      |

+|             | pe |          |      |

+|             | is |          |      |

+|             | a  |          |      |

+|             | ma\|          |      |

+|             | p, |          |      |

+|             | fo\|          |      |

+|             | ll\|          |      |

+|             | ow |          |      |

+|             | wi\|          |      |

+|             | th |          |      |

+|             | an |          |      |

+|             | ar\|          |      |

+|             | ra\|          |      |

+|             | y  |          |      |

+|             | to |          |      |

+|             | de\|          |      |

+|             | sc\|          |      |

+|             | ri\|          |      |

+|             | be |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | ke\|          |      |

+|             | ys |          |      |

+|             | fo\|          |      |

+|             | r  |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | en\|          |      |

+|             | tr\|          |      |

+|             | y  |          |      |

+|             | ma\|          |      |

+|             | p  |          |      |

++-------------+----+----------+------+

+|             | If |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | ty\|          |      |

+|             | pe |          |      |

+|             | is |          |      |

+|             | li\|          |      |

+|             | st |          |      |

+|             | an\|          |      |

+|             | d  |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | en\|          |      |

+|             | tr\|          |      |

+|             | y  |          |      |

+|             | ty\|          |      |

+|             | pe |          |      |

+|             | is |          |      |

+|             | a  |          |      |

+|             | li\|          |      |

+|             | st |          |      |

+|             | ,  |          |      |

+|             | th\|          |      |

+|             | at |          |      |

+|             | is |          |      |

+|             | no\|          |      |

+|             | t  |          |      |

+|             | cu\|          |      |

+|             | rr\|          |      |

+|             | en\|          |      |

+|             | tl\|          |      |

+|             | y  |          |      |

+|             | su\|          |      |

+|             | pp\|          |      |

+|             | or\|          |      |

+|             | te\|          |      |

+|             | d \|          |      |

++-------------+----+----------+------+

+|             | If |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | ty\|          |      |

+|             | pe |          |      |

+|             | is |          |      |

+|             | ma\|          |      |

+|             | p, |          |      |

+|             | fo\|          |      |

+|             | ll\|          |      |

+|             | ow |          |      |

+|             | wi\|          |      |

+|             | th |          |      |

+|             | an |          |      |

+|             | ar\|          |      |

+|             | ay |          |      |

+|             | to |          |      |

+|             | de\|          |      |

+|             | sc\|          |      |

+|             | ri\|          |      |

+|             | be |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | ke\|          |      |

+|             | ys |          |      |

+|             | fo\|          |      |

+|             | r  |          |      |

+|             | th\|          |      |

+|             | e  |          |      |

+|             | ma\|          |      |

+|             | p  |          |      |

++-------------+----+----------+------+

+

+Generated Application Configuration

+-----------------------------------

+

+The above example for component ``asimov.component.kpi_anomaly`` will

+get transformed into the following application configuration JSON that

+is fully resolved and provided at runtime by calling the

+``config binding service``:

+

+.. code:: json

+

+    {

+        "streams_publishes": {

+            "prediction": ["10.100.1.100:32567"]

+        },

+        "streams_subscribes": {},

+        "threshold": 0.75,

+        "services_calls": {

+            "vnf-db": ["10.100.1.101:32890"]

+        }

+    }

+

+.. _artifacts:

+

+Artifacts

+---------

+

+``artifacts`` contains a list of artifacts associated with this

+component. For Docker, this is the full path (including the registry) to

+the Docker image. For CDAP, this is the full path to the CDAP jar.

+

++---------------+------------+---------------------------------+

+| Property Name | Type       | Description                     |

++===============+============+=================================+

+| artifacts     | JSON array | Each entry is a artifact object |

++---------------+------------+---------------------------------+

+

+``artifact`` Schema:

+

++---------------+--------+--------------------------------------------+

+| Property Name | Type   | Description                                |

++===============+========+============================================+

+| uri           | string | *Required*. Uri to the artifact, full path |

++---------------+--------+--------------------------------------------+

+| type          | string | *Required*. ``docker image`` or ``jar``    |

++---------------+--------+--------------------------------------------+