webentwicklung-frage-antwort-db.com.de

Wie ändert man ansible_default_ipv4?

Ich möchte ansible_default_ipv4 so ändern, dass es auf eth1 anstatt auf eth0 zeigt. Kann ich dies entweder im Playbook oder über die Option --extra-vars tun?

14
jd50

ansible verwendet den Befehlip -4 route get 8.8.8.8, um die Standard-IPv4-Schnittstelle abzurufen. Sie können Ihre IP Routing-Tabellen ändern - /, um eth1 die Standardroute zu machen, und es wird zurückgegeben.

Oder Sie können eine benutzerdefinierte Tatsache verwenden.

PS: Verwenden von set_fact zu override der ansible_default_ipv4-Tatsache, es hat jedoch eigene Fallstricke aufgrund von Zwischenspeicherung, Gültigkeitsbereich, ...

13
Kashyap

Eine andere Option ist immer ein expliziter Verweis auf Ihre Schnittstelle. Verschiedene Cloud-Anbieter haben unterschiedliche Konventionen, um das private (normalerweise 10.x.y.z) Verwaltungsnetzwerk auf eth0 oder eth1 zu setzen. 

Anstatt zu referenzieren

ansible_default_ipv4["address"]

Sie können jederzeit das gewünschte iface definieren (sagen Sie zum Beispiel group_vars/all). 

iface: eth0 

und verweise es in Aufgaben als

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

Ein einfaches grep zeigt Ihnen alle Referenzen. Durch ein globales Suchen und Ersetzen in Ihrem Projekt können Sie dies ändern. grep -RH ansible_default_ipv4 .

Wenn Sie dann den Cloud-Anbieter wechseln möchten, passen Sie das iface einfach an.

Wenn Sie es bevorzugen, etwas weniger ausführlich und expliziter definieren

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

und nur verwenden

ansible_default_ipv4 

wenn Sie sich auf private oder öffentliche ip beziehen möchten, die verwendet werden, um auf 8.8.8.8 (das Internet im Allgemeinen) zuzugreifen.

Übrigens habe ich den Vorschlag von Eron Wright für route add -net 8.8.8.8 netmask 255.255.255.255 eth1 ausprobiert. Es schien nicht für mich zu funktionieren, und ich konnte Google nicht pingen (obwohl andere öffentliche IP-Adressen pingten).

4
darKoram

ip -4 route get 8.8.8.8 hat auf meinem Server nicht funktioniert.

Ich habe diese Arbeit geschaffen.

- 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

Jetzt kann ich ipv4_address verwenden, wo immer es nötig ist!

0
Chris Bolton