Resources attached to the Road To DevOps tutorial https://blog.noobtoroot.xyz/road-to-devops/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

247 lines
6.8 KiB

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