Оператор отладки в Ansible Playbook ведет себя иначе, чем в роли Ansible

#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 (я опустил это для ясности), но сама включенная роль должна обрабатывать несколько элементов. Внешний вид выполняется, и элементы, похоже, обрабатываются, это просто оператор отладки, который, похоже, действует по-другому…