Tous mes playbooks / rôles Ansible sont archivés dans mon dépôt git.
Cependant, pour les rôles Ansible Galaxy, je dois toujours les télécharger explicitement un par un sur chaque machine à partir de laquelle je souhaite exécuter Ansible.
Il est même difficile de savoir à l'avance quels rôles Ansible Galaxy sont nécessaires jusqu'à ce qu'Ansible se plaint d'un rôle manquant au moment de l'exécution.
Comment est-il censé gérer les dépendances de rôle d'Ansible Galaxy? Je voudrais soit les avoir archivés dans mon dépôt git avec le reste de mon code ansible, soit les avoir automatiquement identifiés et téléchargés lorsque j'exécute Ansible sur une nouvelle machine.
Réponses:
Vous devez utiliser un
requirements.yml
fichier pour ce cas d'utilisation. Décrivez les rôles dont vous avez besoin à l'aide de l'une des nombreuses méthodes d'installation:Puis installez-les:
Voici un exemple de travail (installation d'OpenDaylight en utilisant Ansible comme approvisionneur Vagrant). Consultez les documents Ansible pertinents pour plus d'informations.
la source
Comme suggéré, vous pouvez utiliser la galaxie ansible pour ce besoin.
Ansible a une fonctionnalité où vous pouvez créer un
requirements.yml
fichier qui répertorie tous vos rôles. Vous pouvez en savoir plus ici: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-filePar exemple (requirements.yml):
Vous exécutez ensuite
ansible-galaxy install -r requirements.yml
sur ce fichier pour télécharger tous les rôles qui y sont répertoriés.Si vous souhaitez l'automatiser davantage, vous pouvez créer un script shell simple qui exécutera les deux commandes.
Par exemple (ansible.sh):
./ansible.sh
la source
2.2.1
Je me retrouve souvent à installer un JDK Java. L'utilisation d'un rôle facilite ce contact. J'ai essayé plusieurs façons différentes (y compris beaucoup de .gitmodules et de sous-modules ... Je dois utiliser plusieurs systèmes git pour travailler et tout cela devient moche). Ma plus grande exigence est que je ne vérifie pas le code de rôle dans mon projet de playbook, principalement pour que je puisse tout garder au même endroit.
Le contenu de mon fichier 'requirements.yml':
Je lance un playbook séparé, install-roles.yml:
Je lance ce premier playbook, puis j'exécute mes rôles dans n'importe quel playbook normalement. Pour moi, le secret est de m'assurer qu'il est ignoré par git afin que je ne vérifie pas les rôles par erreur. De plus, comme j'efface le dossier à chaque fois, je m'assure que je n'ai pas besoin de forcer ou d'ignorer les erreurs.
la source
Une autre solution consiste à utiliser des sous-modules git. Après tout, Ansible Galaxy n'est qu'un répertoire de référentiels github ...
J'utilise cette commande pour ajouter automatiquement n'importe quel rôle Galaxy en tant que sous-module:
Validez ensuite les modifications dans votre dépôt git. Lorsque vous clonerez votre repo à l'avenir, assurez-vous de le cloner avec des sous-modules, par exemple
git clone ... --recursive
Un avantage de ceci est qu'un sous-module git fait toujours référence à une version spécifique (git commit-hash). Cela vous empêchera d'exécuter des mises à jour non testées dans votre environnement de production. Une nouvelle version d'un rôle Galaxy pourrait avoir des bugs ou fonctionner complètement différemment qu'auparavant. Avec un sous-module git, vous décidez si et quand vous mettez à jour un rôle vers la nouvelle version.
En outre, vous n'aurez pas à vous occuper de la liste noire des rôles de galaxie dans votre
.gitignore
pour éviter de valider leur code dans votre référentiel.la source
--force
indicateur non documenté , il ne vous montrera pas si ou ce qui a réellement changé. C'est une boîte noire que vous ne pouvez contrôler que si vous conservez les rôles de galaxie téléchargés dans SCM. Pour d'autres raisons, c'est quand même une bonne idée. Lorsque vous tirez des sous-modules, vous voyez au moins quels rôles ont changé.Vous pouvez utiliser un rôle Ansible pour installer les rôles nécessaires à l'aide du module de commande .
Voici un exemple très basique qui s'exécute
ansible-galaxy install
:Le
ansible_roles_list
peut être fourni sous forme de variable ou de paramètre de rôle.Si vous faites cela dans un rôle, il doit être appliqué avant tout autre rôle que vous souhaitez installer en l'utilisant, dans un playbook distinct. En effet, Ansible vérifie si tous les rôles sont disponibles avant d'exécuter le playbook où vous les référencez.
la source
À ce stade, pour autant que je sache, il n'y a pas de moyen automatique de télécharger des rôles au moment de l'exécution. Votre meilleur pari est de les engager dans votre propre dépôt ou d'avoir une documentation appropriée répertoriant toutes les exigences. Vous pouvez même créer un livre de jeu pré-vol qui installe vos rôles. :)
la source
Ici, mes exigences sont sur le rôle et utilisées dans install.yml
main.yml
la source
Si requirements.yml réside dans le répertoire des rôles de votre projet, Tower / AWX installe les rôles automatiquement.
la source