Comment installer et configurer Ansible sur Ubuntu 14.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 ses frais généraux sont beaucoup moins importants.

Dans ce guide, nous expliquerons comment installer Ansible sur une machine Ubuntu 14.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 avec des composants Ansible installés et configurés.

Il communique sur des canaux SSH normaux afin de récupérer des informations à partir de machines distantes, d’émettre des commandes et de 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.

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 dans le format de sérialisation de données YAML en raison de son caractère expressif et de sa similitude avec les langages de balisage courants. Ansible peut interagir avec les clients via des outils de ligne de commande ou ses scripts de configuration appelés Playbooks.

Installer Ansible sur Ubuntu 14.04

Pour commencer à explorer Ansible en tant que moyen de gestion de nos divers serveurs, nous devons installer le logiciel Ansible sur au moins une machine. Nous allons utiliser une instance Ubuntu 14.04 VPS pour cette section.

Le meilleur moyen d’obtenir Ansible pour Ubuntu est d’ajouter l’architecture de paquetage personnel (PPA) du projet à votre système.

Pour faire cela efficacement, nous devons installer le paquetage + software-properties-common + , ce qui nous permettra de travailler facilement avec des PPA. (Ce paquet s’appelait `+ python-software-properties sur les anciennes versions d’Ubuntu.)

sudo apt-get update
sudo apt-get install software-properties-common

Une fois le package installé, nous pouvons ajouter le PPA Ansible en tapant la commande suivante:

sudo apt-add-repository ppa:ansible/ansible

Appuyez sur ENTER pour accepter l’ajout de PPA.

Ensuite, nous devons actualiser l’indice de paquet de notre système afin qu’il soit informé des paquets disponibles dans le PPA. Ensuite, nous pouvons installer le logiciel:

sudo apt-get update
sudo apt-get install ansible

Nous disposons maintenant de tous les logiciels nécessaires pour administrer nos serveurs via Ansible.

Configurer les clés SSH

Comme nous l’avons mentionné ci-dessus, 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, les clés SSH aident à simplifier les choses.

Nous pouvons configurer les clés SSH de deux manières différentes selon que vous possédez déjà une clé ou non. Nous supposerons que les serveurs que vous souhaitez administrer seront des droplets DigitalOcean.

Créer une nouvelle paire de clés SSH

Si vous ne souhaitez pas utiliser une paire de clés SSH pour l’administration Ansible, nous pouvons en créer une maintenant sur votre VPS Ansible.

Nous allons créer une paire de clés SSH sur notre droplet Ansible pour s’authentifier auprès des hôtes qu’il administrera.

En tant qu’utilisateur avec lequel vous contrôlerez Ansible, créez une paire de clés RSA en tapant:

ssh-keygen

Vous serez invité à spécifier l’emplacement du fichier de la paire de clés créée, une phrase secrète et la confirmation de la phrase secrète. Appuyez sur ENTER pour accepter les valeurs par défaut.

Vos nouvelles clés sont disponibles dans le répertoire + ~ / .ssh + de votre utilisateur. La clé publique (celle que vous pouvez partager) s’appelle + id_rsa.pub. La clé privée (celle que vous protégez) s’appelle + id_rsa +.

Vous pouvez les ajouter à votre panneau de configuration DigitalOcean pour vous permettre d’intégrer votre clé SSH dans les nouvelles gouttelettes créées. Cela permettra à votre droplet Ansible de passer à SSH dans vos nouveaux droplets immédiatement, sans autre authentification.

Pour ce faire, cliquez sur le lien «Clés SSH» dans le menu de navigation de gauche. Dans le nouvel écran, cliquez sur le bouton «Ajouter une clé SSH» dans le coin supérieur droit:

image: https: //assets.digitalocean.com/articles/basic_ansible/add_ssh.png [Ajouter une clé DigitalOcean]

Entrez le nom que vous voulez associer à cette clé dans le champ du haut. Sur votre instance Ansible VPS, tapez ceci pour obtenir le contenu de votre clé publique:

cat ~/.ssh/id_rsa.pub

Exemple de clé publique

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

La chaîne qui vous est renvoyée correspond à ce que vous devez coller dans le deuxième champ du panneau de configuration de DigitalOcean:

image: https: //assets.digitalocean.com/articles/basic_ansible/ansible_key.png [Clé DigitalOcean Ansible]

Cliquez sur «Créer une clé SSH» pour ajouter votre clé au panneau de configuration. Désormais, chaque fois que vous créerez un nouveau droplet, vous pourrez incorporer votre clé publique SSH dans le nouveau serveur, ce qui vous permettra de communiquer avec votre instance Ansible. Il vous suffit de sélectionner la clé dans la section «Ajouter des clés SSH facultatives» du processus de création d’un droplet:

image: https: //assets.digitalocean.com/articles/basic_ansible/embed_key.png [clé intégrée DigitalOcean]

Transférer une paire de clés SSH existante vers Ansible

Si vous utilisez déjà une paire de clés SSH pour vous authentifier auprès de vos droplets, vous pouvez transférer les informations d’identification vers votre nouveau droplet Ansible au lieu de créer une nouvelle paire. Cela présente l’avantage de le faire fonctionner automatiquement avec tous les serveurs que vous avez déjà configurés pour utiliser la clé.

Sur l’ordinateur sur lequel vous avez configuré l’authentification par clé SSH pour vos droplets, obtenez la clé publique en tapant:

cat ~/.ssh/id_rsa.pub

Exemple de clé publique

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Sur votre serveur Ansible, vous devez créer un répertoire caché pour stocker vos clés. Appelez-le + .ssh + pour que le programme SSH sache où le trouver:

mkdir ~/.ssh

Nous devrions verrouiller l’accès à ce répertoire afin que vous seul puissiez y entrer ou y écrire:

chmod 700 ~/.ssh

Maintenant, déplacez-vous dans le répertoire et ouvrez un fichier nommé + id_rsa.pub + dans votre éditeur de texte:

cd ~/.ssh
nano id_rsa.pub

Collez la sortie de votre clé publique de votre ordinateur personnel dans ce fichier:

Exemple id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

Enregistrez et fermez le fichier. Nous allons nous assurer que ce fichier a les permissions appropriées en tapant:

chmod 644 id_rsa.pub

Maintenant, revenez sur votre ordinateur local configuré pour l’accès à la clé SSH, tapez:

cat ~/.ssh/id_rsa

Exemple de clé privée

-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----

La sortie sera assez longue.

De retour sur votre droplet Ansible, nous devons créer un nouveau fichier dans le répertoire + ~ / .ssh +:

nano id_rsa

A l’intérieur, collez les résultats de la commande précédente sur votre ordinateur local:

id_rsa

-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----

Assurez-vous d’inclure les première et dernière lignes de marqueur. Ils sont nécessaires pour que le fichier de clé soit valide. Enregistrez et fermez le fichier.

Nous devons modifier les autorisations pour garder ce fichier sécurisé:

chmod 600 id_rsa

À ce stade, Ansible pourra utiliser ces clés SSH pour communiquer avec tous les serveurs sur lesquels la clé est intégrée.

Configuration des hôtes Ansible

Ansible conserve la trace de tous les serveurs connus via un fichier "hôtes". Nous devons d’abord configurer ce fichier avant de pouvoir commencer à communiquer avec nos autres ordinateurs.

Ouvrez le fichier avec les privilèges root comme ceci:

sudo nano /etc/ansible/hosts

Vous verrez un fichier qui contient de nombreux exemples de configuration, dont aucun ne fonctionnera réellement pour nous puisque ces hôtes sont constitués. Pour commencer, commençons par commenter toutes les lignes de ce fichier en ajoutant un «#» avant chaque ligne.

Nous conserverons ces exemples dans le fichier pour nous aider dans la configuration si nous voulons implémenter des scénarios plus complexes à l’avenir.

Une fois que toutes les lignes sont commentées, nous pouvons commencer à ajouter nos hôtes réels.

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

Exemple de fichier hosts

[]
alias ansible_ssh_host=

Nom_groupe est une balise organisationnelle qui vous permet de faire référence à tous les serveurs répertoriés avec un mot. L’alias est juste un nom pour faire référence à ce serveur.

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

ssh root@

Vous ne devriez pas être invité à entrer un mot de passe si vous l’avez configuré correctement. Nous supposerons que les adresses IP de nos droplets sont + 192.0.2.1 +, + 192.0.2.2 + et + 192.0.2.3 +. Nous allons configurer cela de manière à pouvoir y faire référence individuellement en tant que + host1 +, '+ host2 + et + host3 + , ou en tant que groupe en tant que + droplets + `.

C’est le bloc que nous devrions ajouter à notre fichier hosts pour accomplir ceci:

[droplets]
host1 ansible_ssh_host=
host2 ansible_ssh_host=
host3 ansible_ssh_host=

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). En effet, votre clé SSH est intégrée pour l’utilisateur root 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:

