Usando set_facts e with_items juntos no Ansible
Atualmente, estou usando o Ansible 1.7.2. Eu tenho o seguinte manual de teste:
---
- hosts: localhost
tasks:
- name: set fact 1
set_fact: foo="[ 'zero' ]"
- name: set fact 2
set_fact: foo="{{ foo }} + [ 'one' ]"
- name: set fact 3
set_fact: foo="{{ foo }} + [ 'two', 'three' ]"
- name: set fact 4
set_fact: foo="{{ foo }} + [ '{{ item }}' ]"
with_items:
- four
- five
- six
- debug: var=foo
A primeira tarefa define um fato que é uma lista com um item. As tarefas subseqüentes são anexadas a essa lista com mais valores. As três primeiras tarefas funcionam como esperado, mas a última não. Aqui está a saída quando executo isso:
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [set fact 1] ************************************************************
ok: [localhost]
TASK: [set fact 2] ************************************************************
ok: [localhost]
TASK: [set fact 3] ************************************************************
ok: [localhost]
TASK: [set fact 4] ************************************************************
ok: [localhost] => (item=four)
ok: [localhost] => (item=five)
ok: [localhost] => (item=six)
TASK: [debug var=foo] *********************************************************
ok: [localhost] => {
"foo": [
"zero",
"one",
"two",
"three",
"six"
]
}
PLAY RECAP ********************************************************************
localhost : ok=6 changed=0 unreachable=0 failed=0
Dado o with_items na tarefa 4 e o fato de que a saída mostra a tarefa iterada adequadamente sobre os itens dessa lista, eu esperaria que o resultado contivesse todos os números de zero a seis. Mas essa última tarefa parece estar avaliando apenas set_fact com o último item da lista. Isso é possivelmente um bug no Ansible?
Edit: Eu também acabei de testar isso no ansible 1.8 e a saída era idêntica.