OpenStack 工作流组件: Mistral
1 Mistral 简介
- Engine:从 Workflow 队列中选出 Workflow,处理 Workflow 中 task 数据转换,条件判断等操作。
- Scheduler:Engine 和 Task Executor 交互的中间组件,存储并执行延时调用的 task。
- Task Executor:从 Task 队列中选出 Task ,执行 task 的 action,将执行结果发给 Engine。
- API Server:提供 Mistral API 给用户,同时通过 Mistral API 可以监控 Workflow 的执行流。
2 部署 Mistral
2.1 Mistral 安装
2.2 Mistral 服务
- Mistral API service
- mistral-dashboard service
- Mistral Engine service
- Mistral Executor service
3 Mistral 语法
3.1 Mistral workbook 示例
---
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
3.2 Mistral Workflow
3.2.1 direct workflow
- on-success:声明当前 task 执行成功将执行的 task。
- on-error:声明当前 task 执行失败将执行的 task。
- on-complete:声明无论当前 task 执行成功/失败都将执行的 task。
tasks:
create_vm:
workflow: create_vm
input:
operationType: <% $.operationType %>
operationParams: <% $.operationParams %>
publish:
precheck_result: <% task(create_vm).result.precheck_result %>
finalize_tag: <% task(create_vm).result.precheck_result %>
publish-on-error:
error_message: <% task(create_vm).result.error_message %>
finalize_tag: "error"
on-success:
- check_create_vm_done: <% $.precheck_result = 'success'%>
- set_workflow_fail: <% $.precheck_result = 'error'%>
on-error:
- set_workflow_fail check_create_vm_done:
action: heat.stacks_get stack_id=<% $.stack.id %>
publish:
stack_status: <% task(check_create_vm_done).result.stack_status %>
error_message: "something wrong!."
publish-on-error:
error_message: <% task(check_create_vm_done).result %>
on-complete:
- check_vm_exists
- set_workflow_success
3.2.2 reverse workflow
---
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: <% task(create_vm).result.id %> search_for_ip:
action: nova.floating_ips_findall instance_id=null
publish:
vm_ip: <% task(search_for_ip).result[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]
3.3.3 common workflow 语法
- type:定义 workflow 是哪种类型,direct 或 reverse。可选项,默认为 direct。
- input:提供给 workflow 的参数,参数名前加 “-”。可选项。
- output:workflow 执行的输出结果,该结果可被上一层 workflow 使用。可选项。
- tasks:workflow 定义的 task,非可选项。
3.3 Mistral task
- name:定义的 task 名称,非可选。
- description:task 的描述文本,可选。
- action:执行 task 需要执行的 action。
- workflow:执行 task 需要执行的 workflow。task 既支持执行 action 也支持执行 workflow。
- input:task 执行需要的输入参数。
- publish:task 执行成功的输出,输出是 json 格式文本。在后面的操作中可以使用 publish 的结果。
- publish-on-error:task 执行失败的输出。
- timeout: 以秒为单位定义 task 的超时时间,如果 task 在规定时间内未完成则 task 被视为执行失败,属于 timeout policy。
- retry: 定义 task 执行失败需要执行的模式,有 count,delay,break-in 和 continue-on 特性:
get_vm_result:
action: vm_result
input:
operation_parameters: <% $.operationParams %>
retry:
count: <% 10 %>
delay: 30
3.4 Mistral action
3.4.1 system action
- std.fail:始终执行 fail,常用于 workflow 失败时执行。
- std.noop:什么都不做的 action。
- stdjavascript:执行 javascript 代码,它包含两个特性:context 和 script。context 中定义了在 script 中使用的变量,script 是javascript 语法,如下所示:
check_vm:
action: std.javascript
input:
context:
vm: <% $.vm %>
script: |
if( $.vm.count != "0")
return "yes";
else
return "no";
3.4.2 ad-hoc action
4 Mistral API
- GET /v2/workflows
- POST /v2/workflows
- DELETE /v2/workflows
- PUT /v2/workflows
- GET /v2/actions
- ...
[root@lianhuasheng home]# mistral workflow-list --debug
DEBUG (connectionpool) Starting new HTTP connection (1): localhost:8989
DEBUG (connectionpool) http://localhost:8989 "GET /v2/workflows?fields=id%2Cname%2Cnamespace%2Cproject_id%2Ctags%2Cinput%2Cscope%2Ccreated_at%2Cupdated_at&sort_keys=created_at&sort_dirs=asc HTTP/1.1" 200 68369
DEBUG (httpclient) HTTP GET http://localhost:8989/v2/workflows?fields=id%2Cname%2Cnamespace%2Cproject_id%2Ctags%2Cinput%2Cscope%2Ccreated_at%2Cupdated_at&sort_keys=created_at&sort_dirs=asc 200
...
5 Mistral 常用命令
(mistral) help Shell commands (type help <topic>):
===================================
alias exit history py quit shell unalias
edit help load pyscript set shortcuts Application commands (type help <topic>):
=========================================
action-create environment-get run-action
action-delete environment-list service-list
action-execution-delete environment-update task-get
action-execution-get event-trigger-create task-get-published
action-execution-get-input event-trigger-delete task-get-result
action-execution-get-output event-trigger-get task-list
action-execution-list event-trigger-list task-rerun
action-execution-update execution-create workbook-create
action-get execution-delete workbook-delete
action-get-definition execution-get workbook-get
action-list execution-get-input workbook-get-definition
action-update execution-get-output workbook-list
action-validate execution-get-report workbook-update
bash-completion execution-list workbook-validate
complete execution-update workflow-create
cron-trigger-create help workflow-delete
cron-trigger-delete member-create workflow-get
cron-trigger-get member-delete workflow-get-definition
cron-trigger-list member-get workflow-list
environment-create member-list workflow-update
environment-delete member-update workflow-validate
---
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"
$ 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 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 |
+--------------------+--------------------------------------+
$ mistral execution-get 49213eb5-196c-421f-b436-775849b55040 # 注意这里的 id 是 execution_id +--------------------+--------------------------------------+
| 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 |
+--------------------------------------+-------+---------------+--------------------+--------------------------------------+---------+------------+---------------------+---------------------+
$ mistral task-get-result f639e7a9-9609-468e-aa08-7650e1472efe [
"John",
"Mistral",
"Ivan",
"Crystal"
]
$ 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 |
+--------------------------------------+----------+---------------+--------------------+-----------+--------------------------------------+---------+----------+---------------------+---------------------+
$ mistral action-execution-get-output 4e0a60be-04df-42d7-aa59-5107e599d079
{
"result": "John"
}
OpenStack 工作流组件: Mistral的更多相关文章
- Mistral 工作流组件之一 概述
Mistral的前世今生: Mistral是Mirantis公司为Openstack开发的工作流组件,提供Workflow As a Service.典型的应用场景包括任务计划服务Cloud Cro ...
- Openstack Sahara组件和架构简介
1.简介 Apache Hadoop是目前被广泛使用的主流大数据处理计算框架,Sahara项目旨在使用用户能够在Openstack平台上便于创建和管理Hadoop以及其他计算框架集群,实现类似AWS的 ...
- winform快速开发平台 -> 工作流组件(仿GooFlow)
对于web方向的工作流,一直在用gooflow对于目前我的winform开发平台却没有较好的工作流组件. 针对目前的项目经验告诉我们.一个工作流控件是很必要的. 当然在winform方面的工作流第三 ...
- 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-Web
实例演示使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义—请假申请流程-Web 参考文章: RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系 ...
- OpenStack基础组件安装keystone身份认证服务
域名解析 vim /etc/hosts 192.168.245.172 controller01 192.168.245.171 controller02 192.168.245.173 contro ...
- 八、OpenStack—Cinder组件安装
一.安装和配置控制器节点 1.先决条件 1)创建数据库 # mysql -u root -p 2)创建cinder数据库 MariaDB [(none)]> CREATE DATABASE ci ...
- 二、OpenStack—keystone组件介绍与安装
一.Keystone介绍 keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等 ...
- OpenStack共享组件
一.云计算的前世今生 1.物理机架构,应用部署和运行在物理机上 2.虚拟化架构,物理机上运行若干虚拟机,应用系统直接部署到虚拟机上 3.云计算架构,虚拟化提高了单台物理机的资源使用率 二.Open ...
- openstack 之~openstack各组件关系
认识openstack 第一:openstack是什么? OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项 ...
- OpenStack各组件逻辑关系、通信部署关系及工作流程
一. OpenStack组件之间的逻辑关系 OpenStack 是一个不断发展的系统,所以 OpenStack 的架构是演进的,举个例子: E 版本有5个组件 Compute 是 Nova:Imag ...
随机推荐
- 记录一个MySQL中order by 和 limit 连用导致分页查询不生效的坑
具体现象和这位同学的一致,具体的解决办法也是参考这位同学的做法 参考文章地址:https://www.cnblogs.com/yuluoxingkong/p/10681583.html
- 【Python】【OpenCV】凸轮廓和Douglas-Peucker算法
针对遇到的各种复杂形状的主体,大多情况下,我们可以求得一个近似的多边形来简化视觉图像处理,因为多边形是由直线组成的,这样就可以准确的划分区域来便捷后续的操作. cv2.arcLength() Meth ...
- 创建一个双模式跨运行时的 JavaScript 包
本文将指导你发布双模式.跨运行时的 JavaScript 包.了解如何创建与 ESM 和 CommonJS 以及 Node.js.Deno 和浏览器等不同运行时兼容的库. 随着 JavaScript ...
- 2023总结与展望--Empirefree
今年一篇博客都没写过了,好像完全在忙在工作和生活上面了,珍惜自我,保持热情,2024对我好点 目录 1. 年终总结 1.1.学习工作计划 1.2. 生活计划 1.3 个人总结 2. 未来展望 1. 年 ...
- WPF通用权限平台系统,正在研发中(基本于:VS2019 WPF+WebAPI(.NET 6.0)+SqlSugar +SQLServer2014)
- 这些常见的python编码习惯,你都会吗
本文分享自华为云社区<不得不知的十个常见PY编码习惯>,作者:码乐. 简介 语言在发展和变化,编码习惯也在发生改变.这里简单聊聊 17个python中常见的编码习惯或者风格. 1,可变数据 ...
- 基于OpenCV的语音数据读取
1)进入http://yuyin.baidu.com/app,在弹出的界面中单击要针对哪个应用开通语音识别服务,个人测试可全选 (开通个人认证,白嫖) 注意: 1.百度语音识别API对于要 ...
- Golang 命名返回值和普通返回值
1.概述 在Go语言中,函数可以有命名返回值和普通(匿名)返回值.命名返回值会被视为定义在函数顶部的变量,并且在使用 return 语句返回时,不再必须在其后面指定参数名,也就是支持"裸&q ...
- GetView介绍 以及 GetxController生命周期
etView 只是对已注册的 Controller 有一个名为 controller 的getter的 const Stateless 的 Widget,如果我们只有单个控制器作为依赖项,那我们就可以 ...
- Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow
摘要:聊一聊Git中的工作流--分支策略. 本文分享自华为云社区<Git工作流中常见的三种分支策略:GitFlow.GitHubFlow以及GitLabFlow>,原文作者:敏捷的小智. ...