如何在Ansible中访问其他主机的模板化变量?

时间:2015-07-10 21:07:16

标签: scope ansible

背景

我正在部署到包含多个主机和监控主机的系统。监控主机需要使用其他主机的信息来配置其监控检查。但是,通过监视主机上的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"(即模板在错误的上下文中展开)。

这是一个已知的错误吗?有一个很好的解决方法吗?

1 个答案:

答案 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']"