在ansible循环中匹配项目

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

我在ansible中有2个注册变量(都具有相同的行数)。

register_1.stdout_lines 有以下输出 1 2 。 。 120

register_2.stdout_lines 有以下输出 一 二 。 一百二十。

我想将register_1.stdout_lines的第一个值与register_2.stdout_lines的第一个值相匹配,将register_1.stdout_lines的第二个值与register_2.stdout_lines的第二个值相匹配,并继续直到120。

预期产出 1 一 2 两个 。 120百二十

尝试循环时,输出为,

1 一 1 两个 1 三及以后

任何建议都会有帮助。谢谢

loops ansible
1个回答
0
投票

使用

zip
过滤器可以匹配两个相同大小的列表:

鉴于:

- name: Spell out numbers
  ansible.builtin.debug:
    msg: "{{ item.0 }} {{ item.1 }}"
  loop: "{{ register_1.stdout_lines | zip(register_2.stdout_lines) }}"
  loop_control:
      label: "{{ item.1 }}"
  vars:
    register_1:
      stdout_lines:
        - 1
        - 2
        - 3
        - ...
        - 120
    register_2:
      stdout_lines:
        - one
        - two
        - three
        - ...
        -  one hundred twenty

您将得到以下输出:

ok: [localhost] => (item=one) => 
  msg: 1 one
ok: [localhost] => (item=two) => 
  msg: 2 two
ok: [localhost] => (item=three) => 
  msg: 3 three
ok: [localhost] => (item=...) => 
  msg: '... ...'
ok: [localhost] => (item=one hundred twenty) => 
  msg: 120 one hundred twenty
© www.soinside.com 2019 - 2024. All rights reserved.