diff options
Diffstat (limited to 'docs/modelingconcepts/workflow.rst')
-rw-r--r-- | docs/modelingconcepts/workflow.rst | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/docs/modelingconcepts/workflow.rst b/docs/modelingconcepts/workflow.rst new file mode 100644 index 000000000..d9c7dc956 --- /dev/null +++ b/docs/modelingconcepts/workflow.rst @@ -0,0 +1,322 @@ +.. This work is a derivative of https://wiki.onap.org/display/DW/Modeling+Concepts#Concepts-100023263 by IBM +.. used under Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +.. Copyright (C) 2020 Deutsche Telekom AG. + +.. _workflow: + +Workflow +--------- + +.. note:: + + **Workflow Scope within CDS Framework** + + The workflow is within the scope of the micro provisioning and configuration + management in **controller domain** and does NOT account for the MACRO service orchestration workflow which is covered by the SO Project. + +A workflow defines an overall action to be taken on the service, hence is an +entry-point for the run-time execution of the :ref:`CBA Package <cba>`. + +A workflow also defines **inputs** and **outputs** that will defined the **payload contract** +of the **request** and **response** (see :ref:`Dynamic API`) + +A workflow can be **composed** of one or multiple **sub-actions** to execute. + +A CBA package can have as **many workflows** as needed. + +.. _workflow_single_action: + +Single action +************** + +The workflow is directly backed by a component (see :ref:`node_type` -> Component). + +In the example bellow, the target of the workflow's steps resource-assignment is ``resource-assignment`` +which actually is the name of the ``node_template`` defined after, of type ``component-resource-resolution``. + +`Link to example +<https://github.com/onap/ccsdk-cds/blob/master/components/model-catalog/blueprint-model/test-blueprint/golden/Definitions/golden-blueprint.json#L40-L71>`_ + + +.. code-block:: json + :caption: **Example** + + . . . + "topology_template": { + "workflows": { + "resource-assignment": { + "steps": { + "resource-assignment": { + "description": "Resource Assign Workflow", + "target": "resource-assignment" + ] + } + }, + "inputs": { + "resource-assignment-properties": { + "description": "Dynamic PropertyDefinition for workflow(resource-assignment).", + "required": true, + "type": "dt-resource-assignment-properties" + } + }, + "outputs": { + "meshed-template": { + "type": "json", + "value": { + "get_attribute": [ + "resource-assignment", + "assignment-params" + ] + } + } + } + }, + "node_templates": { + "resource-assignment": { + "type": "component-resource-resolution", + "interfaces": { + "ResourceResolutionComponent": { + "operations": { + "process": { + "inputs": { + "artifact-prefix-names": [ + "vf-module-1" + ] + } + } + } + } + }, + "artifacts": { + "vf-module-1-template": { + "type": "artifact-template-velocity", + "file": "Templates/vf-module-1-template.vtl" + }, + "vf-module-1-mapping": { + "type": "artifact-mapping-resource", + "file": "Templates/vf-module-1-mapping.json" + } + } + } + } + . . . + +.. _workflow_multiple_actions: + +Multiple sub-actions +********************** + +The workflow is backed by a Directed Graph engine, dg-generic (see :ref:`node_type` -> DG, +and is an **imperative** workflow. + +A DG used as workflow for CDS is composed of multiple execute nodes; each individual +execute node refers to an modelled Component (see :ref:`node_type` -> Component) instance. + +In the example above, you can see the target of the workflow's steps execute-script is +``execute-remote-ansible-process``, which is a node_template of type ``dg_generic`` + +`Link of example +<https://github.com/onap/ccsdk-cds/blob/master/components/model-catalog/blueprint-model/test-blueprint/remote_scripts/Definitions/remote_scripts.json#L184-L204>`_ + +.. code-block:: json + :caption: **workflow plan example** + + . . . + "topology_template": { + "workflows": { + "execute-remote-ansible": { + "steps": { + "execute-script": { + "description": "Execute Remote Ansible Script", + "target": "execute-remote-ansible-process" + ] + } + }, + "inputs": { + "ip": { + "required": false, + "type": "string" + }, + "username": { + "required": false, + "type": "string" + }, + "password": { + "required": false, + "type": "string" + }, + "execute-remote-ansible-properties": { + "description": "Dynamic PropertyDefinition for workflow(execute-remote-ansible).", + "required": true, + "type": "dt-execute-remote-ansible-properties" + } + }, + "outputs": { + "ansible-variable-resolution": { + "type": "json", + "value": { + "get_attribute": [ + "resolve-ansible-vars", + "assignment-params" + ] + } + }, + "prepare-environment-logs": { + "type": "string", + "value": { + "get_attribute": [ + "execute-remote-ansible", + "prepare-environment-logs" + ] + } + }, + "execute-command-logs": { + "type": "string", + "value": { + "get_attribute": [ + "execute-remote-ansible", + "execute-command-logs" + ] + } + } + } + } + }, + "node_templates": { + "execute-remote-ansible-process": { + "type": "dg-generic", + "properties": { + "content": { + "get_artifact": [ + "SELF", + "dg-execute-remote-ansible-process" + ] + }, + "dependency-node-templates": [ + "resolve-ansible-vars", + "execute-remote-ansible" + ] + }, + "artifacts": { + "dg-execute-remote-ansible-process": { + "type": "artifact-directed-graph", + "file": "Plans/CONFIG_ExecAnsiblePlaybook.xml" + } + } + } + +Properties of a workflow +************************** + +.. list-table:: + :widths: 25 75 + :header-rows: 1 + + * - Property + - Description + * - workflow-name + - Defines the name of the action that can be triggered by external system + * - inputs + - | They are two types of inputs, the dynamic ones, and the static one. + | + + .. tabs:: + + .. tab:: static + + Specified at workflow level + + * can be inputs for the Component(s), see the inputs section of the component of interest. + * represent inputs to derived custom logic within scripting + + These will end up under ``${actionName}-request`` section of the payload (see Dynamic API) + + .. tab:: dynamic + + Represent the resources defined as input (see :ref:`node_type` -> Source -> Input) + within mapping definition files (see :ref:`artifact_type` -> Mapping). + + The **enrichment process** will (see :ref:`enrichment`) + + * dynamically gather all of them under a data-type, named ``dt-${actionName}-properties`` + * will add it as a input of the workflow, as follow using this name: ``${actionName}-properties`` + + Example for workflow named `resource-assignment`: + + .. code-block:: json + :caption: **dynamic input** + + "resource-assignment-properties": { + "required": true, + "type": "dt-resource-assignment-properties" + } + * - outputs + - | Defines the outputs of the execution; there can be as many output as needed. + | Depending on the Component (see :ref:`node_type` -> Component) of use, some attribute might be retrievable. + + .. list-table:: + :widths: 50 50 + :header-rows: 1 + + * - type + - value + * - data type (complex / primitive) + - value resolvable using :ref:`expression` -> get_attribute + * - steps + - | Defines the actual step to execute as part of the workflow + | + .. list-table:: + :widths: 25 25 50 + :header-rows: 1 + + * - step-name + - description + - target + * - name of the step + - step description + - | a node_template implementing on of the supported Node Type (see :ref:`node_type` -> DG), + either a Component or a DG + | (see :ref:`workflow_single_action` or :ref:`workflow_multiple_actions`) + +Example: + +.. code-block:: json + :caption: **workflow example** + + { + "workflow": { + "resource-assignment": { <- workflow-name + "inputs": { + "vnf-id": { <- static inputs + "required": true, + "type": "string" + }, + "resource-assignment-properties": { <- dynamic inputs + "required": true, + "type": "dt-resource-assignment-properties" + } + }, + "steps": { + "call-resource-assignment": { <- step-name + "description": "Resource Assignment Workflow", + "target": "resource-assignment-process" <- node_template targeted by the step + } + }, + "outputs": { + "template-properties": { <- output + "type": "json", <- complex type + "value": { + "get_attribute": [ <- uses expression to retrieve attribute from context + "resource-assignment", + "assignment-params" + ] + } + } + } + } + } + } + +`TOSCA definition <http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/csd01/TOSCA-Simple-Profile-YAML-v1.2-csd01.html#_Toc494454203>`_ + |