Ansible adresse IP variable - partie hôte
J'ai le problème suivant:
Je suis en train d'écrire playbook pour le réglage de l'adresse IP sur la ligne de commande dans Ansible. Disons 10.10.10.x. J'ai besoin d'obtenir la dernière partie de mon IP publique permet de dire que x.x.x.15 et de l'attribuer à l'privée: 10.10.10.15. Est-il une variable pour cela? Puis-je prendre? 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 de la partie hôte de l'adresse IP publique.
Edit:
Merci! 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 la playbook.
Comme par @user24364 la réponse ci-dessous, il n'est pas clair si vos serveurs IP publique déjà attribué, ou si vous allez par le biais d'un routeur NAT. Veuillez mettre à jour notre question afin de clarifier cette situation.
OriginalL'auteur plamer | 2014-08-20
Vous devez vous connecter pour publier un commentaire.
Au lieu d'utiliser un utilitaire système, vous pouvez utiliser ansible faits si vous trouverez que les noms d'interface varient d'un serveur à l'autre.
Vous mentionné spécifiquement la dernière partie de mon IP publique
Si vraiment vous dire que votre IP vous aurez besoin d'utiliser un service externe pour l'obtenir depuis votre serveur peut derrière un NAT. Voici une option
Qui donnera à votre IP publique, ensuite pour obtenir le dernier octet que vous pourriez faire quelque chose comme:
OriginalL'auteur jarv
Comme mentionné par jarv cela peut être obtenu en utilisant faits.
Cela peut être fait de la manière suivante:
Pour une liste de toutes les adresses ipv4:
Pour la valeur par défaut adresse ipv4:
Si vous connaissez l'adresse ip de l'interface eth0:
Vous pouvez ensuite ajouter les
.split('.')[3]
méthode de la variable pour obtenir la sortie appropriée, par exemple{{ ansible_default_ipv4.address.split('.')[3] }}
OriginalL'auteur Willem van Ketwich
C'est une manière similaire à l'obtenir:
OriginalL'auteur joscas