You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible中如何实现两个不等长列表的逐元素配对迭代?

解决Ansible中列表配对迭代的问题

你的核心问题是用product过滤器会生成全笛卡尔积,导致static_variable的每个元素和first_commmand_output.results的所有结果(两个任务执行结果)配对,而你需要的是:static_variable的每个元素只和自己触发的第一个任务产生的25个输出行逐个配对。

修正后的Playbook代码

---
- name: 获取第一个命令的输出列表
  shell: ./mqcli.py -a {{ item }} "some command" | awk -F"[()]" '{print $2}' 
  loop: "{{ static_variable }}" 
  register: first_commmand_output

# 第一个任务执行正常,每个static元素对应一个结果,结果里包含25行输出的stdout_lines

- name: 根据第一个命令的输出执行第二个命令
  shell: ./mqcli.py -a {{ item.0.item }} "listcert -m {{ item.1 }}"
  loop: "{{ first_commmand_output.results | subelements('stdout_lines') }}"
  register: second_command_output

关键说明

  1. first_commmand_output.results的结构:第一个任务loop遍历static_variable,所以results列表里的每个元素对应一个static_variable项,每个元素包含:
    • item:对应的static_variable元素
    • stdout_lines:该元素触发命令后得到的25行输出
  2. subelements过滤器的作用:它会把results里的每个元素,和其内部stdout_lines列表的每个元素拆分成配对项。比如:
    • 对results[0](对应static_variable[0]),会生成25个配对:(results[0], stdout_lines[0])、(results[0], stdout_lines[1])...(results[0], stdout_lines[24])
    • 对results[1](对应static_variable[1]),同样生成25个配对
  3. 任务中的变量引用:
    • item.0.item:取到当前配对对应的static_variable元素
    • item.1:取到当前配对对应的stdout_lines中的单个元素

这样就完全符合你的需求:每个static_variable元素分别和自己对应的25个输出行逐个配对执行第二个命令。

内容的提问来源于stack exchange,提问作者Raj87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:07:41