Почему факты об Ansible недоступны в разделе «Роли»?

Вопрос

Почему факты Ansible, такие как ansible_distribution, недоступны в разделе «Роли»?

---
- name: Test
  hosts: all
  tasks:
    - name: debug
      debug:
        msg: "{{ ansible_distribution }}" <----- Works

  roles:
    - "{{ ansible_distribution }}/somerole" <---- ERROR! 'ansible_distribution' is undefined

ansible.cfg

[defaults]
error_on_undefined_vars = True

person mon    schedule 17.04.2017    source источник


Ответы (1)


Почему факты Ansible, такие как ansible_distribution, недоступны в разделе «Роли»?

Потому что словарь roles в пьесе анализируется перед выполнением задачи setup по сбору фактов.

Тем не менее, согласно здравому смыслу, вы должны иметь возможность использовать модуль include_role в своих задачах, но использование фактов для имен ролей также невозможно (аналогично эта проблема, но вы можете использовать обходной путь, который я предложил там, т. е. включить роль со статическим именем и использовать when условие, чтобы указать, какое из них).


Как правило, ссылаясь на ваш пример, роли были разработаны для обеспечения уровня абстракции и должны обрабатывать архитектурные различия внутри них, а не снаружи.

person techraf    schedule 17.04.2017
comment
Большое спасибо. да не play.yml а сомерол. - person mon; 17.04.2017