Как получить IP-адрес имени хоста внутри шаблона jinja
наша солонка основана на именах хостов (webN., dbN., etc.). Но для разных вещей мне нужны IPs этих серверов. Пока я хранил их в Столбах, но количество мест, которые мне нужно синхронизировать, растет.
Я попытался использовать publish + network.ip_addrs, но это отстой, потому что ему нужно сделать всю соль-туда и обратно, чтобы решить имя хоста. Кроме того, это зависит от ответа миньонов. Поэтому я ищу способ разрешения имени хоста на IP в шаблоны.
Я предполагаю, что я мог бы написать модуль для него как-то, но мои навыки python очень ограничены.
5 ответов
вы можете использовать пользовательское зерно. Создать файл _grains/fqdn_ip.py в каталоге дерева состояний:
import socket
def fqdn_ip():
return {
'fqdn_ip': socket.gethostbyname(socket.getfqdn())
}
В шаблоне:
{{ grains.fqdn_ip }}
другой способ - использовать модуль dnsutil (требуется команда dig на миньоне):
{{ salt['dnsutil.A']('host.name.tld')[0] }}
Я видел это: http://cnygaard.blogspot.com.es/2012/11/how-to-template-eth0-address-with.html
Это простой способ, который я нашел.
#init.sls:
...
...
/etc/swift/proxy-server.conf:
file:
- managed
- source: salt://swift/proxy-server.conf
- template: jinja
- context:
proxy_ip: {{ salt['network.interfaces']()['eth0']['inet'][0]['address'] }}
и затем:
#In proxy-server.conf
...
[filter:cache]
use = egg:swift#memcache
memcache_servers = {{ proxy_ip }}:11211
Это очень старый пост, но он высоко оценивается в Google для получения адреса ipv4. Как соли 2015.5.8, лучший способ получить первичный адрес IPv4 {{ зерен['протоколов IPv4'][0] }}
В настоящее время-для агрегирования списка всех ip-адресов требуется либо соляная шахта, либо опрос всех миньонов. Я предпочитаю соляную шахту.
существует принятая проблема расширения новой системы реестра для поддержания адресов всех миньонов, а не только хостов на основе ssh. https://github.com/saltstack/salt/issues/7759
читая документацию ansible, я нашел гораздо более простое решение. Вот мои результаты.
введите в шаблон следующее:
lookup hostname: {{ lookup('dig', 'google.ca.') }}
мой шаблон jinja2:
# mytemplate.j2
## lookup directly
lookup hostname: {{ lookup('dig', 'google.ca.') }}
## in a variable
{% set fqdn = 'google.ca' %}
lookup hostname: {{ lookup('dig', fqdn) }}
результат:
# mytemplate.j2
## lookup directly
lookup hostname: 172.217.2.163
## in a variable
lookup hostname: 172.217.2.163