从 Ansible Playbook 中的变量获取奇数或偶数索引值

Get Odd or Even Index Value from Variable in Ansible Playbook

我需要从变量列表中获取奇数或偶数索引值:

例如:

- hosts: myhost
  vars:
    - var1: ["test1","test2","test3","test4","test5"]
    - odd_var: []
    - even_var: []

我需要 odd_var 为 ["test1","test3","test5"] 和 even_var 为 ["test2","test4"] 并连接每个变量字符串odd_var 和 even_var 是一个字符串,如:

odd_string: "test1,test3,test5"

even_string: "test2,test4"

我应该怎么做才能做到这一点?

我试过了:

 - name: test
      set_fact:
        odd_list: "{{ odd_list | default([]) + [item] }}"
      loop: "{{ var1 }}"
      when: "{{ lookup('ansible.utils.index_of', var1, 'eq', item) is even }}

它有效,但我想知道我是否可以获得更有效的方法来做到这一点

使用正则表达式,检查最后一个字符。

- var1: ["test1","test2","test3","test4","test5"]
- even: "{{ var1 | select('search','.*[02468]$') | join(',') }}"      
- odd: "{{ var1 | select('search','.*[13579]$') | join(',') }}"

既然你说的是“索引值”,我会相信你的话,并根据列表中的位置,而不是字符串中包含的数字。

- hosts: localhost
  vars:
    var1:
      - test1
      - test2
      - test3
      - test4
      - test5
    odd_var: "{{ var1[::2] | join(',') }}"
    even_var: "{{ var1[1::2] | join(',') }}"
  tasks:
    - debug:
        msg: "{{ odd_var }} / {{ even_var }}"

输出:

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "test1,test3,test5 / test2,test4"
}