Erreur de connexion Ansible

host1 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue

Sur mon ordinateur Ansible, j’utilise un utilisateur appelé + demo +. Ansible essaiera de se connecter à chaque hôte avec + ssh demo @ server +. Cela ne fonctionnera pas si l’utilisateur de la démonstration n’est pas sur le système distant.

Nous pouvons créer un fichier qui indique à tous les serveurs du groupe «droplets» de se connecter à l’aide de l’utilisateur root.

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/droplets

Nous pouvons mettre notre configuration ici. Les fichiers YAML commencent par «-», assurez-vous de ne pas oublier cette partie.

/ etc / ansible / group_vars / droplets

---
ansible_ssh_user: root

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 sous + / etc / ansible / group_vars / all +. Des hôtes individuels peuvent être configurés en créant des fichiers dans un répertoire `` / / etc / ansible / host_vars + `.

Utiliser des commandes simples 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.

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

ansible -m ping droplets

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 pour utiliser le module "ping". Ce sont essentiellement des commandes que vous pouvez exécuter sur vos hôtes distants. Le module ping fonctionne de nombreuses manières, comme l’utilitaire ping normal sous Linux, mais il vérifie plutôt 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

Conclusion

À ce stade, votre serveur Ansible doit être configuré pour communiquer avec les serveurs que vous souhaitez contrôler. Nous avons vérifié que Ansible peut communiquer avec chaque hôte et nous avons utilisé la commande + ansible + 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. Nous avons mis en place de bonnes bases pour travailler avec nos serveurs via Ansible, mais le problème sera résolu dans un prochain article, lorsque nous expliquerons comment utiliser Playbooks pour automatiser la configuration de vos ordinateurs distants.