Skip to content

关于本页

本页介绍更夫所基于的开源内核 Keep 的通用能力。更夫在其上提供国内化增强:钉钉/企业微信/飞书通知、国产大模型接入、LDAP 认证与值班管理。部署与上手请看快速上手。

Keep 工作流中的 foreach 指令允许您遍历项目列表并对每个项目执行操作。这对于处理步骤返回的多个结果或对实体集合执行操作特别有用。

主要特点 ​

  • 动态迭代: 遍历步骤返回或工作流中定义的任何列表或数组。
  • 作用域变量: 每次迭代在 foreach 变量下公开当前项目,允许您直接访问其属性。
  • 操作链接: 多个动作可以使用 foreach 在同一项目列表上顺序工作。

定义 foreach ​

要使用 foreach,请将其作为动作的一部分包含。foreach 的值应该是您要遍历的列表的引用。

带 foreach 的示例工作流 ​

yaml
workflow:
  id: foreach-example
  description: Demonstrates the use of foreach
  triggers:
    - type: manual
  steps:
    - name: get-pods
      provider:
        type: gke
        config: "{{ providers.gke }}"
        with:
          command_type: get_pods
  actions:
    - name: echo-pod-status
      foreach: "{{ steps.get-pods.results }}"
      provider:
        type: console
        with:
          message: "Pod name: {{ foreach.value.metadata.name }} || Namespace: {{ foreach.value.metadata.namespace }} || Status: {{ foreach.value.status.phase }}"

在此示例中:

  • get-pods 步骤检索 Kubernetes pods 列表。
  • foreach 遍历 get-pods 步骤返回的 results。
  • 对于每个 pod,它打印其 name、namespace 和 status。

使用 foreach 变量 ​

foreach 变量提供对迭代中当前项目的作用域访问。

作用域变量示例 ​

yaml
actions:
  - name: notify-pod-status
    foreach: "{{ steps.get-pods.results }}"
    provider:
      type: slack
      with:
        message: |
          Pod Name: {{ foreach.value.metadata.name }}
          Namespace: {{ foreach.value.metadata.namespace }}
          Status: {{ foreach.value.status.phase }}

在这种情况下:

  • {{ foreach.value }} 指的是列表中的当前项目。
  • 动态访问 metadata.name、metadata.namespace 和 status.phase 属性。

结合条件使用 foreach ​

您可以将 foreach 与 if 条件结合使用以进行筛选或选择性操作。

yaml
actions:
  - name: alert-critical-pods
    foreach: "{{ steps.get-pods.results }}"
    if: "{{ foreach.value.status.phase == 'Failed' }}"
    provider:
      type: slack
      with:
        message: "Critical pod failure detected: {{ foreach.value.metadata.name }}"

基于 MIT 协议开源的 Keep · 由更夫社区维护