Добрый день. В процессе знакомства с Ansible (2.9.2) решаю практическую задачу - генерацию конфига zabbix-агента для группы типовых машин (Debian 10). В j2-темплейте конфига планируется всего лишь одна переменная. Это listen ip. На удалённых машинах может быть множество сетевых интерфейсов (тысячи) и мне бы очень не хотелось выполнять процедуру gether_facts полностью, а ограничиться каким-то подмножеством типа env. К тому же, даже если получать полный перечень интерфейсов, не понятно какую применять логику для вычленения именно того ip-адреса который мне нужен. По сути, всё что мне нужно это получить переменную содержащую IP-адрес SSH-сервера с которым в данный момент взаимодействует Ansible. В процессе гугления я наткнулся на статью где в точности был описан мой кейс. И целых три подхода по решению проблемы:
https://www.middlewareinventory.com/blog/ansible-g...
Я решил остановиться на методе №1:
---
- hosts: all
gather_facts: yes
tasks:
- debug: var=hostvars[inventory_hostname]['ansible_env'].SSH_CONNECTION.split(' ')[2]
В результате прогона плейбука получаю сообщения о том что переменная не определена:
TASK [debug] *********************************************************************************************************************************************************************************
ok: [host1] => {
"hostvars[inventory_hostname]['ansible_env'].SSH_CONNECTION.split(' ')[2]": "VARIABLE IS NOT DEFINED!"
}
Даже при таком плейбуке результат не меняется.
---
- hosts: my_group
become: true
gather_facts: yes
pre_tasks:
- setup:
gather_subset: 'all'
tasks:
- debug: var=hostvars[inventory_hostname]['ansible_env'].SSH_CONNECTION.split(' ')[2]
Если выводе дебага урезать до 'var=hostvars[inventory_hostname]' и грепнуть SSH_CONNECTION то ничего обнаружено не будет. Гугление "ansible env SSH_CONNECTION" положительных результатов не дало, что привело меня сюда.