Ansible:从库存文件中获取变量值

Ansible: Fetch variable value from inventory file

我在从清单文件中获取 rhelansible_user 的值时遇到问题。以下是我尝试获取的几种方式,每次它都显示未定义 rhel。关于如何检索它有什么建议吗?

    - set_fact:
         SSHUSER: "{{  hostvars.[rhel].ansible_user }}"
    - set_fact:
         SSHUSER: "{{  rhel.ansible_user }}"
---
all:
  vars:
    project: test
  hosts:
  children:
    test_vm:
       hosts: 10.10.10.4
    example_vm:
       hosts: 10.10.10.5
    ubuntu:
      children:
        test_vm:
      vars:
        os: ubuntu
        ansible_user: "testuser"
    rhel:
      children:
        example_vm:
      vars:
        os: rhel
        ansible_user: "exampleuser"

您引用的 rhel 是一个 ,而不是一个主机 -- 一个主机可能属于多个组。为了实现“组 rhel 的某些成员的主机变量”,您想要的表达式是 jinja2 表达式:{{ hostvars[groups["rhel"][0]].ansible_user }}

其中 groups["rhel"] 是 ansible inventory 主机名的字符串列表,如果假设它们都有一个等价的 ansible_user 那么只获取第一个应该是安全的,它是 groups["rhel"][0] 或更详细但可能更清晰的 groups["rhel"]|first

然后,我们想要那个主机hostvars,而不是我们自己的;由于 hostvars 是由 ansible inventory 主机名索引的 dict[str, dict],我们可以将该值作为 hostvars[groups["rhel"][0]] 插入到 hostvars dict 中,这是每个 hostvar,然后 hostvars[groups["rhel"][0]].ansible_user 返回您请求的 ansible_user 事实