2015-04-07 16 views

risposta

13

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, ...

+0

Ho eseguito un'attività che ha aggiunto un gateway predefinito a/etc/sysconfig/network e riavvia la rete, che ha funzionato. Grazie. – jd50

+0

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' –

2

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

+0

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

0

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!

+0

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. –

Problemi correlati