使用 ansible 循环迭代 2 个不相等的项

问题描述 投票:0回答:1

我正在尝试通过 ansible 迭代 2 个列表。第一个是包含 2 个项目的静态变量,第二个是包含 25 个项目的寄存器变量。

静态变量

  • 1
  • 2

注册变量(从输出中获取)

  • 一个
  • 两个
  • .
  • .
  • 二十五

我期望 1(静态变量)迭代所有 25 个注册变量(一次一个),2 也做同样的事情。

但是,在使用乘积过滤器时,1 不是迭代 1 到 25(一次一个),而是一次迭代全部。这是不希望的,因为我需要将此输出作为参数传递给另一个命令。


  • name: 获取第一个命令的列表 shell: ./mqcli.py -a {{ item }} "一些命令" | awk -F"[()]" '{print $2}' 循环:“{{静态变量}}” 注册:first_commmand_output

第一个任务按预期运行

  • name:根据第一个命令的输出运行第二个命令 shell: ./mqcli.py -a {{ item.0 }} "listcert -m "{{ item.1.stdout_lines }}"" 循环:“{{静态变量|产品(first_command_output.results)|列表}}” 注册:第二个命令输出

第二次需要帮助

loops ansible
1个回答
0
投票

给定变量

  svar: [1, 2]
  dvar: [one, two, three]

声明数据

  data: "{{ dict(svar | product([{'dvar': dvar}])) }}"

给予

  data:
    1:
      dvar: [one, two, three]
    2:
      dvar: [one, two, three]

在循环中,将字典转换为列表并迭代子元素

    - debug:
        msg: "{{ item.0.key }} {{ item.1 }}"
      loop: "{{ data | dict2items | subelements('value.dvar') }}"

给出(删节)

  msg: 1 one
  msg: 1 two
  msg: 1 three
  msg: 2 one
  msg: 2 two
  msg: 2 three

用于测试的完整剧本示例

- hosts: localhost

  vars:

    svar: [1, 2]
    dvar: [one, two, three]
    data: "{{ dict(svar | product([{'dvar': dvar}])) }}"

  tasks:

    - debug:
        var: data | to_yaml

    - debug:
        msg: "{{ item.0.key }} {{ item.1 }}"
      loop: "{{ data | dict2items | subelements('value.dvar') }}"
© www.soinside.com 2019 - 2024. All rights reserved.