Comment installer et configurer Ansible sur Ubuntu 18.04
Vous n'utilisez pas Ubuntu 18.04 ?Choisissez une autre version ou distribution.
Introduction
Les systèmes de gestion de configuration sont conçus pour rationaliser le processus de contrôle d'un grand nombre de serveurs, pour les administrateurs et les équipes opérationnelles. Ils vous permettent de contrôler de nombreux systèmes différents de manière automatisée à 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 beaucoup de personnes veulent ou ont besoin. Ansible est une excellente alternative à ces options car il offre une architecture simple 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 du provisionnement.
Dans ce guide, nous allons expliquer comment installer Ansible sur un serveur Ubuntu 18.04 et passer en revue quelques bases sur l'utilisation de ce logiciel.
Comment fonctionne Ansible ?
Ansible fonctionne en configurant les machines clientes, appelées nœuds gérés, depuis un ordinateur sur lequel les composants Ansible sont installés et configurés, qui est alors appelé le nœud de contrôle Ansible.
Il communique via des canaux SSH normaux pour récupérer des informations à partir des systèmes distants, émettre des commandes et copier des fichiers. Pour cette raison, un système Ansible ne nécessite aucun logiciel supplémentaire à installer sur les ordinateurs clients.
Ceci est une façon dont Ansible simplifie l'administration des serveurs. Tout serveur dont le port SSH est exposé peut être placé sous l'ombrelle de configuration d'Ansible, quel que soit le stade de son cycle de vie. Cela signifie que tout ordinateur que vous pouvez administrer via SSH, vous pouvez également l'administrer via Ansible.
Ansible adopte une approche modulaire, vous permettant d'étendre les fonctionnalités du système principal pour gérer des scénarios spécifiques. Les modules peuvent être écrits dans n'importe quel langage et communiquent en JSON standard.
Les fichiers de configuration sont principalement écrits dans le format de sérialisation de données YAML en raison de sa nature expressive et de sa similitude avec les langages de balisage populaires. Ansible peut interagir avec les hôtes soit via des outils en ligne de commande, soit via ses scripts de configuration, connus sous le nom de Playbooks.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin de :
Un nœud de contrôle Ansible : Le nœud de contrôle Ansible est la machine que nous utiliserons pour nous connecter aux hôtes Ansible et les contrôler via SSH. Votre nœud de contrôle Ansible peut être votre machine locale ou 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 18.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 18.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. Cela configurera un pare-feu sur le serveur avec
ufwet activera l'accès externe à votre profil utilisateur non root, ce qui contribuera à sécuriser le serveur distant.
- 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 18.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. Cela configurera un pare-feu sur le serveur avec
- Une paire de clés SSH associée à cet utilisateur. Pour la configurer, vous pouvez suivre l'Étape 1 de notre guide sur Comment configurer les clés SSH sur Ubuntu 18.04.
Un ou plusieurs hôtes Ansible : Un hôte Ansible est toute machine que votre nœud de contrôle Ansible est configuré pour automatiser. Ce guide suppose que vos hôtes Ansible sont des serveurs distants Ubuntu 18.04. Assurez-vous que chaque hôte Ansible dispose de :
- La clé publique SSH du nœud de contrôle Ansible est ajoutée au
authorized_keysd'un utilisateur système. Cet utilisateur peut être soit root, soit un utilisateur régulier avec des privilèges sudo. Pour configurer cela, vous pouvez suivre l'étape 2 de Comment configurer les clés SSH sur Ubuntu 18.04.
Étape 1 — Installer Ansible
Pour commencer à utiliser Ansible comme moyen de gérer votre infrastructure 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 personnelle) officiel du projet dans la liste des sources de votre système :
sudo apt-add-repository ppa:ansible/ansibleAppuyez sur ENTRÉE lorsque vous y êtes invité pour accepter l'ajout du PPA.
Ensuite, actualisez l'index des paquets de votre système afin qu'il soit informé des paquets disponibles dans le PPA nouvellement ajouté :
sudo apt updateSuite à cette mise à jour, vous pouvez installer le logiciel Ansible avec :
sudo apt install ansibleVotre nœud de contrôle Ansible dispose maintenant de tous les logiciels nécessaires pour administrer vos hôtes. Ensuite, nous allons expliquer comment ajouter vos hôtes au fichier d'inventaire du nœud de contrôle afin qu'il puisse les contrôler.
Étape 2 — Configuration du fichier d'inventaire
Le fichier d'inventaire contient des informations sur les hôtes que vous allez gérer avec Ansible. Vous pouvez inclure dans votre fichier d'inventaire de un à plusieurs centaines de serveurs, 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 ne seront valables que pour des hôtes ou groupes spécifiques, afin d'être utilisées dans les playbooks et les modèles. Certaines variables peuvent également influencer le fonctionnement d'un playbook, 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 en utilisant l'éditeur de texte de votre choix, sur votre nœud de contrôle Ansible :
sudo nano /etc/ansible/hostsRemarque : certaines installations d'Ansible ne créeront pas de fichier d'inventaire par défaut. Si le fichier n'existe pas sur votre système, vous pouvez créer un nouveau fichier à /etc/ansible/hosts ou fournir un chemin d'inventaire personnalisé en utilisant le paramètre -i lors de l'exécution des commandes et des playbooks.
Le fichier d'inventaire par défaut fourni par l'installation d'Ansible contient un certain nombre d'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. Veillez à remplacer les 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/python3Le sous-groupe all:vars définit le paramètre d'hôte ansible_python_interpreter qui sera valable 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 sur les versions récentes d'Ubuntu.
Lorsque vous avez terminé, enregistrez et fermez le fichier en appuyant sur CTRL+X puis Y et ENTRÉE pour confirmer vos modifications.
Chaque fois que vous voulez vérifier votre inventaire, vous pouvez exécuter :
ansible-inventory --list -y
Vous verrez une sortie similaire à celle-ci, mais contenant votre propre infrastructure serveur telle que définie dans votre fichier d'inventaire :
all:
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 — Tester la 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 d'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éé, il est recommandé d'utiliser ce compte à la place.
Vous pouvez utiliser l'argument -u pour spécifier l'utilisateur du système distant. Lorsqu'il n'est pas fourni, Ansible tentera de se connecter en tant qu'utilisateur système actuel sur le nœud de contrôle.
Depuis votre machine locale ou le nœud de contrôle Ansible, exécutez :
ansible all -m ping -u rootCette commande utilisera le module intégré ping d’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 avez des identifiants SSH valides ;
- si les hôtes sont capables d'exécuter des modules Ansible en utilisant Python.
Vous devriez obtenir un résultat similaire à ceci :
server1 | 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, il vous sera demandé de confirmer l'authenticité des hôtes auxquels vous vous connectez via Ansible. Lorsque vous y serez invité, tapez yes puis appuyez sur ENTRÉE 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 n'êtes pas en mesure d'obtenir une réponse réussie de vos serveurs, consultez notre Guide de Référence Ansible pour plus d'informations sur la manière 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 rootserver1 | 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 mise en évidence 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 auparavant 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 rootVous 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 vérifieriez le uptime de chaque hôte dans le groupe servers :
ansible servers -a "uptime" -u rootNous pouvons spécifier plusieurs hôtes en les séparant par des deux-points :
ansible server1:server2 -m ping -u rootPour plus d'informations sur la façon d'utiliser Ansible, y compris comment exécuter des playbooks pour automatiser la configuration des serveurs, 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 depuis un nœud de contrôle Ansible.
Une fois que vous avez confirmé que vous pouvez vous connecter et contrôler votre infrastructure depuis une machine de contrôle Ansible centrale, vous pouvez exécuter n'importe quelle commande ou playbook que vous souhaitez sur ces hôtes. Pour les serveurs neufs, le playbook communautaire Initial Server Setup est un bon point de départ. Vous pouvez également apprendre à écrire vos propres playbooks avec notre guide Gestion de Configuration 101 : Écrire des Playbooks Ansible.
Pour plus d'informations sur la façon d'utiliser Ansible, consultez notre guide aide-mémoire Ansible.