Как изменить ansible IPv4 по умолчанию?
Я хотел бы изменить ansible_default_ipv4, чтобы указать на eth1 вместо eth0. Могу ли я сделать это в playbook или с помощью опции --extra-vars?
3 ответов
ansible использует команду ip -4 route get 8.8.8.8
чтобы получить интерфейс IPv4 по умолчанию. Ты можешь!--7-->измените таблицы ip / маршрутизации сделать eth1
маршрут по умолчанию, и он вернет его.
или использовать пользовательские факт.
PS: использование set_fact
to переопределить the ansible_default_ipv4
факт, но у него есть свои подводные камни из-за кэширования, области, ...
другой вариант всегда ссылается на ваш интерфейс явно. У разных облачных провайдеров разные условности погоды, чтобы поставить частный (обычно 10.X. y.z) сеть управления на eth0 или eth1.
вместо ссылки
ansible_default_ipv4["address"]
вы всегда можете определить iface, который вы хотите (скажем, в group_vars/all)
интерфейс: интерфейс eth0
и ссылаться на него в задачах как
{{'ansible_' +iface ['ipv4'] ['address']}}
A простой grep покажет вам все ссылки. Глобальный поиск и замена в вашем проекте позволит вам изменить это.
grep -RH ansible_default_ipv4 .
затем, когда вы хотите переключить облачных провайдеров, вы просто адаптируете iface по мере необходимости.
Если вы предпочитаете что-то менее трудоемки и более четко определить
private_iface: eth0 #switch eth0,eth1 depending on your provider.
public_iface: eth1
private_host_ipv4: "{{ 'ansible_'+private_iface['ipv4']['address'] }}"
public_host_ipv4: "{{ 'ansible_'+public_iface['ipv4']['address'] }}"
и использовать только
ansible_default_ipv4
когда вы хотите ссылаться на частный или публичный ip, который будет использоваться для получения 8.8.8.8 ( интернет в целом.)
кстати, я попробовал предложение Эрона Райта для маршрута add-net 8.8.8.8 netmask 255.255.255.255 eth1. Похоже, это не сработало для меня, и я не смог пинговать google (хотя пинг любой другой публичный ip-адрес работал).
ip -4 route get 8.8.8.8
не работает на моем сервере.
Я создал эту работу вокруг.
- name: find default ipv4... this is a bit of a hack.
shell: ifconfig $(route | grep default | awk '{print $(NF)}') | grep 'inet' | awk '{ print }'
register: ipv4_address
Теперь я могу использовать ipv4_address
там, где это необходимо!