# 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)