Ansible Galaxy fait référence au site Web de Galaxy où les utilisateurs peuvent partager des rôles et à un outil en ligne de commande pour l’installation, la création et la gestion de rôles.
Le site Web
Galaxy, est un site gratuit permettant de rechercher, de télécharger et de partager des rôles développés par la communauté. Le téléchargement de rôles depuis Galaxy est un excellent moyen de relancer vos projets d’automatisation.
Vous pouvez également utiliser le site pour partager les rôles que vous avez créés. En vous authentifiant sur le site à l'aide de votre compte GitHub, vous pouvez importer des rôles et les mettre à la disposition de la communauté Ansible. Les rôles importés deviennent disponibles dans l'index de recherche Galaxy et visibles sur le site, ce qui permet aux utilisateurs de les découvrir et de les télécharger.
L'outil en ligne de commande
La commande “ansible-galaxy” est fournie avec Ansible. Vous pouvez l'utiliser pour installer des rôles à partir de Galaxy ou directement à partir d'un SCM basé sur git. Vous pouvez également l'utiliser pour créer un nouveau rôle, supprimer des rôles ou effectuer des tâches sur le site Web de Galaxy.
L'outil de ligne de commande communique par défaut avec l'API du site Web Galaxy à l'aide de l'adresse du serveur “https://galaxy.ansible.com”. Le projet Galaxy étant un projet open source, vous pouvez utiliser votre propre serveur Galaxy interne et souhaiter remplacer l'adresse du serveur par défaut.
Vous pouvez le faire en utilisant l'option –server ou en définissant la valeur du serveur Galaxy dans votre fichier “ansible.cfg”. Pour plus d'informations sur la définition de la valeur dans “ansible.cfg”, visitez “Galaxy Settings”.
Installation de rôles
Utilisez la commande “ansible-galaxy” pour télécharger des rôles à partir du site Web de Galaxy.
$ ansible-galaxy install nom_utilisateur.nom_rôle
roles_path
Par défaut, Ansible télécharge les rôles dans le premier répertoire accessible en écriture dans la liste de chemins d'accès par défaut “~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles”. Cela installera les rôles dans le répertoire de base de l'utilisateur exécutant “ansible-galaxy”.
Vous pouvez le remplacer en définissant la variable d'environnement “ANSIBLE_ROLES_PATH” dans votre session, en définissant “roles_path” dans un fichier “ansible.cfg” ou en utilisant l'option "--roles-path".
Voici un exemple d'utilisation de "--roles-path" pour installer le rôle dans le répertoire de travail actuel:
$ ansible-galaxy install --roles-path . geerlingguy.apache
version
Vous pouvez installer une version spécifique d'un rôle de Galaxy en ajoutant une virgule et la valeur d'un tag de version GitHub.
Par exemple:
$ ansible-galaxy install geerlingguy.apache,v1.0.0
Il est également possible de pointer directement vers le référentiel git et de spécifier un nom de branche ou un hachage de validation en tant que version.
Par exemple, ce qui suit installera un commit spécifique:
$ ansible-galaxy install git+https: //github.com/geerlingguy/ansible-role-apache.git,0b7cd353c0250e87a26e0499e59e7fd265cc2f25
Installation de plusieurs rôles à partir d'un fichier
À partir de Ansible 1.8, il est possible d’installer plusieurs rôles en les incluant dans un fichier “requirements.yml”. Le format du fichier est YAML et son extension doit être “.yml” ou “.yaml”.
Utilisez la commande suivante pour installer les rôles inclus dans “requirements.yml”:
$ ansible-galaxy install -r requirements.yml
Encore une fois, l'extension est importante. Si l'extension “.yml” est laissée désactivée, l'interface de ligne de commande “ansible-galaxy” suppose que le fichier est dans un format «de base» plus ancien, maintenant obsolète.
Chaque rôle dans le fichier aura un ou plusieurs des attributs suivants:
- src :
- La source du rôle. Utilisez le format nom_utilisateur.nom_rôle, si vous téléchargez à partir de Galaxy; sinon, fournissez une URL pointant vers un référentiel au sein d'un GDS basé sur git. Voir les exemples ci-dessous. C'est un attribut requis.
- scm :
- Spécifiez le SCM. A ce jour, seuls git ou hg sont supportés. Voir les exemples ci-dessous. La valeur par défaut est git.
- version :
- La version du rôle à télécharger. Indiquez une valeur de balise de publication, un hachage de validation ou un nom de branche. Par défaut, la branche est définie par défaut dans le référentiel, sinon, elle est définie par défaut sur le maître.
- name :
- Téléchargez le rôle sous un nom spécifique. Par défaut, le nom de Galaxy est téléchargé lors du téléchargement à partir de Galaxy. Sinon, le nom du référentiel est utilisé par défaut.
Utilisez l'exemple suivant comme guide pour la spécification de rôles dans “requirements.yml” :
# from galaxy - src: yatesr.timezone # from GitHub - src: https://github.com/bennojoy/nginx # from GitHub, overriding the name and specifying a specific tag - src: https://github.com/bennojoy/nginx version: master name: nginx_role # from a webserver, where the role is packaged in a tar.gz - src: https://some.webserver.example.com/files/master.tar.gz name: http-role # from Bitbucket - src: git+https://bitbucket.org/willthames/git-ansible-galaxy version: v1.4 # from Bitbucket, alternative syntax and caveats - src: https://bitbucket.org/willthames/hg-ansible-galaxy scm: hg # from GitLab or other git-based scm, using git+ssh - src: git@gitlab.company.com:mygroup/ansible-base.git scm: git version: "0.1" # quoted, so YAML doesn't parse this as a floating-point value
Installation de plusieurs rôles à partir de plusieurs fichiers
Au niveau de base, l'inclusion du fichiers “requirements.yml” vous permet de diviser des rôles en plusieurs fichiers. Le rôle inclut extraire les rôles d'autres fichiers.
Utilisez la commande suivante pour installer les rôles inclus dans “requirements.yml” + “webserver.yml”
$ ansible-galaxy install -r requirements.yml
Contenu du fichier “requirements.yml”:
# from galaxy - src: yatesr.timezone - include: <path_to_requirements>/webserver.yml
Contenu du fichier “webserver.yml” :
# from github - src: https://github.com/bennojoy/nginx # from Bitbucket - src: git+https://bitbucket.org/willthames/git-ansible-galaxy version: v1.4
Les dépendances
Les rôles peuvent également dépendre d'autres rôles. Lorsque vous installez un rôle comportant des dépendances, ces dépendances sont automatiquement installées.
Vous spécifiez les dépendances de rôle dans le fichier “meta/main.yml” en fournissant une liste de rôles. Si la source d'un rôle est Galaxy, vous pouvez simplement spécifier le rôle au format “nom_utilisateur.nom_role”. Le format plus complexe utilisé dans “requirements.yml” est également pris en charge, ce qui vous permet de fournir “src”, “scm”, “version” et “name”.
Les TAG sont héritées dans la chaîne de dépendance. Pour que les TAG puissent être appliquées à un rôle et à toutes ses dépendances, ils doivent être appliquée au rôle et non à toutes les tâches d'un rôle.
Les rôles répertoriés en tant que dépendances sont soumis à des conditions et à un filtrage des TAG et peuvent ne pas s'exécuter complètement en fonction des TAG et des conditions appliquées.
Les dépendances trouvées dans Galaxy peuvent être spécifiées comme suit:
dépendances: - geerlingguy.apache - geerlingguy.ansible
La forme complexe peut également être utilisée comme suit:
dependencies: - src: geerlingguy.ansible - src: git+https://github.com/geerlingguy/ansible-role-composer.git version: 775396299f2da1f519f0d8885022ca2d6ee80ee8 name: composer
Créer des rôles
Utilisez la commande “init” pour initialiser la structure de base d'un nouveau rôle, ce qui vous permet de gagner du temps lors de la création des divers répertoires et fichiers “main.yml” requis par le rôle.
$ ansible-galaxy init role_name
Ce qui précède créera la structure de répertoire suivante dans le répertoire de travail actuel:
role_name/ README.md .travis.yml defaults/ main.yml files/ handlers/ main.yml meta/ main.yml templates/ tests/ inventory test.yml vars/ main.yml
Si vous souhaitez créer un repository pour le rôle, la racine du repository doit être “nom_role”.
Force
Si un répertoire correspondant au nom du rôle existe déjà dans le répertoire de travail actuel, la commande “init” entraîne une erreur. Pour ignorer l'erreur, utilisez l'option "--force". Forcer créera les sous-répertoires et les fichiers ci-dessus, en remplacement de tout ce qui correspond.
Utilisation d'un squelette de rôle personnalisé
Un répertoire squelette de rôle personnalisé peut être fourni comme suit:
$ ansible-galaxy init --role-skeleton=/chemin/vers/squelette role_name
Quand un squelette est fourni, “init” va:
- copier tous les fichiers et répertoires du squelette vers le nouveau rôle
- tout fichier “.j2” trouvé en dehors d'un dossier de modèles sera rendu sous forme de modèles. La seule variable utile pour le moment est “role_name”
- Le dossier “.git” et tous les fichiers “.git_keep” ne seront pas copiés
Alternativement, le “role_skeleton” et l’ignorance des fichiers peuvent être configurés via “ansible.cfg”
[galaxie] role_skeleton = / chemin / vers / squelette role_skeleton_ignore = ^ .git $, ^. * /. git_keep $
Recherche de rôles
Effectuez une recherche dans la base de données Galaxy par mots-clés, plates-formes, auteur et plusieurs mots-clés.
Par exemple:
$ ansible-galaxy search elasticsearch --author geerlingguy
La commande de recherche renverra une liste des 1000 premiers résultats correspondant à votre recherche:
Found 2 roles matching your search: Name Description ---- ----------- geerlingguy.elasticsearch Elasticsearch for Linux. geerlingguy.elasticsearch-curator Elasticsearch curator for Linux.
Obtenir plus d'informations sur un rôle
Utilisez la commande “info” pour afficher plus de détails sur un rôle spécifique :
$ ansible-galaxy info username.role_name
Ceci retourne tout ce qui est trouvé dans Galaxy pour le rôle :
Role: username.role_name
description: Installs and configures a thing, a distributed, highly available NoSQL thing.
active: True
commit: c01947b7bc89ebc0b8a2e298b87ab416aed9dd57
commit_message: Adding travis
commit_url: https://github.com/username/repo_name/commit/c01947b7bc89ebc0b8a2e298b87ab
company: My Company, Inc.
created: 2015-12-08T14:17:52.773Z
download_count: 1
forks_count: 0
github_branch:
github_repo: repo_name
github_user: username
id: 6381
is_valid: True
issue_tracker_url:
license: Apache
min_ansible_version: 1.4
modified: 2015-12-08T18:43:49.085Z
namespace: username
open_issues_count: 0
path: /Users/username/projects/roles
scm: None
src: username.repo_name
stargazers_count: 0
travis_status_url: https://travis-ci.org/username/repo_name.svg?branch=master
version:
watchers_count: 1
Lister les rôles installés
Utilisez la commande “list” pour afficher le nom et la version de chaque rôle installé dans le “roles_path”.
$ ansible-galaxy list
- chouseknecht.role-install_mongod, master
- chouseknecht.test-role-1, v1.0.2
- chrismeyersfsu.role-iptables, master
- chrismeyersfsu.role-required_vars, master
Supprimer un rôle installé
Utilisez la commande “remove” pour supprimer un rôle de “roles_path” :
$ ansible-galaxy remove username.role_name
Branche
Utilisez l'option “–branch” pour importer une branche spécifique. Si non spécifié, la branche par défaut du référentiel sera utilisée.
Nom de rôle
Par défaut, le nom attribué au rôle sera dérivé du nom du référentiel GitHub. Cependant, vous pouvez utiliser l'option “–role-name” pour le remplacer et définir le nom.
No wait
Si l'option “–no-wait” est présente, la commande n'attendra pas les résultats. Les résultats de l'importation la plus récente pour l'un de vos rôles sont disponibles sur le site Web de Galaxy en visitant “My imports”.
Supprimer un rôle
La commande delete nécessite que vous vous authentifiiez d'abord à l'aide de la commande login. Une fois authentifié, vous pouvez supprimer un rôle du site Web de Galaxy. Vous êtes uniquement autorisé à supprimer des rôles pour lesquels vous avez accès au référentiel dans GitHub.
Utilisez ce qui suit pour supprimer un rôle:
$ ansible-galaxy delete github_user github_repo
Cela supprime uniquement le rôle de Galaxy. Il ne supprime ni ne modifie le référentiel GitHub actuel.