Comment installer et configurer Ansible sur Ubuntu 18.04

introduction

Les systèmes de gestion de la configuration sont conçus pour faciliter le contrôle d'un grand nombre de serveurs aux administrateurs et aux équipes d'exploitation. 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 systèmes de gestion de la configuration courants disponibles pour les systèmes Linux, tels que Chef et Puppet, ils sont souvent plus complexes que beaucoup de gens le souhaitent ou le souhaitent. Ansible est une excellente alternative à ces options car il nécessite une surcharge beaucoup plus petite pour démarrer.

Dans ce guide, nous expliquerons comment installer Ansible sur un serveur Ubuntu 18.04 et passer en revue quelques notions de base sur l’utilisation du logiciel.

Comment fonctionne Ansible?

Ansible fonctionne en configurant les ordinateurs clients à partir d'un ordinateur sur lequel les composants Ansible sont installés et configurés.

Il communique via des canaux SSH normaux pour extraire des informations de machines distantes, émettre des commandes et copier des fichiers. C'est pourquoi un système Ansible ne nécessite l'installation d'aucun logiciel supplémentaire sur les ordinateurs clients.

C'est une des façons qu'Ansible simplifie l'administration des serveurs. Tout serveur disposant d’un port SSH exposé peut être placé sous l’ombrage de la configuration d’Ansible, quel que soit son stade de vie. Cela signifie que tout ordinateur que vous pouvez administrer via SSH, vous pouvez également administrer via Ansible.

Ansible adopte une approche modulaire, facilitant l’utilisation des fonctionnalités du système principal pour traiter des scénarios spécifiques. Les modules peuvent être écrits dans n'importe quelle langue et communiquer en JSON standard.

Les fichiers de configuration sont principalement écrits au format de sérialisation YAML en raison de leur nature expressive et de leur similitude avec les langages de balisage courants. Ansible peut interagir avec les hôtes via des outils de ligne de commande ou ses scripts de configuration, appelés Playbooks.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • Deux serveurs Ubuntu 18.04 ou plus. L'un d'eux sera utilisé comme votreAnsible server, tandis que le reste sera utilisé comme votreAnsible hosts. Chacun doit avoir un utilisateur non -root avec les privilègessudo et un pare-feu de base configuré. Vous pouvez configurer cela en suivant nosInitial Server Setup Guide for Ubuntu 18.04. Veuillez noter que les exemples de ce guide spécifient trois hôtes Ansible, mais que les commandes et les configurations présentées peuvent être ajustées pour un nombre quelconque de clients.

  • Clés SSH générées pour l'utilisateur non -root sur votre serveur Ansible. Pour ce faire, suivez l'étape 1 de notre guide surHow to Set Up SSH Keys on Ubuntu 18.04. Pour les besoins de ce didacticiel, vous pouvez enregistrer la paire de clés à l'emplacement par défaut (~/.ssh/id_rsa) et vous n'avez pas besoin de la protéger par mot de passe.

[[step-1 -—- Installing-ansible]] == Étape 1 - Installation d'Ansible

Pour commencer à utiliser Ansible comme moyen de gestion de vos divers serveurs, vous devez installer le logiciel Ansible sur au moins une machine.

Pour obtenir la dernière version d’Ansible pour Ubuntu, vous pouvez ajouter le PPA (archive de paquetage personnel) du projet à votre système. Avant de faire cela, cependant, vous devez d'abord vous assurer que le packagesoftware-properties-common est installé. Ce logiciel facilitera la gestion de ce référentiel logiciel ainsi que d’autres référentiels logiciels indépendants:

sudo apt update
sudo apt install software-properties-common

Ajoutez ensuite le PPA Ansible en tapant la commande suivante:

sudo apt-add-repository ppa:ansible/ansible

Appuyez surENTER pour accepter l'ajout de PPA.

Ensuite, actualisez à nouveau l’index de paquet de votre système afin qu’il soit informé des paquets disponibles dans le PPA:

sudo apt update

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

sudo apt install ansible

Votre serveur Ansible dispose désormais de tous les logiciels requis pour administrer vos hôtes.

[[step-2 -—- configuring-ssh-access-to-the-ansible-hosts]] == Étape 2 - Configuration de l'accès SSH aux hôtes Ansible

