wake-up-neo.net

Ansible-IP-Adressvariable - Host-Teil

Ich habe folgendes Problem:

Ich schreibe ein Spielbuch zum Einstellen der IP-Adresse in der Befehlszeile in Ansible. Sagen wir 10.10.10.x. Ich muss den letzten Teil meiner öffentlichen IP-Adresse erhalten, sagen wir x.x.x.15 und ordnen Sie ihn der privaten zu: 10.10.10.15. Gibt es dafür eine Variable? Kann ich einige aufnehmen? Ich habe versucht etwas zu verwenden:

Shell: "ip addr show | grep inet ...." 
register: Host_ip

Aber ich brauche es nicht. Es funktioniert, aber nur für eine begrenzte Anzahl von Servern.

Das Ganze sollte so sein:

"Shell: /dir/script --options 10.10.10.{{ var }}"

und {{ var }} sollte der Host-Teil der öffentlichen IP-Adresse sein.

Bearbeiten:

Vielen Dank! Hier ist meine endgültige Lösung:

- name: Get the Host part of the IP 
  Shell: Host {{ ansible_fqdn }} | awk '{print $4}' 
  register: Host_ip 

Und

{{ Host_ip.stdout.split('.')[3] }}

Zur späteren Verwendung im Spielbuch.

12
plamer

Anstelle eines Systemdienstprogramms können Sie ansible facts verwenden. Sie werden jedoch feststellen, dass die Schnittstellennamen von Server zu Server variieren. 

Sie haben das speziell erwähnt letzter Teil meiner öffentlichen IP

Wenn du wirklich meinst öffentliche IP Sie müssen einen externen Dienst verwenden, um diesen Dienst zu erhalten, da sich Ihr Server möglicherweise hinter einem NAT befindet. Hier ist eine Option

Shell: wget -qO- http://ipecho.net/plain ; echo
register: Host_ip

Das gibt Ihrer öffentlichen IP-Adresse, und als Nächstes erhalten Sie das letzte Oktett, das Sie wie folgt ausführen könnten:

{{ Host_ip.stdout.split('.')[3] }}
11
jarv

Wie von jarv erwähnt, kann dies durch Verwendung von facts erreicht werden. 

Dies kann auf folgende Arten erfolgen:

Für eine Liste aller IPv4-Adressen:

{{ ansible_all_ipv4_addresses }}

Für die Standard-IPv4-Adresse:

{{ ansible_default_ipv4.address }}

Wenn Sie wissen, dass sich die IP-Adresse auf der eth0-Schnittstelle befindet:

{{ ansible_eth0.ipv4.address }} 

Sie können dann die .split('.')[3]-Methode an die Variable anhängen, um die entsprechende Ausgabe zu erhalten, z. B. {{ ansible_default_ipv4.address.split('.')[3] }}.

11

Dies ist ein ähnlicher Weg, um es zu bekommen:

- name: Get the local IP
  local_action:
      module: uri
      url: http://checkip.amazonaws.com/
      return_content: yes
  register: ip_lookup
- set_fact:
      local_ip: "{{ ip_lookup.content | regex_replace('\n','') }}"
- debug: var=local_ip
0
joscas