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?
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.
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).
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!