正如标题所说,当我希望能够将在一个主机组下注册的变量传递给另一个主机组时,但我不确定如何做到这一点,我无法做到在变量文档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 }}"
答案 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']
。