工作流

像 AWX 一样串联 playbook、审批和其他工作流

  1. 工作流如何运行
  2. 在节点之间传递数据
  3. 在 AWX 运行器上运行的节点,会以同样的方式传递其 AWX 作业的工件。
  4. 本节内容

面向表单作者:什么是工作流、其节点如何运行,以及接下来该读什么。

工作流是由节点组成的图。每个节点运行某样东西:设计器中的某个 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 作业的工件。

本节内容

以下页面详细介绍工作流:

页面 涵盖内容
工作流文件 文件的语法、节点类型以及每个节点的运行设置
在设计器中编辑 设计器的工作流部分:图、节点和连接对话框以及试运行
运行工作流 运行它的表单、作业页面、节点输出、审批和中止