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?
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.
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.
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.
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.
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