為 List 裡的每個元素加字串
想為 List 裡的每個元素加字串,也就是原本是這樣的 List
my_list:
- apple
- banana
- watermelon
要讓輸出結果變為
new_list:
- "fruit: apple"
- "fruit: banana"
- "fruit: watermelon"
那該怎麼做呢?有好幾種方式可以作
第一種方式是用 loop
- name: Use loop to add string to elements in list
hosts: all
vars:
my_list:
- apple
- banana
- watermelon
tasks:
- name: Set variable 'new_list'
ansible.builtin.set_fact:
new_list: []
- name: Iterate
loop: "{{ my_list }}"
ansible.builtin.set_fact:
new_list: "{{ new_list + [ 'fruit: ' + item ] }}"
- name: Display
ansible.builtin.debug:
msg: "{{ new_list }}"
執行以後,可以看到輸出結果的確如想要的結果。
TASK [Iterate] ********************************************************************************************************************
ok: [localhost] => (item=apple)
ok: [localhost] => (item=banana)
ok: [localhost] => (item=watermelon)
TASK [Display] ********************************************************************************************************************
ok: [localhost] => {
"msg": [
"fruit: apple",
"fruit: banana",
"fruit: watermelon"
]
}
第二種方式是利用 map 搭配 ansible.builtin.regex_replace 這個 filter 來作
- name: Use loop to add string to elements in list
hosts: all
vars:
my_list:
- apple
- banana
- watermelon
tasks:
- name: Set variable 'new_list'
ansible.builtin.set_fact:
new_list: []
- name: Iterate
ansible.builtin.set_fact:
new_list: "{{ my_list | map('regex_replace', '(.+)', 'fruit: \\1') | list }}"
- name: Display
ansible.builtin.debug:
msg: "{{ new_list }}"
可以看到輸出結果如下
TASK [Display] ********************************************************************************************************************
ok: [localhost] => {
"msg": [
"fruit: apple",
"fruit: banana",
"fruit: watermelon"
]
}
跟第一個方式相比,少了一個使用 loop 的 task,簡潔許多。