доступ к переменной хоста инвентаризации в 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