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 :
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é :
La même chose est valable pour ansible-playbook
:
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
:
Cette option est également valable pour ansible-playbook
:
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 :
Cette option est également valide pour ansible-playbook
:
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 :
Cette option est également valide pour ansible-playbook
:
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 :
La même option est valide pour ansible-playbook
:
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 :
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 :
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
:
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
:
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 :
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 :
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 :
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
:
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 :
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 :
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
:
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:
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 :
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 :
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 :
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 :
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.
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 :
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
:
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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