Configurer votre environnement Ansible

Dans ce chapitre nous verrons comment configurer notre environnement Ansible et nous utiliserons l'outil Vagrant pour provisionner nos nœuds distants.

Introduction

Dans ce chapitre, nous découvrirons comment configurer notre environnement Ansible. Pour ce faire il nous faut principalement deux types de machines :

  • Machine de contrôle (ou machine maître) : Machine à partir de laquelle nous pouvons gérer d'autres machines. et pour gérer ces nœuds distants, nous devons installer Ansible sur la machine maître.
  • Machine esclave : Machines manipulées / contrôlées par une machine de contrôle.

Machine de contrôle

Prérequis et conseils

Actuellement, Ansible peut être exécuté à partir de n'importe quelle machine sur laquelle Python 2 (version 2.7) ou Python 3 (version 3.5 et supérieures) est installé (l'interpréteur python est installé par défaut sur les machines Linux). Cela inclut Red Hat, Debian, CentOS, macOS, n'importe lequel des BSD, etc. Cependant, Windows n'est pas pris en charge pour le nœud de contrôle.

Conseil

Lors du choix de votre nœud de contrôle, gardez à l'esprit qu'il vaut mieux que le nœud de contrôle exécute vos playbooks à proximité des machines gérées, car les modules sont lancés à partir du protocole de communication SSH. Par exemple, si vous exécutez Ansible dans un cloud, envisagez de l'exécuter à partir d'une machine à l'intérieur de ce cloud.

Installation d'Ansible

Il existe différentes façons d'installer le moteur Ansible. Vous avez le choix entre les méthodes suivantes :

  • Installation de la dernière version proposée par votre gestionnaire de package de votre OS.
  • Installation avec le gestionnaire de packages python pip.
  • Installation depuis les sources Ansible afin d'utiliser et tester les dernières fonctionnalités.

Installer Ansible sur Ubuntu

Commencez d'abord par mettre à jour la liste de vos dépôts APT :

sudo apt update

Installez ensuite le logiciel software-properties-common qui vous permettra de gérer plus facilement les dépôts indépendants (ppa) de votre distribution.

sudo apt install software-properties-common

Ajoutez le repository ansible en version stable :

sudo apt-add-repository --yes --update ppa:ansible/ansible

Enfin, installez le moteur ansible :

sudo apt install ansible

Installation d'Ansible sur RHEL, CentOS ou Fedora

L'installation se tient sur une ligne de code 😋 :

sudo yum install ansible

Installer depuis pip

Comme dit tout à l'heure, Ansible peut être installé avec le gestionnaire de paquets Python pip. Cette méthode peut être intéressante, quand la dernière version stable n'est pas proposée par le gestionnaire de package de votre OS.

Si pip n'est pas déjà disponible sur votre système Python, exécutez les commandes suivantes pour l'installer:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py --user

Installez ensuite ansible :

pip install --user ansible

Les nœuds esclaves

Sur les nœuds esclaves, vous avez besoin d'un moyen de communication SSH, le port SSH doit donc être ouvert. Vous avez également besoin de Python 2 (version 2.6 ou ultérieure) ou Python 3 (version 3.5 ou ultérieure).

Je ne cesserai de vous le dire chaque jour : "Un bon devopsien, est un informaticien qui automatise ses tâches !". Et comme nous sommes malins 😎, nous allons automatiser le provisionnement de nos nœuds esclaves depuis l'outil Vagrant dans l'hyperviseur Virtualbox.

Rendez-vous sur la page d'installation officielle de vagrant et téléchargez le package correspondant à votre système d'exploitation et à votre architecture.

Par exemple sur Fedora 30, il faut choisir le package 64 bits sous Centos. L'installation se passera ainsi comme ça :

sudo rpm -Uvh https://releases.hashicorp.com/vagrant/2.2.6/vagrant_2.2.6_x86_64.rpm

Pour ubuntu, il faut choisir le package 64 bits sous Debian, soit :

curl -O https://releases.hashicorp.com/vagrant/2.2.6/vagrant_2.2.6_x86_64.deb
sudo apt install ./vagrant_2.2.6_x86_64.deb

Testez ensuite le bon déroulement de votre installation, en vérifiant la version de vagrant :

vagrant --version

Résultat :

Vagrant 2.2.6

Vagrantfile

