如何从ansible中的另一个角色访问角色的默认变量

时间:2017-01-16 12:20:21

标签: ansible ansible-2.x

我有一个默认计算变量的角色,如:

port: {{prefix}}{{postfix}}

当我尝试从{{hostvars[broker]['port']}}的另一个角色访问此变量时,我发现错误:

AnsibleUndefinedVariable: 'dict object' has no attribute 'port'

在大多数情况下,我需要计算端口,但在极少数情况下,我需要从host-var覆盖此var。 从另一个角色访问默认var的最佳方法是什么?

Ansible版本:2.2.0.0

1 个答案:

答案 0 :(得分:2)

使用{{hostvars[broker]['port']}},您只能访问主机事实,而角色默认值不是事实,因此仅当您将端口定义为host-var时才会起作用。

如果您在将角色应用到broker主机后绝对需要查询其他播放/主机的端口值,则可以添加到您的角色中:

- set_fact:
    port: "{{ port }}"

这将确保存在port事实,以便您可以通过hostvars访问它。