Question

Comment puis-je utiliser ec2.py pour obtenir une liste dynamique d'hôtes ec2 et également utiliser localhost comme hôte.J'ai cherché maintes et maintes fois sur Google et je n'arrive pas à trouver une bonne solution.J'ai rencontré des réponses proches, mais toutes semblent nécessiter de diviser vos tâches en deux playbooks distincts qui ne peuvent pas être exécutés en même temps.

Était-ce utile?

La solution

J'essayais de résoudre un problème similaire.

J'ai eu un groupe d'hôtes qui ont accepté les connexions de l'hôte ansible.Pour des raisons de sécurité, l'hôte ansible n'a pas été autorisé à se connecter à lui-même.Cependant, je devais exécuter le jeu commun sur tous les hôtes.

J'ai spécifié tous les hôtes, exclu l'hôte ansible, puis ajouté localhost:

- name: Common
  hosts: "tag_name_*:!tag_name_ansible:localhost"
  roles:
    - common

Ajouter localhost a fonctionné bien, même lorsque vous utilisez le script d'inventaire EC2.J'utilise un ansible 1.7 avec un script d'inventaire EC2 à jour.

Autres conseils

Ce n'est pas la seule solution (des suggestions valables ont été faites), mais ce que je finis presque toujours par faire lorsque j'utilise le plugin d'inventaire EC2, c'est d'exploiter une fonctionnalité Ansible que je pense que beaucoup de gens ne connaissent pas :vous pouvez utiliser un annuaire comme inventaire.

Ansible recherche les exécutables et les fichiers plats dans un répertoire et fusionne leurs résultats.Ceci est très utile car vous pouvez utiliser un fichier plat pour créer de jolis alias pour les groupes dynamiques et y ajouter localhost, en définissant éventuellement certaines variables.

$ tree inventory/staging
inventory/staging
├── base
├── ec2.ini
├── ec2.py
└── group_vars -> ../group_vars

Un extrait du dossier base ressemble à ça:

[localhost]
# I need to tell Ansible which Python on my system has boto for AWS
127.0.0.1 ansible_python_interpreter=/usr/local/bin/python

# The EC2 plugin will populate these groups, but we need to add empty entries
# here to make aliases for them below.
[tag_Stage_staging]
[tag_Role_webserver]

[staging:children]
tag_Stage_staging

[webservers:children]
tag_Role_webserver

Il vous suffit ensuite de pointer vers le répertoire d'inventaire :

$ ansible -i inventory/staging webservers -m ec2_facts
# OR
$ export ANSIBLE_HOSTS=inventory/staging
$ ansible webservers -m ec2_facts

Je pense que vous pouvez réaliser ce que vous voulez faire en utilisant le -l paramètre de la commande ansible-playbook.

Nous faisons quelque chose de similaire et la commande ansible-playbook que nous utilisons ressemble à ceci

ansible-playbook -l tag_foo_bar:localhost -U username -i ec2.py playbook.yml

La partie après le -l c'est juste un ansible modèle (http://docs.ansible.com/intro_patterns.html) ce qui signifie "limiter l'exécution à toutes les instances avec la balise 'foo=bar' ET l'hôte localhost".La partie importante est le deux-points qui signifie simplement « et ».

@ches, cela ne fonctionnera pas si vous avez plusieurs environnements avec des instances marquées avec Role= Webserver.Votre commande:

$ ansible -i inventory/staging webservers -m ec2_facts

ramassera chaque instance étiquetée comme Webserver et non seulement celles qui appartiennent à l'environnement de mise en scène.Si vous souhaitez récupérer uniquement les serveurs Web de la stabilisation, vous aurez toujours besoin de courir:

$ ansible 'staging:&webservers' -i inventory/staging -m ec2_facts

sauf si je manque quelque chose ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top