C'est à partir du fichier Vagrantfile que toute la procédure débute. Ce fichier décrit comment nos nouvelles machines esclaves seront provisionnées. J'ai mis un maximum de commentaires, histoire de comprendre la finalité de chaque instruction. Voici déjà à quoi ressemble donc notre fichier Vagrantfile :

# ####################################################################
# ################### CONFIGURATION VARIABLES ########################
# ####################################################################
IMAGE_NAME = "bento/ubuntu-18.04"   # Image to use
MEM = 2048                          # Amount of RAM
CPU = 1                             # Number of processors
SLAVE_NBR = 2                       # Number of slaves node
NETWORK_ADAPTER="wlp1s0"            # Bridge network adapter


Vagrant.configure("2") do |config|
    # RAM and CPU config
    config.vm.provider "virtualbox" do |v|
        v.memory = MEM
        v.cpus = CPU
    end

    # Slave node config
    (1..SLAVE_NBR).each do |i|
        config.ssh.insert_key = false
        config.vm.define "slave-#{i}" do |slave|
            # OS and Hostname
            slave.vm.box = IMAGE_NAME
            slave.vm.hostname = "slave-#{i}"
            slave.vm.network "public_network", bridge: NETWORK_ADAPTER
        end
    end
end

Vous pouvez personnaliser vos machines esclaves depuis le fichier Vagrantfile à partir des variables de configuration. Par exemple vous pouvez agrandir le nombre de nœuds en changeant la variable SLAVE_NBR, voire attribuer davantage de ressources à vos nœuds en revalorisant les variables CPU et/ou RAM.

Pour ce cours, j'ai choisi le mode réseau accès par pont (bridge) afin de faire communiquer mes machines virtuelles totalement entre elles vers l'extérieur via la machine hôte s'approchant. Dans mon cas j'utilise la carte réseau de mon ordinateur wlp1s0 (lancez la commande ip a afin de connaître la votre).

Information

Vous pouvez aussi définir des IPs privées en ajoutant l'option ip: "MON IP" après le paramètre bridge. Par exemple si vous souhaitez avoir l'ip 192.169.0.21 sur votre nœud distant 1 et l'IP 192.168.0.22 sur votre nœud distant 2, alors vous écrirez alors la ligne suivante : slave.vm.network "public_network", bridge: NETWORK_ADAPTER, ip: "192.168.0.2#{i}"

Enfin nous travaillerons sur des machines virtuelles Ubuntu sous sa version 18.04.

Pour provisionner vos deux nouvelles VMs. Ouvrez un terminal et placez vous d'abord au même niveau que le fichier Vagrantfile et lancez ensuite la commande suivante :

vagrant up

Après la fin de l'exécution, si on retourne sur Virtualbox, on peut visualiser nos deux nouvelles machines :

Visualisation des nœuds esclaves Ansible déployés depuis un Vagrantfile

Conclusion

Après avoir exécuté les instructions ci-dessus, vous êtes prêt à gérer les machines distantes via Ansible. Dans le prochain chapitre suivant nous verrons comment exécuter nos premiers modules sur nos machines esclaves.

Espace commentaire

Écrire un commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

30 commentaires

ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Pensez à bien vérifier vos logs avec vagrant ssh-config si vous avez des doutes sur la connexion SSH vers vos machines esclaves.

26/01/2020 à 19:37
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Probablement un souci d'indentation. Ruby est très sensible aux espaces. Vérifie bien que tes blocs do |config| sont correctement fermés.

26/01/2020 à 12:59
audrey94
Membre Actif
Avatar de audrey94
audrey94
Membre Actif

J'ai une erreur SyntaxError dans le Vagrantfile à la ligne 18. J'ai fait une faute de frappe ?

26/01/2020 à 07:47
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Avec plaisir. Le plus dur c'est souvent la config réseau initiale. Une fois que SSH passe, c'est gagné.

26/01/2020 à 02:22
caron-luce
Membre Actif
Avatar de caron-luce
caron-luce
Membre Actif

Merci pour le guide, c'est super clair. J'ai pu monter mon lab en 10 minutes.

25/01/2020 à 20:55
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie ton pare-feu côté hôte. Si tu es en bridge, il faut que ton réseau autorise le trafic entrant vers les VMs. Désactive temporairement ufw pour tester.

