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

标签 ansible ansible-2.x

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

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

当我尝试使用 {{hostvars[broker]['port']}} 从另一个角色访问此变量时,我发现错误:
AnsibleUndefinedVariable: 'dict object' has no attribute 'port'

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

Ansible 版本:2.2.0.0

最佳答案

{{hostvars[broker]['port']}}您只能访问主机事实,角色默认值不是事实,因此只有将端口定义为主机变量,这才有效。

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

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

这将确保存在 port事实存在,因此您可以通过 hostvars 访问它.

关于ansible - 如何从ansible中的另一个角色访问角色的默认变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41676324/

相关文章:

ansible - 在 Ansible 中访问 JSON 格式列表的每个键的值

ansible - 如何使用 ansible 仅将通过相同键路径标识的每个文件存储列表的唯一项目加载到单个变量中?

Ansible 时区模块失败(不同操作系统上的原因不同)

regex - Ansible 正则表达式转义美元字符

python - 如何辨别一个目录是否是从 Ansible 挂载的 NFS?

jinja2 - Ansible 使用带有 blockinfile 的模板

Ansible 标签在播放过程中无法识别?

node.js - 将 pm2 与 ansible 结合使用

amazon-ec2 - Ansible 无法从 aws ecr(注册表)中提取 docker 镜像

azure - 如何将 Terraform 和 Ansible 连接在一起?