为什么“角色”部分中没有“可靠的事实”?

时间:2017-04-17 01:39:43

标签: ansible ansible-facts ansible-role

问题

为什么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

1 个答案:

答案 0 :(得分:2)

  

为什么ansible_distribution等可靠事实在角色部分中不可用?

因为在执行收集事实的roles任务之前解析了游戏中的setup字典。

那就是说,根据常识,你应该能够在你的任务中使用include_role模块,但是也不可能使用事实作为角色名称(类似于this problem,但你可以使用我在那里建议的解决方法,即包含一个具有静态名称的角色,并使用when条件来控制哪一个。)

通常,参考您的示例,角色旨在提供抽象级别,并且应该处理它们内部的架构差异,而不是在外部。