25/01/2020 à 16:31
icharles
Membre Actif
Avatar de icharles
icharles
Membre Actif

Le provisionnement échoue au moment de la connexion SSH, le port 22 est bien ouvert mais ça timeout.

25/01/2020 à 10:47
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, change juste la variable IMAGE_NAME. Assure-toi juste qu'elle est disponible sur Vagrant Cloud.

25/01/2020 à 06:18
charles-leroux
Membre Actif
Avatar de charles-leroux
charles-leroux
Membre Actif

Est-ce que je peux utiliser une autre image que bento/ubuntu-18.04 ?

25/01/2020 à 00:02
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Tente un vagrant halt suivi d'un vagrant destroy -f pour repartir sur une base propre. Les fichiers lock sont souvent la cause.

24/01/2020 à 19:22
matthieu42
Membre Actif
Avatar de matthieu42
matthieu42
Membre Actif

J'ai un souci de verrouillage sur Virtualbox pendant le provisionnement des esclaves.

24/01/2020 à 13:58
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

apt c'est la version packagée par ta distrib, souvent un peu plus ancienne mais stable. pip te donne accès aux toutes dernières versions, pratique pour tester les nouveautés.

24/01/2020 à 07:37
oceane-morvan
Membre Actif
Avatar de oceane-morvan
oceane-morvan
Membre Actif

C'est quoi la différence entre installer Ansible via apt et via pip ?

24/01/2020 à 03:32
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Normal, tu n'as peut-être pas assez de RAM libre. Baisse MEM à 512 ou 1024 dans le fichier et relance vagrant reload --provision.

23/01/2020 à 19:48
olivier-rodrigues
Membre Actif
Avatar de olivier-rodrigues
olivier-rodrigues
Membre Actif

Le Vagrantfile plante sur MEM = 2048, Virtualbox refuse de démarrer avec cette valeur sur ma machine hôte.

23/01/2020 à 12:05
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie ton PATH. Si tu as installé avec --user, les binaires sont dans ~/.local/bin. Ajoute ce dossier à ton .bashrc.

23/01/2020 à 07:00
lorraine-foucher
Membre Actif
Avatar de lorraine-foucher
lorraine-foucher
Membre Actif

J'ai une erreur PYTHONPATH quand je lance un playbook après l'install via pip. Une idée ?

22/01/2020 à 23:41
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Tu peux définir des IPs privées directement dans la boucle du Vagrantfile comme ceci :

slave.vm.network "private_network", ip: "192.168.56.#{i+10}"

C'est plus stable pour tester Ansible en local sans polluer ton réseau physique.

22/01/2020 à 17:33
claudine-lombard
Membre Actif
Avatar de claudine-lombard
claudine-lombard
Membre Actif

Salut, pour le Vagrantfile, comment je fais pour avoir une IP fixe au lieu du bridge ?

22/01/2020 à 12:46
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

C'est normal, les liens HashiCorp bougent. Va sur leur site officiel pour chopper la version actuelle. Les commandes restent les mêmes, change juste le nom du package.

22/01/2020 à 08:35
NabilBahi
Membre
Avatar de NabilBahi
NabilBahi
Membre

Bonjour, 

tout d'abord merci pour ce cours, et pour tout ce que vous faites via ce site,

j'ai une petite question étant donné que je débute avec Linux et Ansible,

comment vous avez fait pour afficher le contenu de Vagrant ?

Merci par avance

 Nabil.

22/01/2020 à 08:34
ledoux-emile
Membre Actif
Avatar de ledoux-emile
ledoux-emile
Membre Actif

Impossible d'installer Vagrant sur ma machine. Le lien rpm pour Fedora 30 est mort.

22/01/2020 à 03:38
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Si tu désactives l'insertion de clés, tu dois gérer l'authentification manuellement ou via un autre provider. Vérifie ton fichier ~/.ssh/authorized_keys sur les esclaves.

21/01/2020 à 20:05
alfred-leger
Membre Actif
Avatar de alfred-leger
alfred-leger
Membre Actif

J'ai des problèmes de droits SSH avec les VMs créées par Vagrant. Le config.ssh.insert_key = false ne semble pas suffire.

21/01/2020 à 12:44
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, carrément. C'est même une bonne solution de repli. Assure-toi juste d'avoir une version de Python 3.5+ sur ta machine maître.

21/01/2020 à 07:16

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire