从 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"
}
我需要从变量列表中获取奇数或偶数索引值:
例如:
- 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"
}