Comment utiliser Ansible : Un guide de référence

Introduction

Ansible est un outil moderne de gestion de configuration qui facilite la tâche de configuration et de maintenance des serveurs distants.

Ce guide au format aide-mémoire fournit une référence rapide aux commandes et pratiques couramment utilisées lors de l’utilisation d’Ansible. Pour un aperçu d’Ansible et comment l’installer et le configurer, veuillez consulter notre guide sur Comment Installer et Configurer Ansible sur Ubuntu 20.04.

Comment Utiliser Ce Guide :

  • Ce guide est au format aide-mémoire avec des extraits de commandes en ligne autonomes.
  • Accédez à n’importe quelle section qui est pertinente pour la tâche que vous essayez d’accomplir.
  • Lorsque vous voyez texte en surbrillance dans les commandes de ce guide, gardez à l’esprit que ce texte devrait se référer aux hôtes, noms d’utilisateur et adresses IP de votre propre inventaire.

Glossaire Ansible

Les termes spécifiques à Ansible suivants sont largement utilisés tout au long de ce guide :

  • Machine / Noeud de Contrôle : un système où Ansible est installé et configuré pour se connecter et exécuter des commandes sur les nœuds.
  • Nœud : un serveur contrôlé par Ansible.
  • Fichier d’inventaire: un fichier qui contient des informations sur les serveurs contrôlés par Ansible, généralement situé à /etc/ansible/hosts.
  • Playbook: un fichier contenant une série de tâches à exécuter sur un serveur distant.
  • Rôle: une collection de playbooks et d’autres fichiers pertinents pour un objectif tel que l’installation d’un serveur web.
  • Play: une exécution complète d’Ansible. Un play peut contenir plusieurs playbooks et rôles, inclus à partir d’un seul playbook qui sert de point d’entrée.

Si vous souhaitez un exemple de ces commandes en pratique, consultez notre guide sur Comment utiliser Ansible pour automatiser la configuration initiale du serveur sur Ubuntu 20.04. Vous aurez besoin d’au moins un serveur distant à utiliser comme nœud.

Test de la connectivité avec les nœuds

Pour tester si Ansible est capable de se connecter et d’exécuter des commandes et des playbooks sur vos nœuds, vous pouvez utiliser la commande suivante :

  1. ansible all -m ping

Le module ping testera si vous disposez de crédentials valides pour vous connecter aux nœuds définis dans votre fichier d’inventaire, en plus de tester si Ansible est capable d’exécuter des scripts Python sur le serveur distant. Une réponse de pong signifie qu’Ansible est prêt à exécuter des commandes et des playbooks sur ce nœud.

Connexion en tant qu’utilisateur différent

Par défaut, Ansible essaie de se connecter aux nœuds en tant qu’utilisateur système actuel, en utilisant sa paire de clés SSH correspondante. Pour vous connecter en tant qu’utilisateur différent, ajoutez la commande avec le drapeau -u suivi du nom de l’utilisateur souhaité :

  1. ansible all -m ping -u sammy

La même chose est valable pour ansible-playbook :

  1. ansible-playbook myplaybook.yml -u sammy

Utilisation d’une clé SSH personnalisée

Si vous utilisez une clé SSH personnalisée pour vous connecter aux serveurs distants, vous pouvez la fournir au moment de l’exécution avec l’option --private-key :

  1. ansible all -m ping --private-key=~/.ssh/custom_id

Cette option est également valable pour ansible-playbook :

  1. ansible-playbook myplaybook.yml --private-key=~/.ssh/custom_id

Utilisation de l’authentification basée sur un mot de passe

Si vous devez utiliser une authentification basée sur un mot de passe pour vous connecter aux nœuds, vous devez ajouter l’option --ask-pass à votre commande Ansible.

Cela fera en sorte qu’Ansible vous demande le mot de passe de l’utilisateur sur le serveur distant auquel vous essayez de vous connecter :

  1. ansible all -m ping --ask-pass

Cette option est également valide pour ansible-playbook :

  1. ansible-playbook myplaybook.yml --ask-pass

Fournir le mot de passe sudo

Si l’utilisateur distant doit fournir un mot de passe pour exécuter des commandes sudo, vous pouvez inclure l’option --ask-become-pass dans votre commande Ansible. Cela vous demandera de fournir le mot de passe sudo de l’utilisateur distant :

  1. ansible all -m ping --ask-become-pass

Cette option est également valide pour ansible-playbook :

  1. ansible-playbook myplaybook.yml --ask-become-pass

