Как изменить 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 там, где это необходимо!