|
|
|
|
<!-- .slide: data-state="nologo-slide" style="text-align: center" -->
|
|
|
|
|
![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) <!-- .element: width="2000px" -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Rechercher des rôles
|
|
|
|
|
|
|
|
|
|
<!-- .slide: data-state="small-code" -->
|
|
|
|
|
```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
|
|
|
|
|
|
|
|
|
|
<!-- .slide: data-state="small-code" -->
|
|
|
|
|
```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
|
|
|
|
|
<!-- .slide: data-state="small-code" -->
|
|
|
|
|
```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
|
|
|
|
|
<!-- .slide: data-state="medium-code" -->
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
- src: zaxos.tomcat-ansible-role
|
|
|
|
|
- src: user.rolename
|
|
|
|
|
...
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Avec l'utilisation de Galaxy, l'attribut `src` représente simplement `<nom du contributeur>`.`<nom du role>`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Depuis un serveur Git
|
|
|
|
|
<!-- .slide: data-state="medium-code" -->
|
|
|
|
|
|
|
|
|
|
```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
|
|
|
|
|
<!-- .slide: data-state="medium-code" -->
|
|
|
|
|
|
|
|
|
|
```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
|
|
|
|
|
<!-- .slide: data-state="medium-code" -->
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
```
|
|
|
|
|
</br>
|
|
|
|
|
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
|
|
|
|
|
<!-- .slide: data-state="medium-code" -->
|
|
|
|
|
```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
|
|
|
|
|
<!-- .slide: data-state="nologo-slide" style="text-align: center" -->
|
|
|
|
|
|
|
|
|
|
![Travaux pratiques](images/tp.gif)
|
|
|
|
|
|
|
|
|
|
<small>[TP Ansible Galaxy](travaux-pratiques/tp-ansible-galaxy.html)</small>
|