# Ansible
![Logo Ansible](images/logo-ansible.svg)
Antoire Bouhier • Christian Tritten • Alban Berthout
## DevOps
## Infrastructure as Code
## DevOps
* Mouvement qui consiste à promouvoir le dialogue et la collaboration entre les équipes _Dev_ et _Ops_.
* Ensemble de bonnes pratiques et de principes
établis entre :
- les équipes DEV (de développement)
- les équipes OPS (d’exploitations)
* L'objectif de DevOps est de _fluidifier le processus de déploiement_ d'une application.
## Les principaux axes du DevOps
1. Améliorer la communication
Organisation • Collaboration • Partage d'outils communs • Conférences • Réunions
2. Accepter et banaliser les erreurs
Droit à l'erreur • Responsabilité partagée
3. Mettre en prod le plus souvent possible
Robustesse • Confiance
4. Automatiser tout ce qui peut l'être
Tests • Cloud • Déploiements • Configuration • Chaos monkey
5. Récolter des métriques et indicateurs
dans une optique d'amélioration continue
## Le champ d'application du DevOps
![devops](images/ci-vs-cd-devops-difference.jpg)
## Automatisation
Traiter de manière automatique les opérations
* de contrôle,
* de régulation,
* d’administration,
avec peu ou pas d’intervention humaine.
## Intérêt de l'automatisation
* Réduire la complexité
* Réduire les possibilités d’erreurs humaine
* Améliorer les performance d’un système
* Augmenter la productivité et l’innovation
* Améliorer la robustesse, l’agilité du déploiement
* Réduire le TTM d’une application
## Infrastructure As Code
* L'infrastructure cible peut-être décrite dans des fichiers de description à l'aide d'une syntaxe spécifique.
* Il devient alors possible de gérer et de versionner chaque modification apportée à l'infrastructure.
* Construire, reconstruire, modifier ou dupliquer une infrastructure s'en trouve d'autant simplifié.
* Outils : Terraform, Ansible, Puppet, Docker, Kubernetes...
## Les outils de gestion de configuration
* Permettent de contrôler l'ensemble des modifications apportées sur l’infrastructure d’une entreprise.
* Assurent que cette infrastructure est configurée selon les bonnes spécifications.
* Évitent l'apparition de trop grandes variations de configuration entre les serveurs.
## Quelques outils
- CFEngine (1993)
- Puppet (2005)
- Chef (2009)
- Ansible (2012)
## Ansible
* Logiciel libre (GPL-3.0)
* Initié en 2012
- Version 1.0 = 2013
- Version actuelle = 2.10 (2020), 2.9 pour Red Hat subscribers
* Développé en Python
[https://github.com/ansible/ansible](https://github.com/ansible/ansible)
* Forte communauté d'utilisateurs
* Ansible racheté par Red Hat en octobre 2015
* Red Hat racheté par IBM en octobre 2018
* Ansible est un moteur d'automatisation permettant :
- le provisionnement de logiciel,
- la gestion de la configuration.
* Pas d'agent
- utilise _SSH_ sur __Linux/Unix__
- utilise _WinRM_ sur __Windows__
* Mode _Push_
Peut aussi fonctionner en _Pull_ (sur cibles Linux uniquement)
### Cibles Linux
* La plupart des systèmes Linux sont supportés.
* Connexion par SSH.
* Pré-requis sur les machines cibles :
- SSH server
- Python 2.7 ou 3.5
### Cibles Windows
* Desktop :
Windows 7, 8.1, 10
* Server :
Windows Server 2008, 2008 R2, 2012, 2012 R2, 2016, 2019
* Connexion par WinRM.
* Pré-requis sur les machines cibles :
- PowerShell 3.0 ou +
- .NET 4.0 ou +
- Un WinRM listener doit être créé et activé.
### Documentation pour Windows
https://docs.ansible.com/ansible/latest/user_guide/windows.html
### Liste des modules pour Windows
https://docs.ansible.com/ansible/2.9/modules/list_of_windows_modules.html
https://docs.ansible.com/ansible/latest/collections/ansible/windows/index.html
### Pourquoi utiliser Ansible ?
* Maîtrise des actions exécutées sur les machines cibles.
* Moins d'erreurs qu'avec des actions manuelles.
* Simple à mettre en oeuvre.
* Courbe d'apprentissage rapide.
* Syntaxe déclarative (pas de scripting).
* Libère les Ops des tâches répétitives.
### Sans outil de gestion de Configuration
![Schéma connexion sans Ansible](images/manual-deployment-without-ansible.png)
### Avec Ansible
![Schéma connexion avec Ansible](images/ansible-ad-hoc-deployment-workflow.png)