Comme mentionné précédemment, Ansible communique principalement avec les ordinateurs clients via SSH. Bien qu'il soit capable de gérer l'authentification SSH basée sur un mot de passe, l'utilisation de clés SSH peut aider à simplifier les choses.

Sur votre serveur Ansible, utilisez la commandecat pour imprimer le contenu du fichier de clé publique SSH de votre utilisateur non root sur la sortie du terminal:

cat ~/.ssh/id_rsa.pub

Copiez la sortie résultante dans votre presse-papiers, puis ouvrez un nouveau terminal et connectez-vous à l'un de vos hôtes Ansible à l'aide de SSH:

ssh sammy@ansible_host_ip

Basculez vers l'utilisateurroot de l'ordinateur client:

su -

En tant qu'utilisateurroot, ouvrez leauthorized_keys dans le répertoire~/.ssh:

nano ~/.ssh/authorized_keys

Dans le fichier, collez la clé SSH de l’utilisateur de votre serveur Ansible, puis enregistrez le fichier et fermez l’éditeur (appuyez surCTRL + X,Y, puis surENTER). Exécutez ensuite la commandeexit pour revenir à l’utilisateur non -rootde l’hôte:

exit

Enfin, comme Ansible utilise un interpréteur Python situé à/usr/bin/python pour exécuter ses modules, vous devrez installer Python 2 sur l'hôte pour qu'Ansible puisse communiquer avec lui. Exécutez les commandes suivantes pour mettre à jour l’index du package de l’hôte et installer le packagepython:

sudo apt update
sudo apt install python

Ensuite, vous pouvez exécuter à nouveau la commandeexit pour fermer la connexion au client:

exit

Répétez cette procédure pour chaque serveur que vous souhaitez contrôler avec votre serveur Ansible. Ensuite, nous allons configurer le serveur Ansible pour qu'il se connecte à ces hôtes à l'aide du fichierhosts d'Ansible.

[[step-3 -—- setting-up-ansible-hosts]] == Étape 3 - Configuration des hôtes Ansible

Ansible garde une trace de tous les serveurs dont il a connaissance via un fichierhosts. Nous devons d'abord configurer ce fichier avant de pouvoir commencer à communiquer avec nos autres ordinateurs.

Ouvrez le fichier avec les privilègessudo, comme ceci:

sudo nano /etc/ansible/hosts

Dans le fichier, vous verrez un certain nombre d'exemples de configurations qui ont été commentées (avec un# précédant chaque ligne). Ces exemples ne fonctionneront pas pour nous car les hôtes énumérés dans chacun d’eux sont composés. Nous conserverons toutefois ces exemples dans le fichier pour nous aider à configurer si nous voulons implémenter des scénarios plus complexes à l’avenir.

Le fichierhosts est assez flexible et peut être configuré de différentes manières. La syntaxe que nous allons utiliser, cependant, ressemble à ceci:

[group_name]
alias ansible_host=your_server_ip

[.note] #Note: Avec la sortie d'Ansible version 2.0, la variable de configurationansible_host a remplacé la variable d'origine,ansible_ssh_host. Si vous utilisez une ancienne version d'Ansible, vous devez utiliser l'ancienne variable plus longue.
#

Dans cet exemple,group_name est une balise organisationnelle qui vous permet de faire référence à tous les serveurs répertoriés en dessous avec un mot, tandis quealias est juste un nom pour faire référence à un serveur spécifique.

Dans notre scénario, nous imaginons donc disposer de trois serveurs que nous allons contrôler avec Ansible. À ce stade, ces serveurs sont accessibles à partir du serveur Ansible en tapant:

ssh root@ansible_host_ip

Vous ne devriez pas être invité à entrer un mot de passe si vous l'avez configuré correctement. À des fins de démonstration, nous supposerons que les adresses IP de nos hôtes sont203.0.113.1,203.0.113.2 et203.0.113.3. Nous allons configurer cela pour que nous puissions nous référer à ceux-ci individuellement commehost1,host2 ethost3, ou comme un groupe avec le nomservers.

Voici le bloc que nous devons ajouter à notre fichierhosts pour accomplir cela:

/etc/ansible/hosts

[servers]
host1 ansible_host=203.0.113.1
host2 ansible_host=203.0.113.2
host3 ansible_host=203.0.113.3

Les hôtes peuvent être dans plusieurs groupes et les groupes peuvent configurer des paramètres pour tous leurs membres. Essayons ceci maintenant.

