Ich benutze derzeit Ansible 1.7.2. Ich habe folgende Test Textbuch:Verwenden von set_facts und with_items zusammen 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
Die erste Aufgabe setzt eine Tatsache, die in ihm eine Liste mit einem Element ist. Die nachfolgenden Aufgaben fügen diese Liste mit mehr Werten an. Die ersten drei Aufgaben funktionieren wie erwartet, die letzte jedoch nicht. Hier ist der Ausgang ist, wenn ich dies auszuführen:
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
Bei den with_items in Aufgabe 4 und der Tatsache, dass die Ausgabe der Aufgabe zeigt ordnungsgemäß über die Elemente in dieser Liste iteriert, würde ich das Ergebnis zu erwarten haben alle Zahlen enthalten null bis sechs. Aber diese letzte Aufgabe scheint nur set_fact mit dem letzten Element in der Liste auszuwerten. Ist das möglicherweise ein Fehler in Ansible?
Edit: Ich habe auch nur auf Ansible 1,8 getestet und die Ausgabe war identisch.
Meine beste Vermutung wäre, dass ansible wertet '{{foo}}' nur einmal während der Ausführung der Aufgabe 'set fact 4' aus. Willst du herausfinden, wie man zwei Listen zusammenführt oder nur neugierig? – Kashyap
Ja, das scheint der Fall zu sein. Nein, ich versuche nicht nur Listen zusammenzuführen. Ich versuche, dynamisch generierte Dateinamen zu verfolgen, damit andere Aufgaben sie durchlaufen können. –
Sieht so aus, als ob dies eine Funktion ist, die viele Leute wünschen, und es gibt sogar eine [pull request] (https://github.com/ansible/ansible/pull/8019) dafür, aber es wird aus irgendeinem Grund hinausgeschoben ... –