Partie II.

Ansible Fondamental

Cette partie du support de formation intitulée “Ansible Fondamental” a pour principal objet la gestion de noeuds Linux qui supportent différents types d’applications OpenSource. Le document suit le cahier des charges des formations officielles Red Hat (Voyez le document Programmes de formation Ansible).

Objectifs du support de formation

Le support de cours poursuit les objectifs suivants :

  1. Comprendre les composants de base d’Ansible
    • Inventaires
    • Modules
    • Variables
    • “Facts”
    • Jeux
    • Playbooks
    • Fichiers de configuration
  2. Exécuter des commandes ad-hoc Ansible
  3. Utiliser des inventaires statiques et dynamiques pour définir des groupes d’hôtes
  4. Utiliser un script d’inventaire dynamique existant
  5. Créez des jeux et des playbooks Ansible
    • Savoir travailler avec les modules Ansible d’usage courant
    • Utiliser des variables pour récupérer les résultats de l’exécution d’une commande
    • Utiliser les conditions (“conditionals”) pour contrôler l’exécution de la lecture
    • Configurer la gestion des erreurs
    • Créer des playbooks pour configurer les systèmes dans un état spécifié
    • Exécuter sélectivement des tâches spécifiques dans des playbooks à l’aide de balises (“tags”)
  6. Créer et utiliser des modèles pour créer des fichiers de configuration personnalisés
  7. Travailler avec des variables et des “Facts” Ansibles
  8. Créer et travailler avec les rôles
  9. Télécharger des rôles depuis Ansible Galaxy et les utiliser
  10. Gérer le parallélisme
  11. Utilisez Ansible Vault dans les playbooks pour protéger les données sensibles
  12. Installer Ansible Tower et l’utiliser pour gérer les systèmes
  13. Utiliser la documentation fournie pour rechercher des informations spécifiques sur les modules et commandes Ansible
  14. Installer Vagrant ou Docker et les utiliser pour tester des playbooks

Environnement de lab

