为什么 Ansible 事实在角色部分不可用?
Why Ansible facts not available in Roles section?
问题
为什么 ansible_distribution
等 Ansible 事实在角色部分不可用?
---
- 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
Why Ansible facts such as ansible_distribution
are not available in Roles section?
因为 roles
剧本中的字典在执行收集事实的 setup
任务之前被解析。
也就是说,根据常识,您应该可以在您的任务中使用 include_role
模块,但是在那里也不可能使用事实作为角色名称(类似于 ,但是您可以使用我在那里建议的解决方法,即包含一个具有静态名称的角色并使用 when
条件来控制哪个)。
一般来说,参考您的示例,角色旨在提供抽象级别,并且应该处理它们内部而非外部的架构差异。
问题
为什么 ansible_distribution
等 Ansible 事实在角色部分不可用?
---
- 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
Why Ansible facts such as
ansible_distribution
are not available in Roles section?
因为 roles
剧本中的字典在执行收集事实的 setup
任务之前被解析。
也就是说,根据常识,您应该可以在您的任务中使用 include_role
模块,但是在那里也不可能使用事实作为角色名称(类似于 when
条件来控制哪个)。
一般来说,参考您的示例,角色旨在提供抽象级别,并且应该处理它们内部而非外部的架构差异。