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 }}"