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

Deployment Ansible在主机上下文之间传递变量,deployment,ansible,Deployment,Ansible,正如标题所说,我希望能够将在一个主机组下注册的变量传递给另一个主机组,但我不确定如何做到这一点,并且在变量文档下找不到任何相关内容 这是我试图看到的一个简化示例。我有一个剧本,可以调用许多不同的组,并检查符号链接指向的位置。我希望能够在游戏结束时向控制台报告所有符号链接目标 问题是注册值仅在其定义的主机组下有效。是否有导出这些变量的正确方法 --- - hosts: max_logger tasks: - shell: ls -la /home/ubuntu/apps/max-log

正如标题所说,我希望能够将在一个主机组下注册的变量传递给另一个主机组,但我不确定如何做到这一点,并且在变量文档下找不到任何相关内容

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

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

---
- 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 }}"

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

这可以通过使用

但是,您需要引用主机名,该主机名不一定与您在问题中发布的主机组名(例如,
max\u 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\u data\u host']['max\u data\u old\u active']['stdout']

后续问题:是否有一种简单的方法可以仅以该格式指定主机组中的第一个主机?我知道这个命令,但我不知道这是否一定适合您建议的命令。ansible_play_hosts.index(inventory_hostname)==0请查看附加链接中的其他神奇变量。您可以使用index
[0]
.msg=“旧的max_logger构建是{{{hostvars[groups['role\u max_logger']][0]]['max_logger\u old_active']['stdout']}主机{{groups['role\u max_logger'][0]}}上的索引访问列表的第一个元素这是我最终需要的。谢谢你的帮助。这太棒了!我浪费了4个小时试图通过主持人传达这一点,而我需要的是团队。谢谢!