Attualmente sto utilizzando Ansible 1.7.2. Ho il seguente playbook di prova:Utilizzo di set_facts e with_items insieme in Ansible
---
- 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
La prima attività imposta un fatto che è un elenco con un elemento in esso. Le attività successive si aggiungono a quell'elenco con più valori. Le prime tre attività funzionano come previsto, ma l'ultima no. Ecco l'output quando eseguo questo:
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
Date le with_items in compiti 4 e il fatto che l'output mostra il compito correttamente iterata nel corso degli elementi in quella lista, mi sarei aspettato il risultato di contenere tutti i numeri da zero a sei. Ma quest'ultima attività sembra valutare solo set_fact con l'ultimo elemento nell'elenco. È forse un bug in Ansible?
Edit: ho anche appena testato su ansible 1.8 e l'output era identico.
La mia ipotesi migliore sarebbe che ansible valuta '{{foo}}' solo una volta durante l'esecuzione del task 'set fact 4'. Vuoi capire come unire due liste o solo curioso? – Kashyap
Sì, sembra essere il caso. No, non provando a unire semplicemente le liste. Sto cercando di tenere traccia dei nomi di file generati dinamicamente in modo che altre attività possano scorrere attraverso di essi. –
Sembra che questa sia una caratteristica che molti desiderano, e c'è persino una [richiesta pull] (https://github.com/ansible/ansible/pull/8019) per questo, ma continua a essere espulsa per qualche motivo ... –