Mi piacerebbe cambiare ansible_default_ipv4 in modo che punti a eth1 anziché eth0. Posso farlo nel playbook o tramite l'opzione --extra-vars?Come si modifica ansible_default_ipv4?
risposta
ansible uses commandip -4 route get 8.8.8.8
per ottenere l'interfaccia IPv4 predefinita. Puoi fare change your ip/routing tables per rendere eth1
il percorso predefinito e lo restituirà.
Oppure è possibile utilizzare uncustom fact.
PS: usando set_fact
-esclusione il ansible_default_ipv4
fatto, ma ha le sue insidie a causa di caching, scope, ...
Un'altra opzione è sempre riferimento l'interfaccia in modo esplicito. Diversi fornitori di cloud hanno diverse convenzioni meteo per mettere la rete di gestione privata (in genere 10.x.y.z) su eth0 o eth1.
Invece di riferimento
ansible_default_ipv4["address"]
È sempre possibile definire l'iface che si desidera (dire in group_vars/tutti)
iface: eth0
e farvi riferimento in compiti come
{{'ansible _' + iface ['ipv4'] ['indirizzo']}}
A si mple grep ti mostrerà tutti i riferimenti. Una ricerca e sostituzione globale sul tuo progetto ti consentirà di cambiarlo. grep -RH ansible_default_ipv4 .
Quindi, quando si desidera cambiare provider cloud, è sufficiente adattare l'iface secondo necessità.
Se preferite qualcosa di meno prolissa, e più esplicito definire
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'] }}"
e utilizzare solo
ansible_default_ipv4
quando si desidera fare riferimento a uno IP privato o pubblico che potrebbe essere utilizzato per arrivare a 8.8.8.8 (internet in generale).
BTW, ho provato il suggerimento di Eron Wright per route add -net 8.8.8.8 netmask 255.255.255.255 eth1. Non sembrava funzionare per me, e non ero in grado di eseguire il ping su google (anche se il ping su qualsiasi altro IP pubblico funzionava).
Questo non ha funzionato per me in quanto ha cercato di indicizzare nella stringa stessa. Secondo Ansible [FAQ] (http://docs.ansible.com/ansible/faq.html) è necessario specificare come {{hostvars [inventory_hostname] ['ansible_' + iface] ['ipv4'] ['indirizzo ']}} – Jeremy
ip -4 route get 8.8.8.8
non funzionava sul mio server.
Ho creato questo lavoro.
- 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
ora posso usare ipv4_address
ovunque sia necessario!
Né 'ifconfig' né' route' sono installati di default sui moderni sistemi Linux, a meno che alcune applicazioni legacy li richiedano, poiché sono obsoleti. Dovresti essere preparato per la loro assenza. –
Ho eseguito un'attività che ha aggiunto un gateway predefinito a/etc/sysconfig/network e riavvia la rete, che ha funzionato. Grazie. – jd50
Nel caso in cui il percorso predefinito non sia negoziabile, è possibile ignorare il percorso su 8.8.8.8 in particolare: 'sudo route add -net 8.8.8.8 netmask 255.255.255.255 eth1' –