Ansible:获取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 }}

这不会给我想要的结果。CCD_ 3取";密码";从字面上看,而不是作为一个变量。

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

关于零件

。。。如果我在变量文件中设置以下内容。。。

我不确定,因为我错过了一些关于您的用例和数据流的信息。但是,一般来说,语法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

通过这种方式,您可以按名称访问元素。