доступ к переменной хоста инвентаризации в ansible playbook

Я использую ansible 2.1. У меня есть следующий файл хоста инвентаризации и роль, вызываемая игрой, которой нужен доступ к переменной файла хоста. Любые мысли о том, как получить к нему доступ (в настоящее время появляется ошибка):

хост-файл

[test1]
test-1 ansible_ssh_host=abc.def.ghi.jkl ansible_ssh_port=1212

[test2]
test2-1 ansible_ssh_host=abc.def.ghi.mno ansible_ssh_port=1212

[test3]
test3-1 ansible_ssh_host=abc.def.ghi.pqr ansible_ssh_port=1212
test3-2 ansible_ssh_host=abc.def.ghi.stu ansible_ssh_port=1212

[all:children]
test1
test2
test3

роль Я попытался получить доступ к роли следующим образом:

{{ hostvars.ansible_ssh_host }} 

&&

{{ hostvars.test1.ansible_ssh_host }}

Я пытаюсь получить доступ к ansible_ssh_host в разделе test1.

fatal: [localhost]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'ansible'"}

3 ответов


вы на правильном пути о hostvars.
Это волшебная переменная используется для доступа к информации о других хостов.

hostvars - хэш с именами хостов инвентаризации в качестве ключей.
Для доступа к полям каждого хоста используйте hostvars['test-1'], hostvars['test2-1'], etc.

ansible_ssh_host is устаревший в пользу ansible_host начиная с 2.0.
Поэтому вы должны сначала удалить" _ssh "из аргументов хостов инвентаризации (т. е. стать" ansible_user", "ansible_host "и" ansible_port"), то в вашей роли вызывайте его с помощью:

{{ hostvars['your_host_group'].ansible_host }}

[host_group]
host-1 ansible_ssh_host=192.168.0.21 node_name=foo
host-2 ansible_ssh_host=192.168.0.22 node_name=bar

[host_group:vars]
custom_var=asdasdasd

вы можете получить доступ к группе узлов vars с помощью:

{{ hostvars['host_group'].custom_var }}

Если вам нужно определенное значение от определенного хоста, вы можете использовать:

{{ hostvars[groups['host_group'][0]].node_name }}

вы должны иметь возможность использовать имя переменной напрямую

ansible_ssh_host

или вы можете пройти через hostvars без необходимости указывать хост буквально используя волшебная переменная inventory_hostname

hostvars[inventory_hostname].ansible_ssh_host