web-dev-qa-db-fra.com

Ansible adresse IP variable - partie hôte

J'ai le problème suivant:

J'écris un livre de jeu pour définir l'adresse IP sur la ligne de commande dans Ansible. Disons 10.10.10.x. Je dois obtenir la dernière partie de mon adresse IP publique: disons x.x.x.15 et affectons-la au privé: 10.10.10.15. Y a-t-il une variable pour cela? Puis-je en capturer? J'ai essayé d'utiliser quelque chose comme:

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

Mais ce n'est pas ce dont j'ai besoin. Cela fonctionne, mais seulement pour un nombre limité de serveurs.

Le tout devrait être comme ça:

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

et {{ var }} devrait être la partie hôte de l'IP publique.

Modifier:

Je vous remercie! Voici ma solution finale:

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

Et

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

Pour l'utiliser plus tard dans le playbook.

12
plamer

Au lieu d'utiliser un utilitaire système, vous pouvez utiliser ansible facts bien que vous constatiez que les noms d'interface varient d'un serveur à l'autre. 

Vous avez spécifiquement mentionné le dernière partie de mon IP publique

Si vous voulez vraiment dire votre iP publique vous devrez utiliser un service externe pour l'obtenir car votre serveur peut se trouver derrière un NAT. Voici une option

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

Cela donnera à votre IP publique, après avoir obtenu le dernier octet, vous pourriez faire quelque chose comme:

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

Comme mentionné par jarv, cela peut être obtenu en utilisant facts

Cela peut être fait des manières suivantes:

Pour une liste de toutes les adresses ipv4:

{{ ansible_all_ipv4_addresses }}

Pour l'adresse IPv4 par défaut:

{{ ansible_default_ipv4.address }}

Si vous savez que l'adresse IP est sur l'interface eth0:

{{ ansible_eth0.ipv4.address }} 

Vous pouvez ensuite ajouter la méthode .split('.')[3] à la variable pour obtenir la sortie appropriée, par exemple {{ ansible_default_ipv4.address.split('.')[3] }}.

11

C'est une façon similaire de l'obtenir:

- 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