web-dev-qa-db-fra.com

Ansible Galaxy rôles installer dans un répertoire spécifique?

Je me suis donc dit que je devrais commencer à utiliser Ansible Galaxy dès que possible, au lieu d’écrire mes propres rôles. Je viens d’installer mon premier rôle et il a été installé sur /etc/local/ansible/roles (je suis sous OSX). Maintenant, je me demande comment vous installez ces rôles là où j'en ai réellement besoin? Dois-je simplement copier le rôle là où j'en ai besoin ou y a-t-il un moyen envisageable de le faire? 

37
StenW

Oui, vous les copieriez selon l'exemple de structure de projet:

site.yml
webservers.yml
fooservers.yml
roles/
   common/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/
   webservers/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/

ou vous pouvez simplement exécuter ansible-galaxy avec l'option -p ROLES_PATH ou --roles-path=ROLES_PATH pour l'installer sous /your/project/root

Vous pouvez également utiliser le répertoire /etc/local/ansible comme racine de votre projet si vous le souhaitez.

J'espère que ça aide.

46
Rico

En général, je colle tous mes rôles partagés dans un dossier principal unique qui est partagé entre tous mes projets. Cela évite les tâches fastidieuses de copier/coller manuellement et de mettre à jour plusieurs copies du même rôle.

Puis je modifie le ansible.cfg de chaque projet pour indiquer à ansible de rechercher des rôles dans ce dossier principal en plus du dossier de projet local. 

Exemple ansible.cfg:

[defaults]
roles_path = ~/Code/ansible_roles 

Ansible commence par rechercher un rôle dans le projet local, puis dans le roles_path. Vous pouvez spécifier plusieurs chemins en les séparant par des deux points.

Par défaut, ansible-galaxy install username.rolename installera le rôle sur le roles_path configuré dans ansible.cfg, c'est donc à peu près tout ce que vous devez faire. 

Parfois, je souhaite installer le rôle dans le projet spécifique et non dans le dossier principal. Par exemple, pour éviter les conflits de version lorsque deux rôles ont des dépendances de rôle nécessitant des versions différentes du même rôle. Dans ce cas, vous pouvez utiliser l'option -p ROLES_PATH ou --roles-path=ROLES_PATH:

ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/

Dans Ansible 1.9, vous pouvez spécifier manuellement l'emplacement d'installation du rôle dans le requirements.yml de votre projet. Malheureusement, ce path param a été supprimé de Ansible 2

# from galaxy
- src: jeffwidman.elasticsearch

# from private github repo, installing to a relative path
- src: https://github.com/jeffwidman/private_ansible_role
  path: vagrant/roles/

Si vous souhaitez personnaliser davantage les choses, il existe un problème en suspens: ajouter une prise en charge de plusieurs fichiers ansible.cfg qui vous permettrait de définir facilement roles_path à différents niveaux de spécificité. Ansible va lire ANSIBLE_CONFIG, ansible.cfg dans le répertoire de travail en cours, .ansible.cfg dans le répertoire de base ou /etc/ansible/ansible.cfg, selon ce qu’il aura trouvé en premier.

33
Jeff Widman

Voici comment j'ai résolu le problème de traitement des rôles de galaxie et fonctionne pour n'importe quelle plate-forme.

Editez votre fichier ansible.cfg, qui devrait faire partie de votre contrôle de code source, puis ajoutez-le:

roles_path = roles.galaxy:roles

Créez un répertoire nommé roles.galaxy et à partir de maintenant, lorsque vous ferez ansible-galaxy install xxx.yyy, il sera installé dans roles.galaxy.

Vous continuerez à conserver vos rôles locaux dans le répertoire roles et ceux de la communauté dans roles.galaxy. Les deux d'entre eux sont supposés être conservés dans votre dépôt Git.

N'envisagez jamais de les installer à partir de galaxy, cela constituerait un risque important pour la sécurité en plus d'ajouter plusieurs points de défaillance supplémentaires. 

19
sorin

Je réponds probablement à cette question trop tard. Mais ce que vous voulez peut être fait avec une seule commande:

ansible-galaxy install -p ./roles thefinn93.letsencrypt

va installer le rôle letsencrypt dans le répertoire des rôles et vous n'avez pas besoin de copier des éléments.

7
Yiman

Je désirais un chemin global pour mes rôles. Vous pouvez le faire en mettant un ansible.cfg dans ~/.ansible.cfg. Un projet basé sur celui-ci aura toujours la priorité. 

cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles
0
Aimon Bustardo