web-dev-qa-db-fra.com

Comment changez-vous ansible_default_ipv4?

Je voudrais changer ansible_default_ipv4 pour qu'il pointe vers eth1 au lieu de eth0. Puis-je le faire dans le Playbook ou via l'option --extra-vars?

14
jd50

ansible utilise la commandeip -4 route get 8.8.8.8 pour obtenir l'interface ipv4 par défaut. Vous pouvez changer votre adresse IP/tables de routage pour que eth1 soit la route par défaut et il la renverra.

Ou vous pouvez utiliser un fait personnalisé .

PS: en utilisant set_fact à substitution le fait ansible_default_ipv4, mais il a ses propres pièges dus à la mise en cache, à la.

13
Kashyap

Une autre option consiste toujours à référencer explicitement votre interface . Différents fournisseurs de cloud ont différentes conventions pour mettre le réseau de gestion privé (généralement 10.x.y.z) sur eth0 ou eth1. 

Au lieu de référencer

ansible_default_ipv4["address"]

Vous pouvez toujours définir le iface que vous voulez (disons dans group_vars/all) 

iface: eth0 

et référence dans les tâches comme

{{'ansible _' + iface ['ipv4'] ['adresse']}}

Un simple grep vous montrera toutes les références. Une recherche globale et remplacer sur votre projet vous permettra de changer cela ..___. grep -RH ansible_default_ipv4 .

Ensuite, lorsque vous souhaitez changer de fournisseur de cloud, vous devez simplement adapter iface au besoin.

Si vous préférez quelque chose de moins verbeux et plus explicite, définissez

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'] }}"

et seulement utiliser

ansible_default_ipv4 

lorsque vous souhaitez faire référence à une adresse IP privée ou publique qui serait utilisée pour accéder à 8.8.8.8 (Internet en général).

BTW, j'ai essayé la suggestion d'Eron Wright pour route add -net 8.8.8.8 netmask 255.255.255.255 eth1. Cela ne semblait pas fonctionner pour moi, et je ne pouvais pas cingler google (même si cingler n'importe quelle autre adresse IP publique fonctionnait).

4
darKoram

ip -4 route get 8.8.8.8 ne fonctionnait pas sur mon serveur.

J'ai créé ce travail autour.

- name: find default ipv4... this is a bit of a hack. Shell: ifconfig $(route | grep default | awk '{print $(NF)}') | grep 'inet' | awk '{ print $2}' register: ipv4_address

Maintenant, je peux utiliser ipv4_address si nécessaire!

0
Chris Bolton