summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/index.rst19
-rw-r--r--docs/sections/delivery.rst6
-rw-r--r--docs/sections/offeredapis.rst624
3 files changed, 598 insertions, 51 deletions
diff --git a/docs/index.rst b/docs/index.rst
index afea941..69b61c3 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -21,18 +21,33 @@ for wider range of services, e.g., DCAE micro-services, ECOMP control loops, ser
Finally, HAS provides an traceable mechanism for what-if analysis which is critical for ease of
understanding a homing recommendation and resolving infeasibility scenarios.
+OF-HAS is the implementation of the ONAP Homing Service. The formal project name in ONAP is *OF-HAS*.
+The informal name for the project is *Conductor* (inherited from the seed-code), which is interchangeably
+used through the project.
+
+Given the description of what needs to be deployed (demands) and the placement requirements (constraints),
+Conductor determines placement candidates that meet all constraints while optimizing the resource usage
+of the AIC infrastructure. A customer request may be satisfied by deploying new VMs in AIC (AIC inventory)
+or by using existing service instances with enough remaining capacity (service inventory).
+
+From a canonical standpoint, Conductor is known as a *homing service*, in the same way OpenStack Heat
+is an orchestration service, or Nova is a compute service.
+
+
.. toctree::
:maxdepth: 1
./sections/architecture.rst
- ./sections/homingspecification.rst
./sections/offeredapis.rst
+ ./sections/homingspecification.rst
./sections/consumedapis.rst
- ./sections/delivery.rst
+ Distribution <./sections/distribution.rst>
./sections/logging.rst
./sections/installation.rst
./sections/configuration.rst
./sections/administration.rst
./sections/humaninterfaces.rst
+ ./sections/glossary.rst
+ Example Homing Templates <./sections/example.rst>
./sections/release-notes.rst
diff --git a/docs/sections/delivery.rst b/docs/sections/delivery.rst
deleted file mode 100644
index bfe8480..0000000
--- a/docs/sections/delivery.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-.. This work is licensed under a Creative Commons Attribution 4.0 International License.
-
-Delivery
-=============================================
-
- Delivery description TBD \ No newline at end of file
diff --git a/docs/sections/offeredapis.rst b/docs/sections/offeredapis.rst
index 7ef44e9..9ffb6fb 100644
--- a/docs/sections/offeredapis.rst
+++ b/docs/sections/offeredapis.rst
@@ -66,7 +66,7 @@ List all Homing API versions
This operation does not accept a request body.
Plans
-------------------
+-----
Create a plan
-------------
@@ -90,50 +90,588 @@ consisting of:
- **Optimizations** to further narrow down the remaining candidates
The response contains an inventory **plan**, consisting of one or more
-sets of recommended pairings of demands with an inventory candidate’s
+sets of recommended pairings of demands with an inventory candidate's
attributes and region.
Request Parameters
~~~~~~~~~~~~~~~~~~
-+--------------------+------------+----------+------------------------+
-| Parameter | Style | Type | Description |
-+====================+============+==========+========================+
-| ``name`` | plain | xsd:stri | A name for the new |
-| (Optional) | | ng | plan. If a name is not |
-| | | | provided, it will be |
-| | | | auto-generated based |
-| | | | on the homing |
-| | | | template. This name |
-| | | | must be unique within |
-| | | | a given Conductor |
-| | | | environment. When |
-| | | | deleting a plan, its |
-| | | | name will not become |
-| | | | available for reuse |
-| | | | until the deletion |
-| | | | completes |
-| | | | successfully. Must |
-| | | | only contain letters, |
-| | | | numbers, hypens, full |
-| | | | stops, underscores, |
-| | | | and tildes (RFC 3986, |
-| | | | Section 2.3). This |
-| | | | parameter is |
-| | | | immutable. |
-+--------------------+------------+----------+------------------------+
-| ``id`` (Optional) | plain | csapi:UU | The UUID of the plan. |
-| | | ID | UUID is assigned by |
-| | | | Conductor if no id is |
-| | | | provided in the |
-| | | | request. |
-+--------------------+------------+----------+------------------------+
-| ``transaction_id`` | plain | csapi:UU | The transaction id |
-| | | ID | assigned by SO. The |
-| | | | logs should have this |
-| | | | transaction id for |
-| | | | tracking purposes. |
-+--------------------+------------+----------+------------------------+
-| ``files`` | plain | xsd:dict | Supplies the contents |
-| (Optional) | | | of files referenced. |
-+--------------------+------------+----------+------------------------+ \ No newline at end of file
++--------------------+-------+------------+-------------------+
+| Parameter | Style | Type | Description |
++====================+=======+============+===================+
+| ``name`` | plain | xsd:string | A name for the |
+| (Optional) | | | new plan. If a |
+| | | | name is not |
+| | | | provided, it |
+| | | | will be |
+| | | | auto-generated |
+| | | | based on the |
+| | | | homing |
+| | | | template. This |
+| | | | name must be |
+| | | | unique within |
+| | | | a given |
+| | | | Conductor |
+| | | | environment. |
+| | | | When deleting |
+| | | | a plan, its |
+| | | | name will not |
+| | | | become |
+| | | | available for |
+| | | | reuse until |
+| | | | the deletion |
+| | | | completes |
+| | | | successfully. |
+| | | | Must only |
+| | | | contain |
+| | | | letters, |
+| | | | numbers, |
+| | | | hypens, full |
+| | | | stops, |
+| | | | underscores, |
+| | | | and tildes |
+| | | | (RFC 3986, |
+| | | | Section 2.3). |
+| | | | This parameter |
+| | | | is immutable. |
++--------------------+-------+------------+-------------------+
+| ``id`` | plain | csapi:UUID | The UUID of |
+| (Optional) | | | the plan. UUID |
+| | | | is assigned by |
+| | | | Conductor if |
+| | | | no id is |
+| | | | provided in |
+| | | | the request. |
++--------------------+-------+------------+-------------------+
+| ``transaction_id`` | plain | csapi:UUID | The |
+| | | | transaction id |
+| | | | assigned by |
+| | | | MSO. The logs |
+| | | | should have |
+| | | | this |
+| | | | transaction id |
+| | | | for tracking |
+| | | | purposes. |
++--------------------+-------+------------+-------------------+
+| ``files`` | plain | xsd:dict | Supplies the |
+| (Optional) | | | contents of |
+| | | | files |
+| | | | referenced in |
+| | | | the template. |
+| | | | Conductor |
+| | | | templates can |
+| | | | explicitly |
+| | | | reference |
+| | | | files by using |
+| | | | the |
+| | | | ``get_file`` |
+| | | | intrinsic |
+| | | | function. The |
+| | | | value is a |
+| | | | JSON object, |
+| | | | where each key |
+| | | | is a relative |
+| | | | or absolute |
+| | | | URI which |
+| | | | serves as the |
+| | | | name of a |
+| | | | file, and the |
+| | | | associated |
+| | | | value provides |
+| | | | the contents |
+| | | | of the file. |
+| | | | Additionally, |
+| | | | some template |
+| | | | authors encode |
+| | | | their user |
+| | | | data in a |
+| | | | local file. |
+| | | | The Homing |
+| | | | client (e.g., |
+| | | | a CLI) can |
+| | | | examine the |
+| | | | template for |
+| | | | the |
+| | | | ``get_file`` |
+| | | | intrinsic |
+| | | | function |
+| | | | (e.g., |
+| | | | ``{get_file: f |
+| | | | ile.yaml}``) |
+| | | | and add an |
+| | | | entry to the |
+| | | | ``files`` map |
+| | | | with the path |
+| | | | to the file as |
+| | | | the name and |
+| | | | the file |
+| | | | contents as |
+| | | | the value. Do |
+| | | | not use this |
+| | | | parameter to |
+| | | | provide the |
+| | | | content of the |
+| | | | template |
+| | | | located at the |
+| | | | ``template_url`` |
+| | | | address. |
+| | | | Instead, use |
+| | | | the |
+| | | | ``template`` |
+| | | | parameter to |
+| | | | supply the |
+| | | | template |
+| | | | content as |
+| | | | part of the |
+| | | | request. |
++--------------------+-------+------------+-------------------+
+| ``template_url`` | plain | xsd:string | A URI to |
+| (Optional) | | | the location |
+| | | | containing the |
+| | | | template on |
+| | | | which to |
+| | | | perform the |
+| | | | operation. See |
+| | | | the |
+| | | | description of |
+| | | | the |
+| | | | ``template`` |
+| | | | parameter for |
+| | | | information |
+| | | | about the |
+| | | | expected |
+| | | | template |
+| | | | content |
+| | | | located at the |
+| | | | URI. This |
+| | | | parameter is |
+| | | | only required |
+| | | | when you omit |
+| | | | the |
+| | | | ``template`` |
+| | | | parameter. If |
+| | | | you specify |
+| | | | both |
+| | | | parameters, |
+| | | | this parameter |
+| | | | is ignored. |
++--------------------+-------+------------+-------------------+
+| ``template`` | plain | xsd:string | The template |
+| | | or xsd:dict| on which to |
+| | | | perform the |
+| | | | operation. See |
+| | | | the Homing |
+| | | | Template |
+| | | | Guide |
+| | | | for complete |
+| | | | information on |
+| | | | the format. |
+| | | | This parameter |
+| | | | is either |
+| | | | provided as a |
+| | | | ``string`` or |
+| | | | ``dict`` in |
+| | | | the JSON |
+| | | | request body. |
+| | | | For ``string`` |
+| | | | content it may |
+| | | | be a JSON- or |
+| | | | YAML-formatted |
+| | | | Conductor |
+| | | | template. For |
+| | | | ``dict`` |
+| | | | content it |
+| | | | must be a |
+| | | | direct JSON |
+| | | | representation |
+| | | | of the |
+| | | | Conductor |
+| | | | template. This |
+| | | | parameter is |
+| | | | required only |
+| | | | when you omit |
+| | | | the |
+| | | | ``template_url`` |
+| | | | parameter. If |
+| | | | you specify |
+| | | | both |
+| | | | parameters, |
+| | | | this value |
+| | | | overrides the |
+| | | | ``template_url`` |
+| | | | parameter |
+| | | | value. |
++--------------------+-------+------------+-------------------+
+| ``timeout`` | plain | xsd:number | The timeout |
+| (Optional) | | | for plan |
+| | | | creation in |
+| | | | minutes. |
+| | | | Default is 1. |
++--------------------+-------+------------+-------------------+
+| ``limit`` | plain | xsd:number | The maximum |
+| (Optional) | | | number of |
+| | | | recommendations |
+| | | | to return. |
+| | | | Default is 1. |
++--------------------+-------+------------+-------------------+
+
+**NOTE**: ``files``, ``template_url``, and ``timeout`` are not yet
+supported.
+
+Response Parameters
+~~~~~~~~~~~~~~~~~~~
+
++--------------------+----------+------------+--------------------+
+| Parameter | Style | Type | Description |
++====================+==========+============+====================+
+| ``plan`` | plain | xsd:dict | The ``plan`` |
+| | | | object. |
++--------------------+----------+------------+--------------------+
+| ``id`` | plain | csapi:UUID | The UUID of |
+| | | | the plan. |
++--------------------+----------+------------+--------------------+
+| ``transaction_id`` | plain | csapi:UUID | The |
+| | | | transaction id |
+| | | | assigned by |
+| | | | the MSO. |
++--------------------+----------+------------+--------------------+
+| ``name`` | plain | xsd:string | The plan name. |
+| | | | |
++--------------------+----------+------------+--------------------+
+| ``status`` | plain | xsd:string | The plan |
+| | | | status. One of |
+| | | | ``template``, |
+| | | | ``translated``, |
+| | | | ``solving``, |
+| | | | ``solved``, or |
+| | | | ``error``. See |
+| | | | **Plan |
+| | | | Status** table |
+| | | | for |
+| | | | descriptions |
+| | | | of each value. |
++--------------------+----------+------------+--------------------+
+| ``message`` | plain | xsd:string | Additional |
+| | | | context, if |
+| | | | any, around |
+| | | | the message |
+| | | | status. If the |
+| | | | status is |
+| | | | ``error``, |
+| | | | this may |
+| | | | include a |
+| | | | reason and |
+| | | | suggested |
+| | | | remediation, |
+| | | | if available. |
++--------------------+----------+------------+--------------------+
+| ``links`` | plain | xsd:list | A list of URLs |
+| | | | for the plan. |
+| | | | Each URL is a |
+| | | | JSON object |
+| | | | with an |
+| | | | ``href`` key |
+| | | | indicating the |
+| | | | URL and a |
+| | | | ``rel`` key |
+| | | | indicating its |
+| | | | relationship |
+| | | | to the plan in |
+| | | | question. |
+| | | | There may be |
+| | | | multiple links |
+| | | | returned. The |
+| | | | ``self`` |
+| | | | relationship |
+| | | | identifies the |
+| | | | URL of the |
+| | | | plan itself. |
++--------------------+----------+------------+--------------------+
+| ``recommendations``| plain | xsd:list | A list of one |
+| | | | or more |
+| | | | recommendationS. |
+| | | | A |
+| | | | recommendation |
+| | | | pairs each |
+| | | | requested |
+| | | | demand with an |
+| | | | inventory |
+| | | | provider, a |
+| | | | single |
+| | | | candidate, and |
+| | | | an opaque |
+| | | | dictionary of |
+| | | | attributes. |
+| | | | Refer to the |
+| | | | Demand |
+| | | | candidate |
+| | | | schema in the |
+| | | | Homing |
+| | | | Template |
+| | | | Guide |
+| | | | for further |
+| | | | details. (Note |
+| | | | that, when |
+| | | | ``inventory_type`` |
+| | | | is ``cloud`` |
+| | | | the |
+| | | | candidate's |
+| | | | ``candidate_id`` |
+| | | | field is |
+| | | | redundant and |
+| | | | thus omitted.) |
++--------------------+----------+------------+--------------------+
+
+Plan Status
+~~~~~~~~~~~
+
++----------------+-----------------+
+| Status | Description |
++================+=================+
+| ``template`` | Plan request |
+| | and homing |
+| | template have |
+| | been received. |
+| | Awaiting |
+| | translation. |
++----------------+-----------------+
+| ``translated`` | Homing |
+| | template has |
+| | been |
+| | translated, |
+| | and candidates |
+| | have been |
+| | obtained from |
+| | inventory |
+| | providers. |
+| | Awaiting |
+| | solving. |
++----------------+-----------------+
+| ``solving`` | Search for a |
+| | solution is in |
+| | progress. This |
+| | may |
+| | incorporate |
+| | requests to |
+| | service |
+| | controllers |
+| | for additional |
+| | information. |
++----------------+-----------------+
+| ``solved`` | Search is |
+| | complete. A |
+| | solution with |
+| | one or more |
+| | recommendations |
+| | was found. |
++----------------+-----------------+
+| ``not found`` | Search is |
+| | complete. No |
+| | recommendations |
+| | were found. |
++----------------+-----------------+
+| ``error`` | An error was |
+| | encountered. |
++----------------+-----------------+
+
+State Diagram
+^^^^^^^^^^^^^
+
+.. code:: text
+
+ ----------------------------------------
+ | |
+ | /---> solved ---> reserving ---> done
+ | / /
+ template -> translated -> solving ------> not found /
+ | ^ | \ /
+ | | conditionally | \---> error <----/
+ | | (see note) | ^
+ | \---------------/ |
+ \---------------------------------------/
+
+**NOTE**: When Conductor's solver service is started in non-concurrent
+mode (the default), it will reset any plans found waiting and stuck in
+the ``solving`` state back to ``translated``.
+
+.. code:: json
+
+ {
+ "name": "PLAN_NAME",
+ "template": "CONDUCTOR_TEMPLATE",
+ "limit": 3
+ }
+
+.. code:: json
+
+ {
+ "plan": {
+ "name": "PLAN_NAME",
+ "id": "ee1c5269-c7f0-492a-8652-f0ceb15ed3bc",
+ "transaction_id": "6bca5f2b-ee7e-4637-8b58-1b4b36ed10f9",
+ "status": "solved",
+ "message", "Plan PLAN_NAME is solved.",
+ "links": [
+ {
+ "href": "http://homing/v1/plans/ee1c5269-c7f0-492a-8652-f0ceb15ed3bc",
+ "rel": "self"
+ }
+ ],
+ "recommendations": [
+ {
+ "DEMAND_NAME_1": {
+ "inventory_provider": "aai",
+ "service_resource_id": "4feb0545-69e2-424c-b3c4-b270e5f2a15d",
+ "candidate": {
+ "candidate_id": "99befee8-e8c0-425b-8f36-fb7a8098d9a9",
+ "inventory_type": "service",
+ "location_type": "aic",
+ "location_id": "dal01",
+ "host_id" : "vig20002vm001vig001"
+ },
+ "attributes": {OPAQUE-DICT}
+ },
+ "DEMAND_NAME_2": {
+ "inventory_provider": "aai",
+ "service_resource_id": "578eb063-b24a-4654-ba9e-1e5cf7eb9183",
+ "candidate": {
+ "inventory_type": "cloud",
+ "location_type": "aic",
+ "location_id": "dal02"
+ },
+ "attributes": {OPAQUE-DICT}
+ }
+ },
+ {
+ "DEMAND_NAME_1": {
+ "inventory_provider": "aai",
+ "service_resource_id": "4feb0545-69e2-424c-b3c4-b270e5f2a15d",
+ "candidate": {
+ "candidate_id": "99befee8-e8c0-425b-8f36-fb7a8098d9a9",
+ "inventory_type": "service",
+ "location_type": "aic",
+ "location_id": "dal03",
+ "host_id" : "vig20001vm001vig001"
+ },
+ "attributes": {OPAQUE-DICT}
+ },
+ "DEMAND_NAME_2": {
+ "inventory_provider": "aai",
+ "service_resource_id": "578eb063-b24a-4654-ba9e-1e5cf7eb9183",
+ "candidate": {
+ "inventory_type": "cloud",
+ "location_type": "aic",
+ "location_id": "dal04"
+ },
+ "attributes": {OPAQUE-DICT}
+ }
+ },
+ ...
+ ]
+ }
+ }
+
+Show plan details
+-----------------
+
+**GET** ``/v1/plans/{plan_id}``
+
+- **Normal response codes:** 200
+- **Error response codes:** unauthorized (401), itemNotFound (404)
+
+Request parameters
+~~~~~~~~~~~~~~~~~~
+
++---------------+---------+--------------+-------------------------+
+| Parameter | Style | Type | Description |
++===============+=========+==============+=========================+
+| ``plan_id`` | plain | csapi:UUID | The UUID of the plan. |
++---------------+---------+--------------+-------------------------+
+
+Response Parameters
+~~~~~~~~~~~~~~~~~~~
+
+See the Response Parameters for **Create a plan**.
+
+Delete a plan
+-------------
+
+**DELETE** ``/v1/plans/{plan_id}``
+
+- **Normal response codes:** 204
+- **Error response codes:** badRequest (400), unauthorized (401),
+ itemNotFound (404)
+
+Request parameters
+~~~~~~~~~~~~~~~~~~
+
++---------------+---------+--------------+-------------------------+
+| Parameter | Style | Type | Description |
++===============+=========+==============+=========================+
+| ``plan_id`` | plain | csapi:UUID | The UUID of the plan. |
++---------------+---------+--------------+-------------------------+
+
+This operation does not accept a request body and does not return a
+response body.
+
+API Errors
+----------
+
+In the event of an error with a status other than unauthorized (401), a
+detailed repsonse body is returned.
+
+Response parameters
+~~~~~~~~~~~~~~~~~~~
+
++-----------------+--------+------------+---------------------------------------------+
+| Parameter | Style | Type | Description |
++=================+========+============+=============================================+
+| ``title`` | plain | xsd:string | Human-readable name. |
++-----------------+--------+------------+---------------------------------------------+
+| ``explanation`` | plain | xsd:string | Detailed explanation with remediation (if |
+| | | | any). |
++-----------------+--------+------------+---------------------------------------------+
+| ``code`` | plain | xsd:int | HTTP Status Code. |
++-----------------+--------+------------+---------------------------------------------+
+| ``error`` | plain | xsd:dict | Error dictionary. Keys include **message**, |
+| | | | **traceback**, and **type**. |
++-----------------+--------+------------+---------------------------------------------+
+| ``message`` | plain | xsd:string | Internal error message. |
++-----------------+--------+------------+---------------------------------------------+
+| ``traceback`` | plain | xsd:string | Python traceback (if available). |
+| | | | |
++-----------------+--------+------------+---------------------------------------------+
+| ``type`` | plain | xsd:string | HTTP Status class name (from python-webob) |
++-----------------+--------+------------+---------------------------------------------+
+
+Examples
+^^^^^^^^
+
+A plan with the name "pl an" is considered a bad request because the
+name contains a space.
+
+.. code:: json
+
+ {
+ "title": "Bad Request",
+ "explanation": "-> name -> pl an did not pass validation against callable: plan_name_type (must contain only uppercase and lowercase letters, decimal digits, hyphens, periods, underscores, and tildes [RFC 3986, Section 2.3])",
+ "code": 400,
+ "error": {
+ "message": "The server could not comply with the request since it is either malformed or otherwise incorrect.",
+ "type": "HTTPBadRequest"
+ }
+ }
+
+The HTTP COPY method was attempted but is not allowed.
+
+.. code:: json
+
+ {
+ "title": "Method Not Allowed",
+ "explanation": "The COPY method is not allowed.",
+ "code": 405,
+ "error": {
+ "message": "The server could not comply with the request since it is either malformed or otherwise incorrect.",
+ "type": "HTTPMethodNotAllowed"
+ }
+ }