2016-10-13 11 views
11

Я использую доступный 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'"} 

ответ

15

Вы на правильном пути о hostvars.
Этот magic variable предназначенный для просмотра информации о других хостах.

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

ansible_ssh_host является deprecated в пользу ansible_host, начиная с 2.0.
Таким образом, вы должны сначала удалить «_ssh» из инвентаря хостов аргументов (т.е. стать «ansible_user», «ansible_host», и «ansible_port»), то в вашей роли называть его:

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

spaciba- Я пробовал этот синтаксис, но я думаю, что он не работал из-за опечатки на моей стороне –

1

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

ansible_ssh_host 

Или вы можете пройти через hostvars без указания хозяина буквально с помощью magic variableinventory_hostname

hostvars[inventory_hostname].ansible_ssh_host