在 Ansible 循环中匹配两个相同大小列表的项目

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

我在 Ansible 中有两个注册变量,两者的行数相同。

register_1.stdout_lines
有以下输出

1
2
...
120

register_2.stdout_lines
有以下输出

one
two
...
one hundred twenty

我想将

register_1.stdout_lines
的第一个值与
register_2.stdout_lines
的第一个值匹配,将
register_1.stdout_lines
的第二个值与
register_2.stdout_lines
的第二个值匹配,一直到 120。

预期输出:

1 one
2 two
... ...
120 one hundred twenty

我尝试使用循环,但我得到的输出为:

1 one
1 two
1 three
...
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.