2017-01-10 1 views
0

Say Я передаю имена хостов к PlayBook анзибля так:Как получить IP-адрес хоста при передаче в качестве экстра-варов в Ansible?

ansible-playbook ansible/db-playbook.yml --extra-vars "master=mydb-master, slave=mydb-slave" 

В сборнике пьес я хочу получить доступ к фактическому IP-адресу mydb-slave хоста:

- name: Copy ssh key to Slave 
    command: ... "{{ mydb-slave }}" 

В этом случае выходных это строковый литерал mydb-slave, но мне нужен полный адрес ip.

+0

Можете ли вы предоставить еще какой-нибудь контекст? Все, что вы делаете, чтобы преобразовать строковый литерал (предположительно имя хоста) в IP, будет либо поиском DNS, либо поиском ваших локальных/etc/hosts или чего-то подобного. Поскольку имя вашей задачи помечено как «копировать ssh-ключ в slave», почему бы просто не закодировать незаменимую копию/rsync/whatever и не разрешить IP-адрес? –

+0

Что вы подразумеваете под "полным IP-адресом"? Какой объект должен разрешить имя? – techraf

+0

Для контекста в моем файле 'hosts' у меня есть' [mydb-slave] 123.456.78.91'. Я хочу передать var 'mydb-slave', используя аргумент' --extra-vars', но я не хочу жестко кодировать хост в playbook. В принципе, я просто хочу получить ip '123.456.78.91' из' mydb-slave' var в playbook. –

ответ

0

Убедитесь, что модуль питона dnspython установлен на хосте вы работаете анзибль, то должно работать (если хозяева даны имена DNS):

- name: Lookup slave IP 
    set_fact: slave_ip="{{ lookup('dig', '{{ slave }}')}}" 

- name: Copy ssh key to Slave 
    command: ... "{{ slave_ip }}" 

Если хозяева в вашем анзибль инвентаризации, должно быть выполнено следующее:

- name: Copy ssh key to Slave 
    command: ... "{{ hostvars[slave]['ansible_eth0']['ipv4']['address'] }}" 
+0

Используя этот метод, '{{slave_ip}}' var выводится как 'NXDOMAIN'. –

+0

Где находится этот «полный IP»? Необязательно нужен источник, из которого можно учиться. –

+0

IP-адрес для каждой группы находится в файле '/ etc/ansible/hosts'. –

 Смежные вопросы

  • Нет связанных вопросов^_^