L’auteur suggère d’utiliser sa solution https://github.com/goffinet/ansible-interactive-tutorial.

    Projet Ansible

    Ce document est une description du projet Ansible à lire en regard du document de présentation sur l'Infrastructure as Code.

    Solution Ansible

    Ce document décrit la terminologie et les composants Ansible. On tentera ici de comprendre de manière sommaire les composants de base d'Ansible tels que les connexions selon les cibles, les inventaires, les modules, le mode ad-hoc, les variables, les Facts, les jeux, les playbooks ou livres de jeux, les fichiers de configuration YAML et INI, les sorties JSON et les modèles Jinja2, les rôles, Ansible Tower, l'idempotence.

    Installation Ansible

    Ce document indique les procédures d'installation de Ansible sur une machine de contrôle Red Hat, CentOS, Fedora, Debian, Ubuntu, via PIP ou encore sous Windows WSL.

    Configuration Ansible

    Ce document propose d'examiner les principales options de configuration de Ansible sur le noeud de contrôle. Son architecture son agent laisse le soin à chacun de configurer finement et personnellement le comportement par défaut de la solution. Le comportement d'Ansible peut être influencé de différentes manières : en configurant des variables d'environnement, en passant directement les paramètres sur la ligne de commande `ansible` ou `ansible-playbook`, en définissant un fichier de configuration `ansible.cfg`

    Exécutables Ansible

    Ansible vient avec plusieurs programmes. ansible est le programme initial pour l’exécution de commandes ad-hoc, ansible-config Vérifie la configuration courante d’Ansible, ansible-inventory Liste les informations de l’inventaire en format JSON ou YAML, ansible-doc Permet de consulter la documentation hors-ligne, ansible-playbook Permet d’exécuter des livres de jeu, ansible-vault Permet de chiffrer les fichiers qui contiennent des données sensibles, ansible-galaxy Permet de gérer des rôles sur Ansible galaxy, ansible-console Offre une console interactive REPL pour l’exécution de tâches Ad-Hoc, ansible-pull ansible-pull est un petit script qui prend ses informations de configuration d’un repo git et qui exécute un livre de jeu Ansible sur ce contenu, ansible-test Utilitaire de test

    Formats JSON et YAML Ansible

    Ansible présente en sortie standard les résultats de ses actions en format JSON. On présentera ici le format JSON et son traitement avec l'outil jq. Ansible utilise le format YAML pour ses fichiers de données statiques pour la facilité d'usage. Enfin, les variables sont présentées dans Ansible grâce aux modèles Jinja2.

    Inventaire Ansible

    Une inventaire peut être une collection d'hôtes définis dans un fichier plat ou un script dynamique (qui interroge un CMDB par exemple) qui génère une liste de périphériques à utiliser dans les livres de jeux. Il est peut être statique, soit défini d'avance ; il peut se créer dynamiquement ou encore être mis à jour dynamiquement. La portée d'un jeu (play) au sein du livre de jeu, le playbook, est limitée aux groupes d'hôtes définis dans l'inventaire (inventory).

    Modules Ansible

    Ce document poursuite l'objectif d'expliquer le concept, le rôle, la manipulation et les codes de retour des modules. Le développement de modules devrait faire l'objet d'un document spécifique. Les modules Ansible sont des bouts de codes écrits principalement en Python (mais tout langage supportant les retours JSON est autorisé) pour modifier l'état d'une propriété d'un hôte. Les modules sont invoqués par l'exécution de tâches soit directement dans la ligne de commande `ansible` ou dans des livres de jeu avec la commande `ansible-playbook`.

    Livres de Jeu Ansible

    Synthèse sur les livres de jeu.

    Variables, Facts, Conditions et Boucles

    Jouer avec les facts, les variables, les conditions et les boucles.

    Roles Ansible-Galaxy

    Il est possible d' inclure ou d'importer dans un livre de jeu des fichiers qui comprennent une liste de jeux ou de tâches. L'importation est statique et l'inclusion est dynamique. Ansible Galaxy fait référence au site Web de Galaxy https://galaxy.ansible.com à partir duquel les utilisateurs peuvent partager des rôles. Il fait aussi référence à un outil en ligne de commande pour l’installation, la création et la gestion de rôles à partir de dépôts git. Les rôles permettent de charger automatiquement certains fichiers vars_files, tasks et handlers en fonction d'une structure de fichier connue. Le regroupement de contenu par rôles permet également de les partager facilement avec d'autres utilisateurs. En bref, une organisation en rôle n'est jamais qu'une manière d'abstraire son livre de jeu. Toutes les règles de conception d'un livre de jeu sont respectées sur base d'une structure de fichiers et de dossiers connue.

    Tags Ansible

    Si vous avez un grand livre de jeu, il peut s'avérer utile de ne pouvoir en exécuter qu'une partie spécifique plutôt que de tout lire dans le livre. Ansible prend en charge un attribut tags: pour cette raison.

    Gestion des Erreurs Ansible

    Gestion des Erreurs Ansible : Ignorer les tâches en échec, Contrôler l'état changed, Contrôler l'état failed, Tâche en échec et handlers, Module fail

    Gestion Connexions Ansible

    Gestion des connexions dans Ansible.

    Ansible Vault

    Ansible-vault est un outil intégré à Ansible qui permet de chiffrer les fichiers qui contiennent des données sensibles.

    Inventaire dynamique Ansible

    Inventaire dynamique Ansible

    Ansible Tower AWX Ansible

    Ansible Tower est Ansible au niveau de l'entreprise. Il s’agit d’une solution Web permettant de gérer une organisation avec une interface utilisateur très simple qui fournit un tableau de bord avec des résumés de l’état de tous les hôtes, qui permet des déploiements rapides et surveille toutes les configurations. Tower permet de partager les informations d'identification SSH sans les exposer, de consigner tous les travaux, de gérer graphiquement les inventaires et de les synchroniser avec un large éventail de fournisseurs clouds.

    Glossaire Ansible

    https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html Action Une action fait partie d’une tâche qui précise les modules à exécuter et les arguments à transmettre à ce module. Chaque tâche ne peut avoir qu’une seule action, mais elle peut aussi avoir d’autres paramètres. Ad Hoc Désigne l’exécution d’Ansible pour exécuter une commande rapide, en utilisant /usr/bin/ansible, plutôt que le langage d’orchestration, qui est /usr/bin/ansible-playbook. Un exemple de commande ad hoc pourrait être le redémarrage de 50 machines dans votre infrastructure.