From e6f2b3f0d27221af5a27a13a30c8239c13c9514b Mon Sep 17 00:00:00 2001 From: Nikolay Mahotkin Date: Tue, 1 Sep 2015 14:28:30 +0300 Subject: [PATCH] Mistral docs terminology: workbooks and workflows * Fixed workbook namespacing image (deleted triggers) Partially implements: blueprint mistral-docs-terminology Change-Id: I008afe34abf916a23401f81de38fddb4e5f7622f --- .../img/Mistral_workbook_namespacing.png | Bin 33293 -> 19045 bytes doc/source/terminology/workbooks.rst | 66 ++++++++- doc/source/terminology/workflows.rst | 137 +++++++++++++++++- 3 files changed, 201 insertions(+), 2 deletions(-) diff --git a/doc/source/img/Mistral_workbook_namespacing.png b/doc/source/img/Mistral_workbook_namespacing.png index 4fbf32f08b7e76a9e16ac3fe96cd4fa04d73628d..21942e0064f47f4c11ff6c9245b7fc55f4f7bd46 100644 GIT binary patch literal 19045 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 YON(jxz>(778u+6qrz%?}Z5;H!0j$(ZF#rGn diff --git a/doc/source/terminology/workbooks.rst b/doc/source/terminology/workbooks.rst index cc5cee0c3..4b98ff5d2 100644 --- a/doc/source/terminology/workbooks.rst +++ b/doc/source/terminology/workbooks.rst @@ -1,4 +1,68 @@ Workbooks ========= -TBD \ No newline at end of file +Using workbooks users can combine multiple entities of any type (workflows and actions) into one document and upload to Mistral service. When uploading a workbook Mistral will parse it and save its workflows and actions as independent objects which will be accessible via their own API endpoints (/workflows and /actions). Once it's done the workbook comes out of the game. User can just start workflows and use references to workflows/actions as if they were uploaded without workbook in the first place. However, if need to modify these individual objects user can modify the same workbook definition and re-upload it to Mistral (or, of course, user can do it independently). + +**Namespacing** + +One thing that's worth noting is that when using a workbook Mistral uses its name as a prefix for generating final names of workflows and actions included into the workbook. To illustrate this principle let's take a look at the figure below. + +.. image:: /img/Mistral_workbook_namespacing.png + :align: center + +So after a workbook has been uploaded its workflows and actions become independent objects but with slightly different names. + +YAML example +^^^^^^^^^^^^ +:: + + --- + version: '2.0' + + name: my_workbook + description: My set of workflows and ad-hoc actions + + workflows: + local_workflow1: + type: direct + + tasks: + task1: + action: local_action str1='Hi' str2=' Mistral!' + on-complete: + - task2 + + task2: + action: global_action + ... + + local_workflow2: + type: reverse + + tasks: + task1: + workflow: local_workflow1 + + task2: + workflow: global_workflow param1='val1' param2='val2' + requires: [task1] + ... + + actions: + local_action: + input: + - str1 + - str2 + base: std.echo output="<% $.str1 %><% $.str2 %>" + +**NOTE:** Even though names of objects inside workbooks change upon uploading Mistral allows referencing between those objects using local names declared in the original workbook. + +**Attributes** + +* **name** - Workbook name. **Required.** +* **description** - Workbook description. *Optional*. +* **tags** - String with arbitrary comma-separated values. *Optional*. +* **workflows** - Dictionary containing workflow definitions. *Optional*. +* **actions** - Dictionary containing ad-hoc action definitions. *Optional*. + +For more details about DSL itself, please see :doc:`Mistral DSL specification ` diff --git a/doc/source/terminology/workflows.rst b/doc/source/terminology/workflows.rst index 4b0aedbe5..ed25b719a 100644 --- a/doc/source/terminology/workflows.rst +++ b/doc/source/terminology/workflows.rst @@ -1,4 +1,139 @@ Mistral Workflows ================= -TBD \ No newline at end of file +Workflow is the main building block of Mistral DSL, the reason why the +project exists. Workflow represents a process that can be described in a +various number of ways and that can do some job interesting to the end +user. Each workflow consists of tasks (at least one) describing what +exact steps should be made during workflow execution. + +YAML example +^^^^^^^^^^^^ +:: + + --- + version: '2.0' + create_vm: +   description: Simple workflow sample +   type: direct +   input: # Input parameter declarations +     - vm_name +     - image_ref +     - flavor_ref +   output: # Output definition +     vm_id: <% $.vm_id %> +   tasks: +     create_server: +       action: nova.servers_create name=<% $.vm_name %> image=<% $.image_ref %> flavor=<% $.flavor_ref %> +       publish: +         vm_id: <% $.id %> +       on-success: +         - wait_for_instance +     wait_for_instance: +       action: nova.servers_find id=<% $.vm_id %> status='ACTIVE' +       retry: +         delay: 5 +         count: 15 + +Workflow Types +-------------- + +Mistral DSL v2 introduces different workflow types and the structure of +each workflow type varies according to its semantics. Currently, Mistral +provides two workflow types: + +- `Direct workflow <#direct-workflow>`__ +- `Reverse workflow <#reverse-workflow>`__ + +See corresponding sections for details. + +Direct Workflow +--------------- + +Direct workflow consists of tasks combined in a graph where every next +task starts after another one depending on produced result. So direct +workflow has a notion of transition. Direct workflow is considered to be +completed if there aren't any transitions left that could be used to +jump to next tasks. + +.. image:: /img/Mistral_direct_workflow.png + +YAML example +^^^^^^^^^^^^ +:: + + --- + version: '2.0' + create_vm_and_send_email: +   type: direct +   input: +     - vm_name +     - image_id +     - flavor_id +   output: +     result: <% $.vm_id %> +   tasks: +     create_vm: +       action: nova.servers_create name=<% $.vm_name %> image=<% $.image_id %> flavor=<% $.flavor_id %> +       publish: +         vm_id: <% $.id %> +       on-error: +         - send_error_email +       on-success: +         - send_success_email +     send_error_email: +       action: send_email to='admin@mysite.org' body='Failed to create a VM' +       on_complete: +         - fail +     send_success_email: +       action: send_email to='admin@mysite.org' body='Vm is successfully created and its id: <% $.vm_id %>' + +Reverse Workflow +---------------- + +In reverse workflow all relationships in workflow task graph are +dependencies. In order to run this type of workflow we need to specify a +task that needs to be completed, it can be conventionally called 'target +task'. When Mistral Engine starts a workflow it recursively identifies +all the dependencies that need to be completed first. + +.. image:: /img/Mistral_reverse_workflow.png + +The figure explains how reverse workflow works. In the example, task +**T1** is chosen a target task. So when the workflow starts Mistral will +run only tasks **T7**, **T8**, **T5**, **T6**, **T2** and **T1** in the +specified order (starting from tasks that have no dependencies). Tasks +**T3** and **T4** won't be a part of this workflow because there's no +route in the directed graph from **T1** to **T3** or **T4**. + +YAML example +^^^^^^^^^^^^ +:: + + --- + version: '2.0' + create_vm_and_send_email: +   type: reverse +   input: +     - vm_name +     - image_id +     - flavor_id +   output: +     result: <% $.vm_id %> +   tasks: +     create_vm: +       action: nova.servers_create name=<% $.vm_name %> image=<% $.image_id %> flavor=<% $.flavor_id %> +       publish: +         vm_id: <% $.id %> +     search_for_ip: +       action: nova.floating_ips_findall instance_id=null +       publish: +         vm_ip: <% $[0].ip %> +     associate_ip: +       action: nova.servers_add_floating_ip server=<% $.vm_id %> address=<% $.vm_ip %> +       requires: [search_for_ip] +     send_email: +       action: send_email to='admin@mysite.org' body='Vm is created and id <% $.vm_id %> and ip address <% $.vm_ip %>' +       requires: [create_vm, associate_ip] + +For more details about DSL itself, please see :doc:`Mistral DSL specification ` \ No newline at end of file