2 votes

Ansible, AWS, autre hôte basé sur une balise

Je crée des playbooks Ansible qui créent l'infrastructure de notre système sur AWS. Évidemment, les inventaires dynamiques utilisant ec2.py sont impliqués.

Je crée d'abord un serveur d'utilité, puis un serveur web, et j'ai un playbook séparé pour chacun d'eux. J'ai des fichiers sur le serveur web qui ont besoin d'avoir l'IP privée du serveur d'utilité ajoutée en utilisant un modèle.

Quel est le meilleur moyen de récupérer l'IP privée du serveur d'utilité pour l'utiliser dans le playbook du serveur web?

1voto

dawud Points 14770

Les adresses IP des serveurs font partie des faits découvrables concernant les hôtes. Ces faits sont récupérés automatiquement lorsque vous exécutez un playbook, sauf si vous désactivez explicitement gather_facts.

Et même dans ce cas, vous pouvez utiliser explicitement le setup module pour collecter des faits.

Ces valeurs peuvent ensuite être utilisées dans les tâches suivantes.

À titre d'exemple:

$ ansible -c local -m setup -a 'filter=ansible_*address*' localhost                                                                              
127.0.0.1 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.17.0.1", 
            "192.168.122.1", 
            "192.168.0.12", 
            "172.18.0.1"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::e8b5:946f:410b:aff5"
        ]
    }, 
    "changed": false

}

1voto

Chris Krycho Points 175

Il y avait trois problèmes :

  1. Vous avez besoin d'informations provenant d'un autre serveur pour utiliser dans le serveur actuel que vous configurez.
  2. L'autre serveur dont vous avez besoin d'informations est hébergé dans AWS.
  3. L'autre serveur dont vous avez besoin d'accéder aux informations a un nom de variable.

La solution à 3 est de spécifier la variable dans la ligne de commande en utilisant des extra-vars comme ceci : ansible-playbook -i ./ec2.py --extra-vars "chaos=test" aws_playground.yaml

La solution à 2 est de trouver le nom d'hôte dont vous avez besoin à partir de la variable de groupes hostvars. Lorsqu'elle est combinée avec 3 ci-dessus, vous voulez quelque chose comme : - debug: var=hostvars[groups['tag_Name_'+chaos+'_util'][0]].ansible_all_ipv4_addresses[0]

La solution à 1 est de collecter d'abord des faits à partir de l'autre serveur avant de travailler sur le serveur que vous configurez. Voici un playbook regroupant tout ceci en un seul endroit :


# Appelé comme : ansible-playbook -i ./ec2.py --extra-vars "chaos=test" aws_playground.yaml
- name: Collecter nos faits sur util
  hosts: "tag_Name_{{ chaos }}_util"
  tasks: [ ]

- name: Configurer un serveur web
  hosts: "tag_Name_{{ chaos }}_web"
  tasks:
   - debug: var=hostvars[groups['tag_Name_'+chaos+'_util'][0]].ansible_all_ipv4_addresses[0]

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X