2015-11-27 2 views
2

Я хотел бы вставить IP-адрес в шаблон J2, который используется в плеерах Ansible. Этот IP-адрес: не адрес хоста, который предоставляется, но IP-адрес хоста, из которого выполняется инициализация. Все, что я нашел до сих пор, охватывает переменные/факты, связанные с предоставленными хостами. Другими словами: IP-адрес, который я хотел бы вставить, - это номер ['ansible_default_ipv4']['address'] при исполнении ansible -m setup 127.0.0.1.Использовать главный IP-адрес управляющего управляющего в шаблоне Jinja

Я думаю, что я мог бы использовать файл local playbook для записи динамически созданного файла шаблона, содержащего IP-адрес, но я надеялся, что это может быть возможно «Ansible way».

+0

ли вам когда-либо найти ответ на это? Я сталкиваюсь с тем же вопросом и любопытно, что вы в итоге сделали. – Cory

+0

Нет, к сожалению пока нет. – BlueM

+0

см. Мой ответ на http://stackoverflow.com/questions/34560622/best-way-to-get-the-ip-address-of-the-ansible-control-machine/39336170#39336170 – Suire

ответ

1

Вы можете заставить Ansible получать факты о хосте управления, запустив модуль setup локально, используя либо local_action, либо delegate_to. Затем вы можете зарегистрировать этот вывод и проанализировать его или просто использовать set_fact, чтобы дать ему полезное имя, которое будет использоваться позже в вашем шаблоне.

Пример игры может выглядеть примерно так:

tasks: 
    - name: setup 
     setup: 
     delegate_to: 127.0.0.1 

    - name: set ansible control host IP fact 
     set_fact: 
     ansible_control_host_address: "{{ hostvars[inventory_hostname]['ansible_eth0']['ipv4']['address'] }}" 
     delegate_to: 127.0.0.1 

    - name: template file with ansible control host IP 
     template: 
     src: /path/to/template.j2 
     dest: /path/to/destination/file 

И затем использовать переменную ansible_control_host_address в шаблоне как обычно:

... 
Ansible control host IP: {{ ansible_control_host_address }} 
... 
+0

Если я пропущу 'setup', работы по настройке, но' ansible_control_host_address' содержит основной IPv4 создаваемой виртуальной машины, а не тот Mac, на котором установлен Ansible (BTW: v1.9.3). Если я включаю задачу 'setup', я получаю сообщение об ошибке с сообщением« неподдерживаемый параметр для модуля: delegate_to » – BlueM

+0

@BlueM Просто заметил ваш комментарий - я уверен, что вы решили его сейчас, но это звучит как ваша проблема с заданием настройки это просто отступы. Если вы отделили 'delegate_to' внутри блока' setup: ', то это рассматривается как параметр для модуля настройки, а не параметр для задачи, который должен быть таким. – ydaetskcoR

+0

Спасибо, @ydaetskcoR, за ваш комментарий - особенно, так как я не решил проблему (но я перестал работать над проектом, для которого мне было нужно это короткое время после моего вопроса). Я просто попробовал (Ansible 2.3.1.0 на OS X 10.12) с измененным отступом, но опять же: 'Неподдерживаемые параметры для (setup) модуля: delegate_to. Поддерживаемые параметры включают в себя: fact_path, filter, gather_subset, gather_timeout "}'. Тот факт, что Ansible говорит о модуле «setup» apperas, как если бы он был вложенным, как вы его предполагаете. – BlueM

1

Просто используйте:

{{ ansible_env["SSH_CLIENT"].split()[0] }} 
+0

При использовании этого в шаблоне J2 с Ansible 1.9. 4, я получаю фатальную ошибку с сообщением «AnsibleUndefinedVariable: одна или несколько неопределенных переменных:« объект dict »не имеет атрибута« SSH_CLIENT »» – BlueM

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