背景
我正在部署到包含多个主机和监控主机的系统。监控主机需要使用其他主机的信息来配置其监控检查。但是,通过监视主机上的hostvars访问时,在host_vars / group_vars中定义为Jinja模板的变量不起作用。
示例
inventory.ini
my_host ansible_connection=local
monitoring_host ansible_connection=local
host_vars / my_host转变
---
my_var: "{{ inventory_hostname }}"
playbook.yml
---
- hosts: my_host
tasks:
- debug: var=my_var
- hosts: monitoring_host
tasks:
- debug: var="hostvars['my_host']['my_var']"
期望两个调试任务将输出相同的值"my_host"
。在Ansible 1.7中,第二个调试任务输出"{{ inventory_hostname }}"
(即模板未展开)。在Ansible 1.8中,第二个调试任务输出"monitoring_host"
(即模板在错误的上下文中展开)。
这是一个已知的错误吗?有一个很好的解决方法吗?
答案 0 :(得分:0)
我很确定这是错误行为。可能的解决方法:
---
- hosts: my_host
tasks:
- debug: var=my_var
- set_fact: my_var="{{ my_var }}" # Expanded in my_host context
- hosts: monitoring_host
tasks:
- debug: var="hostvars['my_host']['my_var']"