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

Bra*_*o__ 2 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 }}"
Run Code Online (Sandbox Code Playgroud)

tec*_*raf 6

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

这可以使用魔法变量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 }}"
Run Code Online (Sandbox Code Playgroud)

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

  • msg="旧的 max_logger 构建是 {{ hostvars[groups['role_max_logger'][0]]['max_logger_old_active']['stdout'] }} 在主机 {{ groups['role_max_logger'][0] }} 是我最终需要什么。感谢您的帮助 (2认同)