В настоящее время я использую Ansible 1.7.2. У меня есть следующая тестовая тетрадь:
---
- 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
Первая задача устанавливает факт, что список с одним элементом в нем. Последующие задачи добавляются к этому списку с большим количеством значений. Первые три задачи работают так, как ожидалось, но последний не работает. Здесь вывод, когда я запускаю это:
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
Учитывая with_items в задаче 4 и тот факт, что результат показывает, что задача правильно повторена по элементам в этом списке, я ожидал, что результат будет содержать все числа от нуля до шести. Но эта последняя задача, по-видимому, оценивает только set_fact с последним элементом в списке. Возможно, это ошибка в Ansible?
Изменить: я также просто протестировал это на незаменимом 1.8, и результат был идентичным.