Avec nos paramètres actuels, si nous essayions de nous connecter à l'un de ces hôtes avec Ansible, la commande échouerait (en supposant que vous ne fonctionniez pas en tant qu'utilisateur root). C'est parce que votre clé SSH est intégrée pour l'utilisateurroot sur les systèmes distants et Ansible essaiera par défaut de se connecter en tant qu'utilisateur actuel. Une tentative de connexion obtiendra cette erreur:

Outputhost1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

Sur le serveur Ansible, nous utilisons un utilisateur appelésammy. Ansible essaiera de se connecter à chaque hôte avecssh sammy@server. Cela ne fonctionnera pas si l'utilisateur desammy n'est pas non plus sur le système distant.

Nous pouvons créer un fichier qui indique à tous les serveurs du groupe «serveurs» de se connecter en tant qu'utilisateurroot.

Pour ce faire, nous allons créer un répertoire dans la structure de configuration Ansible appelégroup_vars. Dans ce dossier, nous pouvons créer des fichiers au format YAML pour chaque groupe que nous voulons configurer:

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

Les fichiers YAML commencent par «-», alors assurez-vous de ne pas oublier cette partie.

/etc/ansible/group_vars/servers

---
ansible_user: root

[.note] #Note: Semblable à la variableansible_host,ansible_user a remplacé la variableansible_ssh_user avec la version 2.0. Si vous utilisez une version antérieure d'Ansible à 2.0, veillez à utiliser l'ancienne variable plus longue.
#

Enregistrez et fermez ce fichier lorsque vous avez terminé.

Si vous souhaitez spécifier des détails de configuration pour chaque serveur, quelle que soit l'association de groupe, vous pouvez placer ces détails dans un fichier à/etc/ansible/group_vars/all. Les hôtes individuels peuvent être configurés en créant des fichiers nommés d'après leur alias dans un répertoire à/etc/ansible/host_vars.

[[step-4 -—- using-simple-ansible-commands]] == Étape 4 - Utilisation de simples commandes Ansible

Maintenant que nos hôtes sont configurés et que suffisamment de détails de configuration nous permettent de nous connecter avec succès à nos hôtes, nous pouvons essayer notre toute première commande.

Envoyez une requête ping à tous les serveurs que vous avez configurés en tapant:

ansible -m ping all

Sortie Ping

host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Il s'agit d'un test de base permettant de s'assurer que Ansible est connecté à tous ses hôtes.

Leall signifie tous les hôtes. Nous pourrions tout aussi facilement spécifier un groupe:

ansible -m ping servers

Nous pourrions également spécifier un hôte individuel:

ansible -m ping host1

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

ansible -m ping host1:host2

La partie-m ping de la commande est une instruction à Ansible d'utiliser le module «ping». Ce sont essentiellement des commandes que vous pouvez exécuter sur vos hôtes distants. Le module ping fonctionne de plusieurs manières comme l'utilitaire normalping sous Linux, mais à la place, il vérifie la connectivité Ansible.

Le module ping ne prend pas vraiment d'argument, mais nous pouvons essayer une autre commande pour voir comment cela fonctionne. Nous passons des arguments dans un script en tapant-a.

Le module "shell" nous permet d’envoyer une commande de terminal à l’hôte distant et de récupérer les résultats. Par exemple, pour connaître l'utilisation de la mémoire sur notre machine hôte1, nous pourrions utiliser:

ansible -m shell -a 'free -m' host1

Sortie Shell

host1 | SUCCESS | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3954        227       3726          0         14         93
-/+ buffers/cache:        119       3834
Swap:            0          0          0

Avec cela, votre serveur Ansible est configuré et vous pouvez communiquer et contrôler avec succès vos hôtes.

Conclusion

Dans ce tutoriel, nous avons configuré Ansible et vérifié qu'il peut communiquer avec chaque hôte. Nous avons également utilisé la commandeansible pour exécuter des tâches simples à distance.

Bien que cela soit utile, nous n'avons pas couvert la fonctionnalité la plus puissante de Ansible dans cet article: les livres de lecture. Ansible Playbooks constitue un moyen simple et puissant de gérer les configurations de serveur et les déploiements sur plusieurs machines. Pour une introduction aux Playbooks, consultezthis guide. De plus, nous vous encourageons à consulter lesofficial Ansible documentation pour en savoir plus sur l'outil.