Ansible在主机上下文之间传递变量

时间:2017-07-14 22:15:50

标签: deployment ansible

正如标题所说,当我希望能够将在一个主机组下注册的变量传递给另一个主机组时,但我不确定如何做到这一点,我无法做到在变量文档http://docs.ansible.com/ansible/playbooks_variables.html

下找到任何相关内容

这是我想要看到的简化示例。我有一个调用许多不同组的剧本,并检查符号链接指向的位置。我希望能够在比赛结束时将所有符号链接目标报告给控制台。

问题是注册值仅在定义它的主机组下有效。是否有正确的方法导出这些变量?

---
- hosts: max_logger
  tasks:
    - shell: ls -la /home/ubuntu/apps/max-logger/active | awk -F':' '{print $NF}'
      register: max_logger_old_active

- hosts: max_data
  tasks:
    - shell: ls -la /home/ubuntu/apps/max-data/active | awk -F':' '{print $NF}'
      register: max_data_old_active

- hosts: "localhost"
  tasks:
  - debug: >
      msg="The old max_logger build is {{ max_logger_old_active.stdout }}
           The old max_data build is {{ max_data_old_active.stdout }}"

1 个答案:

答案 0 :(得分:3)

你不需要在这里传递任何东西(你只需要访问)。注册变量存储为主机事实,并且它们在整个剧本运行时存储在内存中,因此您可以从所有后续播放中访问它们。

这可以使用magic variable hostvars来实现。

但是,您需要引用主机名,该主机名不一定与您在问题中发布的主机组名称(例如max_logger)匹配:

- hosts: "localhost"
  tasks:
  - debug: >
      msg="The old max_logger build is {{ hostvars['max_logger_host'].max_logger_old_active.stdout }}
           The old max_data build is {{ hostvars['max_data_host'].max_data_old_active.stdout }}"

您也可以写hostvars['max_data_host']['max_data_old_active']['stdout']