我有一个默认计算变量的角色,如:
port: {{prefix}}{{postfix}}
当我尝试从{{hostvars[broker]['port']}}
的另一个角色访问此变量时,我发现错误:
AnsibleUndefinedVariable: 'dict object' has no attribute 'port'
在大多数情况下,我需要计算端口,但在极少数情况下,我需要从host-var覆盖此var。 从另一个角色访问默认var的最佳方法是什么?
Ansible版本:2.2.0.0
答案 0 :(得分:2)
使用{{hostvars[broker]['port']}}
,您只能访问主机事实,而角色默认值不是事实,因此仅当您将端口定义为host-var时才会起作用。
如果您在将角色应用到broker
主机后绝对需要查询其他播放/主机的端口值,则可以添加到您的角色中:
- set_fact:
port: "{{ port }}"
这将确保存在port
事实,以便您可以通过hostvars
访问它。