Я использую Ansible 1.7.2. У меня есть следующий тестовый учебник:Использование set_facts и with_items вместе в 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
Первая задача устанавливает факт, который представляет собой список с одним элементом в нем. Последующие задачи добавляются к этому списку с большим количеством значений. Первые три задачи работают так, как ожидалось, но последний не работает. Вот вывод, когда я запускаю это:
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, и выход был идентичным.
Мое предположение было бы, что анзибль оценивает '{{foo}}' только один раз во время выполнения задачи 'set fact 4'. Вы хотите выяснить, как объединить два списка или просто любопытно? – Kashyap
Да, это похоже на случай. Нет, не пытайтесь просто слить списки. Я пытаюсь отслеживать динамически генерируемые имена файлов, чтобы другие задачи могли проходить через них. –
Похоже, что это особенность, которую желают многие люди, и есть даже [тянуть запрос] (https://github.com/ansible/ansible/pull/8019) для него, но по какой-то причине он все равно выталкивается ... –