Ansible:使用 inventory_hostname 获取变量

Ansible: Get Variable with inventory_hostname

我有以下密码文件 vault.yml:

---
server1: "pass1"
server2: "pass2"
server3: "pass3"

我正在将这些值加载到一个名为 passwords:

的变量中
- name: Get Secrets
  set_fact:
    passwords: "{{ lookup('template', './vault.yml')|from_yaml }}"
  delegate_to: localhost
- name: debug it
  debug:
    var: passwords.{{ inventory_hostname }}

调试任务的结果显示了我想要得到的结果:特定主机的密码。

但是如果我在变量文件中设置以下内容:

---
ansible_user: root
ansible_password: passwords.{{ inventory_hostname }}

这不会给我想要的结果。 ansible_password 从字面上理解“密码”而不是变量。

如何获得与调试 passwords.{{ inventory_hostname }} 时相同的结果?

关于部分

... if I set the following in a variables file ...

我不确定,因为我遗漏了一些关于您的用例和数据流的信息。但是,通常语法 ansible_password: "{{ PASSWORDS[inventory_hostname] }}" 可能适合您。

---
- hosts: localhost
  become: false
  gather_facts: false

  vars:

    PASSWORDS:
      SERVER1: "pass1"
      SERVER2: "pass2"
      SERVER3: "pass3"
      localhost: "pass_local"

  tasks:

  - name: Debug var
    debug:
      var: PASSWORDS

  - name: Set Fact 'ansible_password'
    set_fact:
      ansible_password: "{{ PASSWORDS[inventory_hostname] }}"

  - name: Debug var
    debug:
      var: ansible_password

这样您就可以通过名称访问元素。