Utilisation d’un fichier d’inventaire personnalisé

Le fichier d’inventaire par défaut se trouve généralement à /etc/ansible/hosts, mais vous pouvez également utiliser l’option -i pour pointer vers des fichiers d’inventaire personnalisés lors de l’exécution de commandes et de playbooks Ansible. Ansible prend également en charge les scripts d’inventaire pour la construction de fichiers d’inventaire dynamiques, lorsque votre inventaire fluctue, avec des serveurs créés et détruits fréquemment. Les fichiers d’inventaire personnalisés sont utiles pour configurer des inventaires par projet qui peuvent être inclus dans des systèmes de contrôle de version tels que Git :

  1. ansible all -m ping -i my_custom_inventory

La même option est valide pour ansible-playbook :

  1. ansible-playbook myplaybook.yml -i my_custom_inventory

Exécution des commandes ad-hoc

Pour exécuter une commande sur un nœud, utilisez l’option -a suivie de la commande que vous souhaitez exécuter, entre guillemets.

Cela exécutera uname -a sur tous les nœuds de votre inventaire :

  1. ansible all -a "uname -a"

Il est également possible d’exécuter des modules Ansible avec l’option -m. La commande suivante installerait le paquet vim sur server1 de votre inventaire :

  1. ansible server1 -m apt -a "name=vim"

Avant d’apporter des modifications à vos nœuds, vous pouvez effectuer une simulation pour prédire comment les serveurs seraient affectés par votre commande. Cela peut être fait en incluant l’option --check :

  1. ansible server1 -m apt -a "name=vim" --check

Exécution des Playbooks

Pour exécuter un playbook et exécuter toutes les tâches qui y sont définies, utilisez la commande ansible-playbook :

  1. ansible-playbook myplaybook.yml

Pour remplacer l’option par défaut hosts dans le playbook et limiter l’exécution à un certain groupe ou hôte, incluez l’option -l dans votre commande :

  1. ansible-playbook -l server1 myplaybook.yml

Obtenir des informations sur une pièce

L’option --list-tasks est utilisée pour lister toutes les tâches qui seraient exécutées par une pièce sans apporter de modifications aux serveurs distants :

  1. ansible-playbook myplaybook.yml --list-tasks

De même, il est possible de lister tous les hôtes qui seraient affectés par une pièce, sans exécuter de tâches sur les serveurs distants :

  1. ansible-playbook myplaybook.yml --list-hosts

Vous pouvez utiliser des tags pour limiter l’exécution d’une pièce. Pour lister tous les tags disponibles dans une pièce, utilisez l’option --list-tags :

  1. ansible-playbook myplaybook.yml --list-tags

Contrôler l’exécution du playbook

Vous pouvez utiliser l’option --start-at-task pour définir un nouveau point d’entrée pour votre playbook. Ansible sautera alors tout ce qui précède la tâche spécifiée, exécutant le reste de la pièce à partir de ce point :

  1. ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"

Pour n’exécuter que les tâches associées à des tags spécifiques, vous pouvez utiliser l’option --tags. Par exemple, si vous souhaitez uniquement exécuter les tâches taguées comme nginx ou mysql, vous pouvez utiliser :

  1. ansible-playbook myplaybook.yml --tags=mysql,nginx

Si vous souhaitez ignorer toutes les tâches qui se trouvent sous des balises spécifiques, utilisez --skip-tags. La commande suivante exécuterait myplaybook.yml, en sautant toutes les tâches étiquetées comme mysql:

  1. ansible-playbook myplaybook.yml --skip-tags=mysql

Utiliser Ansible Vault pour stocker des données sensibles

Si vos playbooks Ansible traitent des données sensibles telles que des mots de passe, des clés API et des identifiants, il est important de garder ces données sécurisées en utilisant un mécanisme de chiffrement. Ansible fournit ansible-vault pour crypter les fichiers et les variables.

Bien qu’il soit possible de crypter n’importe quel fichier de données Ansible ainsi que des fichiers binaires, il est plus courant d’utiliser ansible-vault pour crypter les fichiers de variables contenant des données sensibles. Après avoir crypté un fichier avec cet outil, vous ne pourrez exécuter, modifier ou afficher son contenu qu’en fournissant le mot de passe correspondant défini lors du premier cryptage du fichier.

Création d’un nouveau fichier chiffré

Vous pouvez créer un nouveau fichier Ansible chiffré avec:

  1. ansible-vault create credentials.yml

