Introduction
Les systèmes de gestion de configuration sont conçus pour rationaliser le processus de contrôle de grands nombres de serveurs, pour les administrateurs et les équipes opérationnelles. Ils vous permettent de contrôler de manière automatisée de nombreux systèmes différents à partir d’un emplacement central.
Bien qu’il existe de nombreux outils populaires de gestion de configuration disponibles pour les systèmes Linux, tels que Chef et Puppet, ceux-ci sont souvent plus complexes que ce que de nombreuses personnes veulent ou ont besoin. Ansible est une excellente alternative à ces options car il offre une architecture qui ne nécessite pas l’installation de logiciels spéciaux sur les nœuds, utilisant SSH pour exécuter les tâches d’automatisation et des fichiers YAML pour définir les détails de provisionnement.
Dans ce guide, nous discuterons de l’installation d’Ansible sur un serveur Ubuntu 20.04 et passerons en revue quelques notions de base sur l’utilisation de ce logiciel. Pour une vue d’ensemble plus globale d’Ansible en tant qu’outil de gestion de configuration, veuillez vous référer à Une introduction à la gestion de configuration avec Ansible.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin :
-
Un nœud de contrôle Ansible: Le nœud de contrôle Ansible est la machine que nous utiliserons pour nous connecter à et contrôler les hôtes Ansible via SSH. Votre nœud de contrôle Ansible peut être soit votre machine locale, soit un serveur dédié à l’exécution d’Ansible, bien que ce guide suppose que votre nœud de contrôle est un système Ubuntu 20.04. Assurez-vous que le nœud de contrôle dispose de :
- Un utilisateur non-root avec des privilèges sudo. Pour configurer cela, vous pouvez suivre les Étapes 2 et 3 de notre Guide de configuration initiale du serveur pour Ubuntu 20.04. Cependant, veuillez noter que si vous utilisez un serveur distant comme nœud de contrôle Ansible, vous devez suivre chaque étape de ce guide. Ce faisant, vous configurerez un pare-feu sur le serveur avec
ufw
et activerez l’accès externe à votre profil utilisateur non-root, ce qui contribuera à sécuriser le serveur distant. - Une paire de clés SSH associée à cet utilisateur. Pour configurer cela, vous pouvez suivre l’Étape 1 de notre guide sur Comment configurer des clés SSH sur Ubuntu 20.04.
- Un utilisateur non-root avec des privilèges sudo. Pour configurer cela, vous pouvez suivre les Étapes 2 et 3 de notre Guide de configuration initiale du serveur pour Ubuntu 20.04. Cependant, veuillez noter que si vous utilisez un serveur distant comme nœud de contrôle Ansible, vous devez suivre chaque étape de ce guide. Ce faisant, vous configurerez un pare-feu sur le serveur avec
-
Un ou plusieurs hôtes Ansible : Un hôte Ansible est une machine que votre nœud de contrôle Ansible est configuré pour automatiser. Ce guide suppose que vos hôtes Ansible sont des serveurs Ubuntu 20.04 distants. Assurez-vous que chaque hôte Ansible possède :
- La clé publique SSH du nœud de contrôle Ansible ajoutée aux
authorized_keys
d’un utilisateur système. Cet utilisateur peut être root ou un utilisateur normal avec des privilèges sudo. Pour configurer cela, vous pouvez suivre l’étape 2 de Comment configurer des clés SSH sur Ubuntu 20.04.
- La clé publique SSH du nœud de contrôle Ansible ajoutée aux
Étape 1 — Installation d’Ansible
Pour commencer à utiliser Ansible pour gérer votre infrastructure de serveur, vous devez installer le logiciel Ansible sur la machine qui servira de nœud de contrôle Ansible.
Depuis votre nœud de contrôle, exécutez la commande suivante pour inclure le PPA (archive de paquets personnels) officiel du projet dans la liste des sources de votre système:
- sudo apt-add-repository ppa:ansible/ansible
Appuyez sur ENTRÉE
lorsque vous êtes invité à accepter l’ajout du PPA.
Ensuite, actualisez l’index des paquets de votre système pour qu’il soit informé des paquets disponibles dans le PPA nouvellement inclus:
- sudo apt update
Après cette mise à jour, vous pouvez installer le logiciel Ansible avec:
- sudo apt install ansible
Votre nœud de contrôle Ansible dispose désormais de tout le logiciel nécessaire pour administrer vos hôtes. Ensuite, nous verrons comment ajouter vos hôtes au fichier d’inventaire du nœud de contrôle afin de pouvoir les contrôler.
Étape 2 — Configuration du fichier d’inventaire
Le fichier d’inventaire contient des informations sur les hôtes que vous gérez avec Ansible. Vous pouvez inclure de un à plusieurs centaines de serveurs dans votre fichier d’inventaire, et les hôtes peuvent être organisés en groupes et sous-groupes. Le fichier d’inventaire est également souvent utilisé pour définir des variables qui seront valides uniquement pour des hôtes ou des groupes spécifiques, afin d’être utilisées dans les playbooks et les modèles. Certaines variables peuvent également affecter la manière dont un playbook est exécuté, comme la variable « ansible_python_interpreter » que nous verrons dans un instant.
Pour modifier le contenu de votre inventaire Ansible par défaut, ouvrez le fichier « /etc/ansible/hosts » avec l’éditeur de texte de votre choix, sur votre nœud de contrôle Ansible:
- sudo nano /etc/ansible/hosts
Note: Bien qu’Ansible crée généralement un fichier d’inventaire par défaut dans « etc/ansible/hosts », vous êtes libre de créer des fichiers d’inventaire dans n’importe quel emplacement qui convient le mieux à vos besoins. Dans ce cas, vous devrez fournir le chemin vers votre fichier d’inventaire personnalisé avec le paramètre « -i » lors de l’exécution des commandes et des playbooks Ansible. Utiliser des fichiers d’inventaire par projet est une bonne pratique pour minimiser le risque d’exécuter un playbook sur le mauvais groupe de serveurs.
Le fichier d’inventaire par défaut fourni par l’installation d’Ansible contient plusieurs exemples que vous pouvez utiliser comme références pour configurer votre inventaire. L’exemple suivant définit un groupe nommé « [servers] » avec trois serveurs différents, chacun identifié par un alias personnalisé: server1, server2 et server3. Assurez-vous de remplacer les adresses IP mises en évidence par les adresses IP de vos hôtes Ansible.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Le sous-groupe all:vars
définit le paramètre hôte ansible_python_interpreter
qui sera valide pour tous les hôtes inclus dans cet inventaire. Ce paramètre garantit que le serveur distant utilise l’exécutable Python 3 /usr/bin/python3
au lieu de /usr/bin/python
(Python 2.7), qui n’est pas présent dans les versions récentes d’Ubuntu.
Lorsque vous avez terminé, enregistrez et fermez le fichier en appuyant sur CTRL+X
, puis sur Y
et ENTRÉE
pour confirmer vos modifications.
À tout moment où vous souhaitez vérifier votre inventaire, vous pouvez exécuter :
- ansible-inventory --list -y
Vous verrez une sortie similaire à ceci, mais contenant votre propre infrastructure de serveur telle que définie dans votre fichier d’inventaire:
Outputall:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
Maintenant que vous avez configuré votre fichier d’inventaire, vous avez tout ce dont vous avez besoin pour tester la connexion à vos hôtes Ansible.
Étape 3 — Test de Connexion
Après avoir configuré le fichier d’inventaire pour inclure vos serveurs, il est temps de vérifier si Ansible peut se connecter à ces serveurs et exécuter des commandes via SSH.
Pour ce guide, nous utiliserons le compte root Ubuntu car c’est généralement le seul compte disponible par défaut sur les serveurs nouvellement créés. Si vos hôtes Ansible ont déjà un utilisateur sudo régulier créé, vous êtes encouragé à utiliser ce compte à la place.
Vous pouvez utiliser l’argument -u
pour spécifier l’utilisateur système distant. Lorsqu’il n’est pas fourni, Ansible essayera de se connecter en tant qu’utilisateur système actuel sur le nœud de contrôle.
Depuis votre machine locale ou votre nœud de contrôle Ansible, exécutez la commande suivante :
- ansible all -m ping -u root
Cette commande utilisera le module ping
intégré à Ansible pour effectuer un test de connectivité sur tous les nœuds de votre inventaire par défaut, en se connectant en tant que root. Le module ping
testera :
- si les hôtes sont accessibles ;
- si vous disposez de justificatifs SSH valides ;
- si les hôtes sont capables d’exécuter des modules Ansible en utilisant Python.
Vous devriez obtenir une sortie similaire à celle-ci :
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Si c’est la première fois que vous vous connectez à ces serveurs via SSH, on vous demandera de confirmer l’authenticité des hôtes auxquels vous vous connectez via Ansible. Lorsque vous y êtes invité, tapez yes
puis appuyez sur ENTER
pour confirmer.
Une fois que vous recevez une réponse "pong"
d’un hôte, cela signifie que vous êtes prêt à exécuter des commandes et des playbooks Ansible sur ce serveur.
Remarque : Si vous ne parvenez pas à obtenir une réponse réussie de vos serveurs, consultez notre Guide de triche Ansible pour plus d’informations sur la façon d’exécuter des commandes Ansible avec différentes options de connexion.
Étape 4 — Exécution de commandes ad-hoc (optionnel)
Après avoir confirmé que votre nœud de contrôle Ansible est capable de communiquer avec vos hôtes, vous pouvez commencer à exécuter des commandes ad-hoc et des playbooks sur vos serveurs.
Toute commande que vous exécuteriez normalement sur un serveur distant via SSH peut être exécutée avec Ansible sur les serveurs spécifiés dans votre fichier d’inventaire. Par exemple, vous pouvez vérifier l’utilisation du disque sur tous les serveurs avec :
- ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
La commande en surbrillance df -h
peut être remplacée par n’importe quelle commande que vous souhaitez.
Vous pouvez également exécuter des modules Ansible via des commandes ad-hoc, de manière similaire à ce que nous avons fait précédemment avec le module ping
pour tester la connexion. Par exemple, voici comment nous pouvons utiliser le module apt
pour installer la dernière version de vim
sur tous les serveurs de votre inventaire :
- ansible all -m apt -a "name=vim state=latest" -u root
Vous pouvez également cibler des hôtes individuels, ainsi que des groupes et des sous-groupes, lors de l’exécution de commandes Ansible. Par exemple, voici comment vous pouvez vérifier le uptime
de chaque hôte dans le groupe servers
:
- ansible servers -a "uptime" -u root
Nous pouvons spécifier plusieurs hôtes en les séparant par des deux-points :
- ansible server1:server2 -m ping -u root
Pour plus d’informations sur l’utilisation d’Ansible, y compris comment exécuter des playbooks pour automatiser la configuration du serveur, vous pouvez consulter notre Guide de référence Ansible.
Conclusion
Dans ce guide, vous avez installé Ansible et configuré un fichier d’inventaire pour exécuter des commandes ad-hoc à partir d’un nœud de contrôle Ansible.
Une fois que vous avez confirmé que vous pouvez vous connecter et contrôler votre infrastructure à partir d’une machine contrôleur Ansible centrale, vous pouvez exécuter n’importe quelle commande ou playbook désiré sur ces hôtes.
Pour plus d’informations sur l’utilisation d’Ansible, consultez notre Guide de triche Ansible.