У меня есть сборник пьес анзибль который включает в себя файл дважды, и проходит в качестве параметра, чтобы изменить поведение:Несложная множественность включает в себя несколько задач?
site.yml:
---
- tasks:
- include: test.yml parm=AAA
- include: test.yml parm=BBB
включаемого файла просто выводит значение параметра:
test.yml:
- debug: msg="dbg 1 {{ parm }}"
Файла инвентаризации для работы на локальном хосте:
инвентарь:
localhost ansible_connection=local
Результат является то, что я ожидаю, включаемый файл запускается дважды, один раз с Пармом = AAA и один раз с Пармом = В :
>ansible-playbook -i inventory site.yml
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [include parm=AAA] ********************************************************
included: test.yml for localhost
TASK [debug msg=dbg 1 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 1 AAA"
}
TASK [include parm=BBB] ********************************************************
included: test.yml for localhost
TASK [debug msg=dbg 1 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 1 BBB"
}
PLAY RECAP *********************************************************************
localhost : ok=5 changed=0 unreachable=0 failed=0
Отлично. Теперь мне нужно сделать вторую задачу в заголовочном файле:
test.yml:
- debug: msg="dbg 1 {{ parm }}"
- debug: msg="dbg 2 {{ parm }}"
Что я ожидаю, что включаемый файл будет выполняться два раза, так же, как и прежде, первым делает оригинальную задачу «dbg 1 AAA», а затем новую задачу «dbg 2 AAA», а затем вторую задачу «dbg 1 BBB», а затем новую задачу «dbg 2 BBB».
Он делает это вместо того, чтобы:
>ansible-playbook -i inventory site.yml
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [include parm=AAA] ********************************************************
included: test.yml for localhost
TASK [debug msg=dbg 1 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 1 AAA"
}
TASK [debug msg=dbg 2 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 2 AAA"
}
PLAY RECAP *********************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0
Он пропустил вторую включить. Я думал, что, возможно, проблема в том числе и тот же файл несколько раз, поэтому я продублировал включаемый файл с новым именем:
test2.yml:
- debug: msg="dbg 1 {{ parm }}"
- debug: msg="dbg 2 {{ parm }}"
и настроить сборник пьес включить что вместо:
site.yml:
---
- tasks:
- include: test.yml parm=AAA
- include: test2.yml parm=BBB
Тогда если test.yml имеет только одну задачу, я получаю ожидаемый результат:
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [include parm=AAA] ********************************************************
included: test.yml for localhost
TASK [debug msg=dbg 1 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 1 AAA"
}
TASK [include parm=BBB] ********************************************************
included: test2.yml for localhost
TASK [debug msg=dbg 1 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 1 BBB"
}
TASK [debug msg=dbg 2 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 2 BBB"
}
PLAY RECAP *********************************************************************
localhost : ok=6 changed=0 unreachable=0 failed=0
Но если test.yml имеет две задачи, он пропускает второй включают в себя:
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [include parm=AAA] ********************************************************
included: test.yml for localhost
TASK [debug msg=dbg 1 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 1 AAA"
}
TASK [debug msg=dbg 2 {{ parm }}] **********************************************
ok: [localhost] => {
"changed": false,
"msg": "dbg 2 AAA"
}
PLAY RECAP *********************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0
Что мне не хватает? Нет ошибок или сбоев, и две строки в файле include почти идентичны. Почему имеет место более чем одна строка в первом файле include, потому что вторая часть должна быть пропущена?
Если добавить больше отладки строки в сборник пьес:
site.yml:
---
- tasks:
- include: test.yml parm=AAA
- debug: msg="1"
- include: test2.yml parm=BBB
- debug: msg="2"
- debug: msg="3"
Сообщения отладки выводятся только если включить файл, который предшествует им иметь ровно одну строку.
Я бегу Ansible from git: //github.com/ansible/ansible.git ветвь devel, обновленная непосредственно перед тестированием.
Это была ошибка, но теперь они исправлены. – DaveK