Cette commande effectuera les actions suivantes:

  • Tout d’abord, il vous demandera de saisir un nouveau mot de passe. Vous devrez fournir ce mot de passe chaque fois que vous accéderez au contenu du fichier, que ce soit pour l’éditer, le consulter ou simplement exécuter des playbooks ou des commandes utilisant ces valeurs.
  • Ensuite, il ouvrira votre éditeur de ligne de commande par défaut afin que vous puissiez remplir le fichier avec le contenu désiré.
  • Enfin, lorsque vous avez terminé d’éditer, ansible-vault enregistrera le fichier sous forme de données chiffrées.

Chiffrer un fichier Ansible existant

Pour chiffrer un fichier Ansible existant, vous pouvez utiliser la syntaxe suivante :

  1. ansible-vault encrypt credentials.yml

Cela vous demandera un mot de passe que vous devrez saisir chaque fois que vous accéderez au fichier credentials.yml.

Afficher le contenu d’un fichier chiffré

Si vous souhaitez afficher le contenu d’un fichier qui a été précédemment chiffré avec ansible-vault et que vous n’avez pas besoin de modifier son contenu, vous pouvez utiliser :

  1. ansible-vault view credentials.yml

Cela vous demandera de fournir le mot de passe que vous avez sélectionné lorsque vous avez chiffré le fichier pour la première fois avec ansible-vault.

Modification d’un fichier chiffré

Pour modifier le contenu d’un fichier précédemment chiffré avec Ansible Vault, exécutez :

  1. ansible-vault edit credentials.yml

Cela vous invitera à fournir le mot de passe que vous avez choisi lors du premier chiffrement du fichier credentials.yml avec ansible-vault. Après validation du mot de passe, votre éditeur de ligne de commande par défaut s’ouvrira avec le contenu non chiffré du fichier, vous permettant d’apporter vos modifications. Lorsque vous avez terminé, vous pouvez enregistrer et fermer le fichier comme vous le feriez normalement, et les contenus mis à jour seront enregistrés sous forme de données chiffrées.

Déchiffrement des fichiers chiffrés

Si vous souhaitez revenir définitivement à la version non chiffrée d’un fichier précédemment chiffré avec ansible-vault, vous pouvez le faire avec cette syntaxe :

  1. ansible-vault decrypt credentials.yml

Cela vous invitera à fournir le même mot de passe utilisé lors du premier chiffrement du fichier credentials.yml avec ansible-vault. Après validation du mot de passe, le contenu du fichier sera enregistré sur le disque sous forme de données non chiffrées.

Utilisation de plusieurs mots de passe de coffre-fort

Ansible prend en charge plusieurs mots de passe de coffre-fort regroupés par différents identifiants de coffre-fort. Cela est utile si vous souhaitez avoir des mots de passe de coffre-fort dédiés pour différents environnements, tels que les environnements de développement, de test et de production.

Pour créer un nouveau fichier chiffré en utilisant un identifiant de coffre-fort personnalisé, incluez l’option --vault-id ainsi qu’une étiquette et l’emplacement où ansible-vault peut trouver le mot de passe pour ce coffre-fort. L’étiquette peut être n’importe quel identifiant, et l’emplacement peut être soit prompt, ce qui signifie que la commande devrait vous inviter à saisir un mot de passe, soit un chemin valide vers un fichier de mot de passe.

  1. ansible-vault create --vault-id dev@prompt credentials_dev.yml

Cela créera un nouvel identifiant de coffre-fort nommé dev qui utilise prompt comme source de mot de passe. En combinant cette méthode avec des fichiers de variables de groupe, vous pourrez avoir des coffres-forts ansible séparés pour chaque environnement d’application :

  1. ansible-vault create --vault-id prod@prompt credentials_prod.yml

Nous avons utilisé dev et prod comme identifiants de coffre-fort pour montrer comment vous pouvez créer des coffres-forts séparés par environnement, mais vous pouvez créer autant de coffres-forts que vous le souhaitez, et vous pouvez utiliser n’importe quel identifiant de votre choix comme identifiant de coffre-fort.

Maintenant, pour afficher, modifier ou décrypter ces fichiers, vous devrez fournir le même identifiant de coffre-fort et la même source de mot de passe ainsi que la commande ansible-vault:

  1. ansible-vault edit credentials_dev.yml --vault-id dev@prompt

Utilisation d’un fichier de mot de passe

