<style>
.reveal {
font-size: 26px;
}
code {
color: #5F72EB;
font-family: menlo;
}
</style>
Introduction à Ansible
===

SYDRE NORMANDIE - 24 janvier 2020
Sébastien Vigneron (CRIANN) / Bruno Levasseur (URN)
---
### Ansible
> Ansible is an open source community project, it's the simplest way to automate IT. Ansible is the only automation language that can be used across entire IT teams from systems and network administrators to developers and managers.
----
### Usages
- moteur d'orchestration permettant l'automatisation des déploiements:
- infrastructures ( serveurs, équipements réseaux)
- applications
- Infrastructure as Code (IaC)
- permet de décrire l'infrastructure avec du code versionnable (GIT)
- Gestion de workflow
- exemple : retirer un backend d'un reverse proxy pour y apporter une maintenance puis le retablir dans le pool de backends
- DevOps / NetOps
----
### Alternatives libres
| | language | Agent | Mode |
| --------- | -------- | ----- | --------- |
| Chef | Ruby | oui | pull |
| Puppet | Ruby | oui | pull |
| Saltstack | Python | oui | push/pull |
| Ansible | Python | non | push |
https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software
----
### Google Trends

---
### Historique
- logiciel open source (GLPv3.0)
- conçu par Michael DeHaan (auteur de Cobbler)
- Ansible, inc. rachetée pour RedHat en 2015
- 1er version: 2012
- latest: v2.9.2 (Dec 2019)
----
### Principes de conception
- design minimaliste (peu de dépendances)
- faible courbe d'apprentissage
- gestion rapide et en parallèle des machines
- sécurité: pas d'agent et de port ouvert supplémentaire
- language descriptif facile à lire (YAML) et modèles (Jinja2)
----
### Cycle de révision
- révisions tous les 6 mois
- support sur 3 révisions majeures
- Projet géré sur GITHUB:
https://github.com/ansible/ansible
----
### Spécifications
- large communauté
- agentless: utilise un accès distant natif ( SSH, WinRM, API..)
- indempotent (effet identique à chaque exécution)
- language: Python
- Interface WEB:
- open source: AWX https://github.com/ansible/awx
- Version RedHat: Tower https://www.ansible.com/products/tower
---
### Composants de base
- Inventory
- Playbooks
- Roles
- Tasks
- Modules
----

----
### Inventory
- fichier au format INI (YAML supporté)
- détermine les machines cibles
- https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
```toml=
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
```
----
### Playbooks
- `Playbook`: un simple fichier YAML
- `Play` : définit un ensemble d'activités (task) à exécuter sur les hôtes
- `Roles`: ensemble de tâches factorisables
- `Tasks`: une action à effectuer sur l'hôte
- `Module`: action élémentaire réalisée par Ansible
----
### Playbooks

----
### Modules
- la base des actions réalisées par Ansible
- portion de code généralement écrit en python
- plus de 3380 disponibles (janvier 2020)
https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html
- utilisable directement (mode Ad-Hoc):
```shell
$ ansible [pattern] -m [module] -a "[module options]"
$ ansible webservers -m package -a "name=acme state=present"
$ ansible webservers -m file -a "dest=/path/to/c state=absent"
```
- ou dans un playbook avec la commande: `ansible-playbook`
----
### Tasks
- appelle un `module` pour réaliser un état attendu
```yaml=
tasks:
- name: ensure acme is at the latest version
package:
name: acme
state: latest
```
----
### Rôles
- Ensemble de tâches factorisables dans différents contextes (ex: déploiement d'un serveur web, d'une application...)
- définis dans une structure de dossiers normalisée
- Création d'un rôle vide:
`$ ansible-galaxy init new_role`
- Installer un rôle depuis le hub Galaxy: https://galaxy.ansible.com
`$ ansible-galaxy install --roles-path ~/roles role_name`
- Utilisation d'un rôle dans un playbook
---
### Sources
- https://github.com/ansible/ansible
- https://en.wikipedia.org/wiki/Ansible_(software)
- https://docs.ansible.com/ansible/latest/index.html
- https://ansible.goffinet.org/ansible-fondamental/
- https://docs.ansible.com/index.html
---
<section data-background-image="http://i.giphy.com/90F8aUepslB84.gif">
<h2>ANSIBLE !</h2>
</section>
---