Partie II.1.

Ansible Fondamental

Partie Ansible Fondamental.

    Projet Ansible

    1. Projet Ansible Ansible est une plate-forme logicielle pour la configuration et la gestion des ordinateurs. Le logiciel combine le déploiement de logiciels multi-noeuds, l’exécution des tâches ad-hoc, et la gestion des configurations. Il gère les différents noeuds avec un accès à distance natif (tels que les protocoles SSH ou Remote PowerShell ou encore des APIs natives) et ne nécessite l’installation d’aucun logiciel supplémentaire à distance, avec parallélisation, collecte de métadonnées et gestion des états.

    Solution Ansible

    1. Terminologie Ansible En vue de contrôler des noeuds distants, des utilisateurs lancent des “playbooks” à partir d’un noeud de contrôle grâce à Ansible Engine. Ansible Engine est composé de : Modules Plugins API Inventaire (inventory) Ansible Engine connecte et se pratique de manière différente sur les hôtes terminaux (Linux/Unix et Windows) et les périphériques du réseau. Il s’agit de périphériques dont les missions et la gestion sont bien différentes.

    Installation Ansible

    Ce document se fonde sur la page officielle Ansible Installation Guide 1 Installation via PIP Centos sudo easy_install pip sudo pip install ansible Debian/Ubuntu sudo apt update sudo apt -y install python-pip sudo pip install --upgrade pip sudo pip install ansible sudo apt -y install sshpass En supplément si vous rencontrez cette erreur à l’installation d’Ansible paramiko 2.4.2 has requirement cryptography>=1.5, but you'll have cryptography 1.2.3 which is incompatible. :

    Configuration Ansible

    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 1. Commande ansible-config La commande ansible-config list donne la liste des variables de configuration chargée dans le système de contrôle. Voyez-vous même : ansible-config list 2. Fichier de configuration ansible.cfg On peut changer ces variables de configuration en renseignant un fichier de configuration.

    Binaires Ansible

    Références : Working with Command Line Tools Binaire Description ansible Binaire 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 1.

    Modules Ansible

    Les modules Ansible sont des bouts de codes écrits principalement en Python (mais tout langage supportant les retours JSON sont autorisés) 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. 1. Documentation des modules Certains trouveront la documentation en ligne des modules plus agréable à lire : https://docs.ansible.com/ansible/latest/modules/modules_by_category.html. Mais on obtient le même résultat localement sur la machine de contrôle :

    Format JSON Ansible

    Ansible présente en sortie standard les résultats de ses actions en format JSON. 1. JavaScript Object Notation (JSON) JavaScript Object Notation (JSON) est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Il permet de représenter de l’information structurée comme le permet XML par exemple. Les types de données de base de JSON sont les suivantes : Nombre Chaîne de caractères : une séquence de zéro ou plus de caractères Unicode.

    Format YAML pour Ansible

    Pour Ansible, presque tous les fichiers YAML commencent par une liste. Chaque élément de la liste est une liste de paires clé / valeur, communément appelée “hash” ou “dictionary”. Il est donc nécessaire de savoir écrire des listes et des dictionnaires en YAML.1 On ici trouvera le minimum à connaître pour utiliser Ansible. 1. Début du fichier Tous les fichiers YAML (indépendamment de leur association avec Ansible ou non) peuvent éventuellement commencer par --- et se terminer par .

    Inventaire Ansible

    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”). La page de documentation sur l’inventaire est certainement à consulter : Introduction à l’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 “playbook”. Il est peut être statique, soit défini d’avance ; il peut se créer dynamiquement ou encore être mis à jour dynamiquement.

    Livres De Jeu Ansible

    1. Introduction Un livre de jeux (playbook) est un fichier YAML constitué d’une liste de jeux. Chaque jeu comporte des sections qui définissent de manière obligatoire sa portée en désignant les hôtes ou les groupes d’inventaire (hosts:), et de manière optionnelle des paramètres de connexion, des paramètres d’élévation de privilèges, des variables et différentes actions qui comportent des listes de tâches (tasks:, roles:, handlers:, etc.). Un premier exemple de livre de jeu pourrait être celui-ci :

    Tâches en Blocks Ansible

    Blocks Les blocs permettent le regroupement logique des tâches et la gestion des erreurs dans le jeu. Tout ce que l’on peut appliquer à une tâche unique peut être appliqué au niveau du bloc ce qui facilite également la définition de données ou de directives communes aux tâches. Cela ne signifie pas que la directive affecte le bloc lui-même, mais elle est héritée par les tâches délimitées dans un bloc.

    Actions Locales et Délegation

    Delegation, Rolling Updates, and Local Actions Si vous souhaitez exécuter une tâche sur un hôte en faisant référence à d’autres hôtes, utilisez le mot-clé delegate_to sur une tâche. --- - hosts: webservers serial: 5 tasks: - name: take out of load balancer pool command: /usr/bin/take_out_of_pool {{ inventory_hostname }} delegate_to: 127.0.0.1 - name: actual steps would go here yum: name: acme-web-stack state: latest - name: add back to load balancer pool local_action: command /usr/bin/add_back_to_pool {{ inventory_hostname }} Il existe également une syntaxe abrégée local_action: qui inclut la tâche locale au lieu delegate_to: 127.

    Tags Ansible

    Tags 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. Lorsque vous exécutez un livre de jeu, vous pouvez filtrer les tâches en fonction des “tags” de deux manières: Sur la ligne de commande, avec les options --tags ou --skip-tags Dans les paramètres de configuration Ansible, avec les options TAGS_RUN et TAGS_SKIP Les “tags” peuvent être appliqués à de nombreuses structures dans Ansible :

    Gestion des Erreurs Ansible

    1. Ignorer les tâches en échec Une tâche qui échoue (failed) arrête la lecture du livre de jeu. ignore_errors permet d’outrepasser ce comportement. - name: this will not be counted as a failure command: /bin/false ignore_errors: yes 2. Contrôler l’état changed Annulation du résultat “changed”. Lorsqu’un shell, une commande ou un autre module s’exécute, il indique généralement le statut “changed” selon qu’il pense ou non qu’il affecte l’état de la machine.

    Gestion Connexions Ansible

    - name: "PLAY 1: demo playbook" hosts: localhost connection: local …

    Elevation de Privileges Ansible

    https://docs.ansible.com/ansible/latest/user_guide/become.html - name: "PLAY 1: demo playbook" hosts: localhost remote_user: root become: yes become_user: user become_method: sudo

    Ansible Vault

    Ansible-Vault et Variables and Vaults best practices Il y a certainement beaucoup d’approches pour protéger des variables confidentielles utilisées dans les livres de jeu : Selon un certain niveau de sécurité, on pourra utiliser des variables d’environnement (notamment pour stocker des TOKEN). Chiffrer un fichier de variables secrètes et encoder un mot de passe à chaque usage. Chiffrer la valeur uniquement. … Une autre approche fonctionnelle consiste à placer son mot de passe dans un fichier dans un emplacement protégé avec des droits restreints, en tout cas en dehors du livre de jeu et de dépôt de contrôle de version.

    Import Include Ansible

    1. Inclusions Il est possible d’ “inclure” dans un livre de jeu des fichiers qui comprennent une liste de jeux ou de tâches avec un module include*. Notons que le module include est déprécié depuis la version Ansible 2.4 au profit de include_tasks et import_tasks Le module include_tasks est appelé sur le bon niveau hiérarchique. Un liste de tâches se trouvera sous la directive tasks. Par exemple : - hosts: all tasks: - debug: msg: task1 - name: Include task list in play include_tasks: stuff.

    Roles Ansible-Galaxy

    Ansible Galaxy fait référence au site Web de Galaxy à 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.

    Ansible Tower Awx Ansible

    1. Description 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.