![Logo Ansible](images/logo-ansible.svg) # Ansible Galaxy Créer et partager ses propres roles. ## Ansible Galaxy * Communauté pour trouver, télécharger, partager des rôles. * Site : [https://galaxy.ansible.com/](https://galaxy.ansible.com/) * CLI : `ansible-galaxy` * Doc : [http://docs.ansible.com/ansible/galaxy.html](http://docs.ansible.com/ansible/galaxy.html) ## Une communauté * Télécharger des roles depuis Galaxy est un bon moyen pour démarrer un projet. * On ne réinvente pas la roue. * Enormément de projets : environ 19'500 roles (jan. 2019). ## Mais soyez vigilent * Tout le monde peut partager. * Beaucoup de duplications. * Vulnérabilités, malveillance, dangereux, mauvais fonctionnement... ![](images/ansible-galaxy-site.png) ## Rechercher des rôles ```none $ ansible-galaxy search httpd Found 182 roles matching your search: Name Description ---- ----------- 2kloc.trellis-monit Install and configure Monit service in Trellis. acropia.httpd IT Professional ahuffman.sat6_create_hosts An Ansible role to create new virtual and ba... AlbanAndrieu.ansible-workstation A role for installing workstation AnatolyRugalev.ansistrano-deploy Ansible role to deploy scripting application... ansiblebit.httpd Ansible role to setup the Apache HTTP server. ansiblebit.mod_wsgi Ansible role to install and setup mod_wsgi. ansible-ThoTeam.nexus3-oss Nexus Repository Manager 3.x (Sonatype) ansistrano.deploy Ansible role to deploy scripting application... ansistrano.rollback Ansible role to rollback scripting applicati... Anthony25.squid Installs Squid archf.packages Ansible role to install packages on a host awasilyev.apache-container Ansible Container role that adds an apache s... awasilyev.drupal-container Ansible Container role that adds an apache s... awasilyev.tomcat-container Ansible Container role that adds an tomcat s... axmac.axmac_apache Apache2 beardyjay.firewalld Base role for firewalld ... ``` ## Télécharger un rôle * https://galaxy.ansible.com/geerlingguy/apache ```none $ ansible-galaxy install geerlingguy.apache - downloading role 'apache', owned by geerlingguy - downloading role from https://github.com/geerlingguy/ansible-role/.../3.0.3.tar.gz - extracting geerlingguy.apache to /home/ansible/.ansible/roles/geerlingguy.apache - geerlingguy.apache (3.0.3) was installed successfully ``` ## Fichiers récupérés ```none /home/ansible/.ansible └── roles    └── geerlingguy.apache    ├── defaults    │   └── main.yaml    ├── handlers    │   └── main.yaml    ├── LICENSE    ├── meta    │   └── main.yaml    ├── README.md    ├── tasks    │   ├── configure-Debian.yaml    │   ├── configure-RedHat.yaml    │   ├── configure-Suse.yaml    │   ├── main.yaml    │   ├── setup-Debian.yaml    │   ├── setup-RedHat.yaml    │   └── setup-Suse.yaml    ├── templates    │   └── vhosts.conf.j2    └── vars    ├── apache-22.yaml    ├── apache-24.yaml    ├── Debian.yaml    ├── RedHat.yaml    └── Suse.yaml ``` ## Pourquoi utiliser Galaxy ? * Créer des roles Ansible réutilisables est une bonne pratique. * Partager des roles sur son propre SCM. * Apporter une notion de dépendances à la sauce Maven ou NPM. ## Fonctionnement avancé * Installer plusieurs roles en une seule fois. * Récupérer des roles depuis plusieurs sources (Galaxy, Git, filer...). * Un seul fichier décrivant la liste des roles à installer : `requirements.yaml` ```none $ ansible-galaxy install -r requirements.yaml ``` ## Plusieurs sources possibles Depuis Galaxy ```yaml - src: zaxos.tomcat-ansible-role - src: user.rolename ... ``` Avec l'utilisation de Galaxy, l'attribut `src` représente simplement ``.`` Depuis un serveur Git ```yaml - src: git@gitlab.sii-ouest.fr:ouest/projects/ansible/tomcat.git scm: git version: develop ``` L'attribut `version` peut être un tag, un nom de branche ou un numéro de commit. La version par défaut est master. Depuis GitHub, pas besoin d'indiquer de SCM Depuis un serveur web ```yaml - src: https://url.du.serveur.com/ansible/roles/tomcat.tar.gz name: tomcat-role ``` L'attribut `name` sert à indiquer le nom du role lorsqu'il est téléchargé ## Définir le chemin de téléchargement Par défaut, les roles sont téléchargés à l'endroit spécifié par la variable d'environnement `ANSIBLE_ROLE_PATH`. Il est possible de définir le chemin directement en ligne de commande. ```none $ ansible-galaxy install -r requirements.yaml -p|-roles-path . ``` ## Créer des roles Ansible Il est très facile de créer un role Ansible avec une structure de dossier pré-définit avec la commande `init`. ```none $ ansible-galaxy init tomcat-custom ```
L'argument `-force` permet d'écraser un role existant portant le même nom. La création du role génère la structure ci-dessous : ```none /tomcat-custom ├── README.md ├── .travis.yaml ├── defaults/ | └── main.yaml ├── files/ ├── handlers/ | └── main.yaml ├── meta/ | └── main.yaml ├── templates/ ├── tests/ | ├── inventory | └── test.yaml └── vars/ └──main.yaml ``` ## Utiliser une structure personalisée ```none $ ansible-galaxy init --role-skeleton=/chemin/squelette tomcat-custom ``` Quand une structure personalisée est utilisée, les points suivants sont respectés : * Copie tous les fichiers et dossiers vers le nouveau role. * Les dossiers `.git` et fichiers `.git_keep` ne sont pas recopiés. * Le fichier `meta/main.yaml` est obligatoire pour récupérer le role via Galaxy. ### Travaux pratiques ![Travaux pratiques](images/tp.gif) [TP Ansible Galaxy](travaux-pratiques/tp-ansible-galaxy.html)