Si vous devez automatiser le processus de provisionnement des serveurs avec Ansible en utilisant un outil tiers, vous aurez besoin d’un moyen de fournir le mot de passe du coffre-fort sans être invité à le saisir. Vous pouvez le faire en utilisant un fichier de mot de passe avec ansible-vault.

A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.

Pour utiliser un fichier de mot de passe avec ansible-vault, vous devez fournir le chemin d’accès à un fichier de mot de passe lors de l’exécution de l’une des commandes de coffre-fort :

  1. ansible-vault create --vault-id dev@path/to/passfile credentials_dev.yml

Ansible ne fait pas de distinction entre le contenu qui a été chiffré en utilisant prompt ou un fichier de mot de passe comme source de mot de passe, tant que le mot de passe d’entrée est le même. En termes pratiques, cela signifie qu’il est acceptable de chiffrer un fichier en utilisant prompt puis d’utiliser ultérieurement un fichier de mot de passe pour stocker le même mot de passe utilisé avec la méthode prompt. L’inverse est également vrai : vous pouvez chiffrer du contenu en utilisant un fichier de mot de passe et utiliser ensuite la méthode prompt, en fournissant le même mot de passe lorsque vous êtes invité par Ansible.

Pour une flexibilité et une sécurité étendues, au lieu d’avoir votre mot de passe de coffre-fort stocké dans un fichier texte brut, vous pouvez utiliser un script Python pour obtenir le mot de passe à partir d’autres sources. Le dépôt officiel Ansible contient quelques exemples de scripts de coffre-fort que vous pouvez utiliser comme référence lors de la création d’un script personnalisé adapté aux besoins particuliers de votre projet.

Exécution d’un playbook avec des données chiffrées via Ansible Vault

Chaque fois que vous exécutez un playbook qui utilise des données précédemment chiffrées via ansible-vault, vous devrez fournir le mot de passe du coffre-fort à votre commande de playbook.

Si vous avez utilisé les options par défaut et la source de mot de passe prompt lors du chiffrement des données utilisées dans ce playbook, vous pouvez utiliser l’option --ask-vault-pass pour que Ansible vous demande le mot de passe :

  1. ansible-playbook myplaybook.yml --ask-vault-pass

Si vous avez utilisé un fichier de mot de passe au lieu de demander le mot de passe, vous devriez utiliser l’option --vault-password-file à la place :

  1. ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py

Si vous utilisez des données chiffrées sous une ID de coffre-fort, vous devrez fournir la même ID de coffre-fort et la source de mot de passe que celle que vous avez utilisée lors du premier chiffrement des données :

  1. ansible-playbook myplaybook.yml --vault-id dev@prompt

Si vous utilisez un fichier de mot de passe avec votre ID de coffre-fort, vous devez fournir l’étiquette suivie du chemin complet vers le fichier de mot de passe comme source de mot de passe :

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py

Si votre jeu de données utilise plusieurs coffres-forts, vous devez fournir un paramètre --vault-id pour chacun d’eux, sans ordre particulier :

  1. ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt

Débogage

Si vous rencontrez des erreurs lors de l’exécution des commandes et des playbooks Ansible, il est conseillé d’augmenter la verbosité de la sortie afin d’obtenir plus d’informations sur le problème. Vous pouvez le faire en incluant l’option -v à la commande :

  1. ansible-playbook myplaybook.yml -v

Si vous avez besoin de plus de détails, vous pouvez utiliser -vvv et cela augmentera la verbosité de la sortie. Si vous ne parvenez pas à vous connecter aux nœuds distants via Ansible, utilisez -vvvv pour obtenir des informations de débogage sur la connexion :

  1. ansible-playbook myplaybook.yml -vvvv

Conclusion

Ce guide couvre certaines des commandes Ansible les plus courantes que vous pouvez utiliser lors de la provision de serveurs, telles que l’exécution de commandes distantes sur vos nœuds et l’exécution de playbooks à l’aide de divers paramètres personnalisés.

Il existe d’autres variations de commandes et d’indicateurs que vous pourriez trouver utiles pour votre flux de travail Ansible. Pour obtenir un aperçu de toutes les options disponibles, vous pouvez utiliser la commande help :

  1. ansible --help

Si vous souhaitez avoir une vue plus complète d’Ansible et de toutes ses commandes et fonctionnalités disponibles, veuillez vous référer à la documentation officielle d’Ansible.

Si vous voulez voir un autre exemple pratique d’utilisation d’Ansible, consultez notre guide sur Comment Utiliser Ansible pour Installer et Configurer Docker sur Ubuntu 20.04.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide