#ansible
#ansible
Вопрос:
Кажется, я не могу получить оператор отладки Ansible в цикле для отображения значений отдельных элементов при запуске оператора отладки в роли. Для сравнения, учитывая этот playbook с именем ./test.yaml:
- hosts: localhost
tasks:
- name: test
debug:
var: item
loop:
- 1
- 2
Эта команда:
ansible-playbook test.yaml
Выдает этот результат:
PLAY [localhost] *****...
TASK [test] ****...
ok: [localhost] => (item=1) => {
"item": 1
}
ok: [localhost] => (item=2) => {
"item": 2
}
Но учитывая этот файл: ./roles/TestRole/tasks/main.yaml:
- name: test
debug:
var: item
loop:
- 1
- 2
Эта команда:
ansible localhost -m include_role -a name=TestRole
Выдает этот результат:
localhost | SUCCESS => {
"changed": false,
"include_variables": {
"name": "FooRole"
}
}
localhost | SUCCESS => {
"msg" "All items completed"
}
Итак, вместо отображения значений элементов, оператор отладки в роли просто говорит «Все элементы завершены». Похоже, что циклические операторы отладки в roles ведут себя иначе, чем циклические операторы отладки в playbook. Я делаю что-то не так? Запуск Ansible 2.7.9 на python 2.7.5.
Ответ №1:
Фактически это то, что вы получаете от команды adhoc (и я абсолютно не понимаю, почему). Между тем, это довольно сложный случай его использования. Вы бы предпочли включить роль в playbook. Оба приведенных ниже примера playbook дадут вам ожидаемый результат:
Классическое выполнение роли
---
- name: test1 for role
hosts: localhost
gather_facts: false
roles:
- role: TestRole
Включить роль
---
- name: test2 for roles
hosts: localhost
gather_facts: false
tasks:
- name: include role
include_role:
name: TestRole
Комментарии:
1. Ну, это тот случай, когда роль включена в playbook (я опустил это для ясности), но сама включенная роль должна обрабатывать несколько элементов. Внешний вид выполняется, и элементы, похоже, обрабатываются, это просто оператор отладки, который, похоже, действует по-другому…