快速入门

先决条件

在开始遵循本指南之前,请确保您已完成以下三个先决条件。

安装并运行 Mistral

请参考安装手册:Mistral 安装指南

Mistral 客户端命令指南

要使用 mistralclient,请参考 Mistral 客户端 / CLI 指南

导出 Keystone 凭据

要使用 OpenStack 命令行工具,您应该指定包含 OpenStack 安装配置详细信息的环境变量。以下示例假定 Identity 服务位于 127.0.0.1:5000,用户为 admin,租户为 admin,密码为 password

$ export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/
$ export OS_TENANT_NAME=admin
$ export OS_USERNAME=admin
$ export OS_PASSWORD=password

编写工作流

例如,我们有以下工作流。

---
version: "2.0"

my_workflow:
  type: direct

  input:
    - names

  tasks:
    task1:
      with-items: name in <% $.names %>
      action: std.echo output=<% $.name %>
      on-success: task2

    task2:
      action: std.echo output="Done"

此简单工作流遍历 task1 中的名称列表(使用 with-items),将它们存储为任务结果(使用 std.echo 操作),然后将单词“Done”存储为第二个任务 (task2) 的结果。

要了解有关 Mistral 工作流以及您可以执行的操作的更多信息,请阅读 Mistral 工作流语言规范

上传工作流

使用 Mistral CLI 创建工作流

$ mistral workflow-create <workflow.yaml>

输出应如下所示

+------------------------------------+-------------+-----------+--------+-------+---------------------+------------+
|ID                                  | Name        | Namespace | Tags   | Input | Created at          | Updated at |
+------------------------------------+-------------+-----------+--------+-------+---------------------+------------+
|9b719d62-2ced-47d3-b500-73261bb0b2ad| my_workflow |           | <none> | names | 2015-08-13 08:44:49 | None       |
+------------------------------------+-------------+-----------+--------+-------+---------------------+------------+

运行工作流并检查结果

使用 Mistral CLI 启动新的工作流,并将名称列表作为 JSON 传递

$ mistral execution-create my_workflow '{"names": ["John", "Mistral", "Ivan", "Crystal"]}'

确保输出如下

+--------------------+--------------------------------------+
| Field              | Value                                |
+--------------------+--------------------------------------+
| ID                 | 49213eb5-196c-421f-b436-775849b55040 |
| Workflow ID        | 9b719d62-2ced-47d3-b500-73261bb0b2ad |
| Workflow name      | my_workflow                          |
| Workflow namespace |                                      |
| Description        |                                      |
| Task Execution ID  | <none>                               |
| Root Execution ID  | <none>                               |
| State              | RUNNING                              |
| State info         | None                                 |
| Created at         | 2017-03-06 11:24:10                  |
| Updated at         | 2017-03-06 11:24:10                  |
+--------------------+--------------------------------------+

稍等片刻,检查工作流执行的状态(将示例执行 ID 替换为上面输出的 ID)

$ mistral execution-get 49213eb5-196c-421f-b436-775849b55040

+--------------------+--------------------------------------+
| Field              | Value                                |
+--------------------+--------------------------------------+
| ID                 | 49213eb5-196c-421f-b436-775849b55040 |
| Workflow ID        | 9b719d62-2ced-47d3-b500-73261bb0b2ad |
| Workflow name      | my_workflow                          |
| Workflow namespace |                                      |
| Description        |                                      |
| Task Execution ID  | <none>                               |
| Root Execution ID  | <none>                               |
| State              | SUCCESS                              |
| State info         | None                                 |
| Created at         | 2017-03-06 11:24:10                  |
| Updated at         | 2017-03-06 11:24:20                  |
+--------------------+--------------------------------------+

也可以检查每个 任务 的状态

$ mistral task-list 49213eb5-196c-421f-b436-775849b55040

+--------------------------------------+-------+---------------+--------------------+--------------------------------------+---------+------------+---------------------+---------------------+
| ID                                   | Name  | Workflow name | Workflow namespace | Execution ID                         | State   | State info | Created at          | Updated at          |
+--------------------------------------+-------+---------------+--------------------+--------------------------------------+---------+------------+---------------------+---------------------+
| f639e7a9-9609-468e-aa08-7650e1472efe | task1 | my_workflow   |                    | 49213eb5-196c-421f-b436-775849b55040 | SUCCESS | None       | 2017-03-06 11:24:11 | 2017-03-06 11:24:17 |
| d565c5a0-f46f-4ebe-8655-9eb6796307a3 | task2 | my_workflow   |                    | 49213eb5-196c-421f-b436-775849b55040 | SUCCESS | None       | 2017-03-06 11:24:17 | 2017-03-06 11:24:18 |
+--------------------------------------+-------+---------------+--------------------+--------------------------------------+---------+------------+---------------------+---------------------+

检查任务 ‘task1’ 的结果

$ mistral task-get-result f639e7a9-9609-468e-aa08-7650e1472efe

[
    "John",
    "Mistral",
    "Ivan",
    "Crystal"
]

如果需要,我们可以更深入地查看单个任务的 action_executions 的结果列表

$ mistral action-execution-list f639e7a9-9609-468e-aa08-7650e1472efe

+--------------------------------------+----------+---------------+--------------------+-----------+--------------------------------------+---------+----------+---------------------+---------------------+
| ID                                   | Name     | Workflow name | Workflow namespace | Task name | Task ID                              | State   | Accepted | Created at          | Updated at          |
+--------------------------------------+----------+---------------+--------------------+-----------+--------------------------------------+---------+----------+---------------------+---------------------+
| 4e0a60be-04df-42d7-aa59-5107e599d079 | std.echo | my_workflow   |                    | task1     | f639e7a9-9609-468e-aa08-7650e1472efe | SUCCESS | True     | 2017-03-06 11:24:12 | 2017-03-06 11:24:16 |
| 5bd95da4-9b29-4a79-bcb1-298abd659bd6 | std.echo | my_workflow   |                    | task1     | f639e7a9-9609-468e-aa08-7650e1472efe | SUCCESS | True     | 2017-03-06 11:24:12 | 2017-03-06 11:24:16 |
| 6ae6c19e-b51b-4910-9e0e-96c788093715 | std.echo | my_workflow   |                    | task1     | f639e7a9-9609-468e-aa08-7650e1472efe | SUCCESS | True     | 2017-03-06 11:24:12 | 2017-03-06 11:24:16 |
| bed5a6a2-c1d8-460f-a2a5-b36f72f85e19 | std.echo | my_workflow   |                    | task1     | f639e7a9-9609-468e-aa08-7650e1472efe | SUCCESS | True     | 2017-03-06 11:24:12 | 2017-03-06 11:24:17 |
+--------------------------------------+----------+---------------+--------------------+-----------+--------------------------------------+---------+----------+---------------------+---------------------+

检查第一个 action_execution 的结果

$ mistral action-execution-get-output 4e0a60be-04df-42d7-aa59-5107e599d079

{
    "result": "John"
}

恭喜!现在您可以使用 OpenStack 工作流服务了!