首页 文章

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

提问于
浏览
1

Background

我正在部署到包含多个主机和监视主机的系统 . 监控主机需要使用其他主机的信息来配置其监控检查 . 但是,通过监视主机上的hostvars访问时,在host_vars / group_vars中定义为Jinja模板的变量不起作用 .

Example

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

    我很确定这是有缺陷的行为 . 可能的解决方法:

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

相关问题