工作流
像 AWX 一样串联 playbook、审批和其他工作流
面向表单作者:什么是工作流、其节点如何运行,以及接下来该读什么。
工作流是由节点组成的图。每个节点运行某样东西:设计器中的某个 playbook、另一个工作流、一个审批, 或者一次仓库拉取。节点之间的连接说明接下来运行什么:成功时、失败时或始终。由 类型为 workflow 的表单运行它,作业页面会在运行期间实时绘制它。
工作流遵循 AWX 的语法和 AWX 的规则,因此从 AWX 导出的工作流在 AnsibleForms 中读起来完全一样。它们在 RTE 上运行,不需要 AWX:playbook 节点是一个独立的作业,使用节点的清单、凭据、限制和标签。
工作流如何运行
节点按照 AWX 的规则运行,互不依赖的分支并行运行。
- 没有父节点的节点会立即开始,即在工作流开始时。
- 连接在其节点结束时触发:成功时连接在成功后触发,失败时连接在失败后触发, 始终连接在两种情况下都触发。被取消的节点不会触发任何连接。
- 只要有一个指向某节点的连接触发,该节点就会开始。 开启所有父节点必须汇合后,它会等到所有 指向它的连接都触发。
- 不再可能开始的节点会被标记为不运行,只能由它启动的节点也是如此。
- 当某个节点失败且没有任何处理时,工作流失败:即该节点既没有失败时连接,也没有始终连接。 被连接处理了的失败不会使工作流失败。
带有条件( if_extra_var )且条件不满足的节点会被跳过。其后的内容按成功后的情况运行。审批 节点不接受条件:它总是等待回应。
在节点之间传递数据
节点的 playbook 用 set_stats 收集的内容,会作为 extra vars 传给它之后的节点,就像 AWX 传递作业的 工件一样。节点会获得每个指向它且已触发的父节点的数据,按父节点书写的顺序合并, 并把收到的数据连同其自身作业的数据一起往下传,二者都设置了同一个键时以其自身的为准。
# build.yaml, the first node : its version and build id go to the nodes after it
- name: Build
hosts: localhost
gather_facts: false
tasks:
- name: Pass the build on
ansible.builtin.set_stats:
data:
version: "2.4.1"
build_id: 42
之后的节点就可以像读取其他 extra var 一样读取 {{ version }} 和 {{ build_id }} 。
节点的 extra vars 来自四个地方。其中之一 extra_data 是节点自己的变量:这是 AWX 对它们的叫法, 在工作流文件中设置在节点上。当两个来源设置了同一个键时,优先级顺序与 AWX 相同,从低到高:
| 来源 | 优先于 |
|---|---|
节点自己的变量( extra_data ) | 无 |
通过 set_stats 传递的数据 | 节点的 extra_data |
工作流的 extra_vars | 传递的数据 |
| 表单的值 | 所有其他来源 |
- 只有 playbook 范围的数据会被传递:即
per_host: false(默认值)的set_stats。 - 审批节点、被跳过的节点和项目节点会把收到的数据原样往下传。
- 节点输出的末尾会列出它传递的键,只列名称,因为其值可能是机密。
- 节点的作业会把其数据保存为工件(在其页面上点击显示工件),工作流作业则保存其所有 节点的数据,因此嵌套的工作流也会把数据传给其后的节点。
-
在 AWX 运行器上运行的节点,会以同样的方式传递其 AWX 作业的工件。
本节内容
以下页面详细介绍工作流: