Tutorial

Comment installer et configurer Ansible sur Ubuntu 20.04

UbuntuConfiguration ManagementAnsibleUbuntu 20.04

Introduction

Les systèmes de gestion de la 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 point central.

Bien qu'il existe de nombreux outils populaires de gestion de la configuration pour les systèmes Linux, tels que Chef et Puppet, ceux-ci sont souvent plus complexes que ce que beaucoup de gens 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 les fichiers YAML pour définir les détails de l'approvisionnement.

Dans ce guide, nous verrons comment installer Ansible sur un serveur Ubuntu 20.04 et nous passerons en revue quelques bases de l'utilisation de ce logiciel. Pour un aperçu plus détaillé d'Ansible en tant qu'outil de gestion de la configuration, veuillez vous reporter à la section Introduction à la gestion de la configuration avec Ansible.

Conditions préalables

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 sur 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 a :

    • un utlisateur non-root avec 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 noeud de contrôle Ansible, vous devez suivre chaque étape de ce guide. Cela configurera un pare-feu sur le serveur avec ufw et permettra un accès externe à votre profil d'utilisateur non root, deux éléments qui contribueront à la sécurité du 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 la configuration des clés SSH sur Ubuntu 20.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 Ubuntu 20.04 distants. Assurez-vous que chaque hôte Ansible possède un :

    • La clé publique SSH du nœud de contrôle Ansible s'ajoute aux authorized_keys d'un utilisateur du 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 mettre en place les clés SSH sur Ubuntu 20.04.

Étape 1 — Installation d'Ansible

Pour commencer à utiliser Ansible comme moyen de gestion de votre infrastructure de serveur, vous devez installer le logiciel Ansible sur la machine qui servira de nœud de contrôle Ansible. Nous utiliserons pour cela les dépôts Ubuntu par défaut.

Tout d'abord, rafraîchissez l'index des packages de votre système avec :

  • sudo apt update

Suite à cette mise à jour, vous pouvez installer le logiciel Ansible avec :

  • sudo apt install ansible

Appuyez sur Y lorsque vous êtes invité à confirmer l'installation.

Votre nœud de contrôle Ansible dispose maintenant de tous les logiciels nécessaires pour administrer vos hôtes. Ensuite, nous verrons comment mettre en place un fichier d'inventaire, afin qu'Ansible puisse communiquer avec vos nœuds gérés.

Étape 2 — Configuration du fichier d'inventaire

Le fichier d'inventaire contient des informations sur les hôtes que vous gérerez avec Ansible. Vous pouvez inclure entre un et 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 ne seront valables que pour des hôtes ou des groupes spécifiques, afin d'être utilisées dans les modèles de développement et les modèles. Certaines variables peuvent également affecter la façon dont un modèle de développement est exécuté, comme la variable ansible_python_interpreter que nous allons voir 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/hosts

Note : bien qu'Ansible crée généralement un fichier d'inventaire par défaut à l'adresse etc/ansible/hosts, vous êtes libre de créer des fichiers d'inventaire à l'endroit qui répond le mieux à vos besoins. Dans ce cas, vous devrez fournir le chemin d'accès à votre fichier d'inventaire personnalisé avec le paramètre -i lors de l'exécution des commandes Ansible et des modèles de développement. L'utilisation de fichiers d'inventaire par projet est une bonne pratique pour minimiser le risque de lancer un modèle de développement sur le mauvais groupe de serveurs.

Le fichier d'inventaire par défaut fourni par l'installation Ansible contient un certain nombre d'exemples que vous pouvez utiliser comme références pour établir 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.

/etc/ansible/hosts
[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 d'hôte ansible_python_interpreter qui sera valable pour tous les hôtes inclus dans cet inventaire. Ce paramètre permet de s'assurer que le serveur distant utilise l’ exécutable /usr/bin/python3 Python 3 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 ENTER 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 de serveur telle que définie dans votre fichier d'inventaire :

Output
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 — Test de connexion

Après avoir configuré le fichier d'inventaire pour inclure vos serveurs, il est temps de vérifier si Ansible est capable de se connecter à ces serveurs et d'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à créé un utilisateur sudo régulier, vous êtes encouragé à utiliser ce compte à la place.

Vous pouvez utiliser l'argument -u pour spécifier l'utilisateur du système à distance. Lorsqu'il n'est pas fourni, Ansible essaiera de se connecter en tant qu'utilisateur actuel de votre système sur le nœud de contrôle.

Depuis votre machine locale ou votre nœud de contrôle Ansible, exécutez :

  • ansible all -m ping -u root

Cette commande utilisera le module ping intégré 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 les modules Ansible en utilisant Python.

Vous devriez obtenir un résultat similaire à ceci :

Output
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 êtes invité, tapez yes et appuyez ensuite sur ENTRÉE pour confirmer. 

Une fois que vous obtenez une réponse « pong » d'un hôte, cela signifie que vous êtes prêt à exécuter les commandes Ansible et les playbooks sur ce serveur.

Note : si vous ne parvenez pas à obtenir une réponse positive de vos serveurs, consultez notre guide de triche pour plus d'informations sur la manière d'exécuter les commandes Ansible avec différentes options de connexion.

Étape 4 — Exécution des commandes Ad-Hoc (facultatif)

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 modèles de développement sur vos serveurs.

Toute commande que vous exécuteriez normalement sur un serveur distant par SSH peut être exécutée avec Ansible sur les serveurs spécifiés dans votre fichier d'inventaire. A titre d'exemple, vous pouvez vérifier l'utilisation des disques 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 surlignée df -h peut être remplacée par n'importe quelle commande que vous souhaitez.

Vous pouvez également exécuter les modules Ansible via des commandes ad-hoc, comme nous l'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 root

Vous pouvez également cibler des hôtes individuels, ainsi que des groupes et des sous-groupes, lorsque vous exécutez les commandes Ansible. Par exemple, c'est ainsi que vous vérifieriez le uptime de chaque hôte du groupe servers :

  • ansible servers -a "uptime" -u root

Nous pouvons spécifier plusieurs hôtes en les séparant par des points-virgules :

  • ansible server1:server2 -m ping -u root

Pour plus d'informations sur l'utilisation d'Ansible, y compris sur l'exécution de modèles de développement 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 êtes en mesure de vous connecter et de contrôler votre infrastructure à partir d'un contrôleur central Ansible, vous pouvez exécuter n'importe quelle commande ou modèle de développement que vous souhaitez sur ces hôtes.

Pour plus d'informations sur l'utilisation d'Ansible, consultez notre guide des fiches de triche Ansible.

Creative Commons License