• 6 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 02/02/2024

Installez Ansible dans votre environnement

 

Dans le premier chapitre, vous avez identifié la façon de s'approprier l’installation d’un wiki et comment aborder l’automatisation de son déploiement : en décomposant les étapes d’architecture, d’installation et de configuration. En finissant par faire le choix d’un outil d’automatisation adapté à vos besoins : Ansible

Dans ce chapitre, vous allez faire connaissance avec l’outil de gestion Ansible,  vous allez comprendre comment déployer automatiquement MediaWiki sur 2 serveurs avec Ansible, et vous allez apprendre à installer Ansible dans un environnement de travail virtuel. 

Découvrez Ansible

Qu’est-ce qu’Ansible ?

Son créateur s’appelle Michael DeHaan ; la première version de Ansible date de 2012. Depuis, Ansible s'enrichit constamment et une version majeure est proposée approximativement tous les deux mois. 

Entretemps, Ansible a été racheté en 2015 par Red Hat ; la communauté compte plus de 3 500 contributeurs.  

Red Hat a été racheté par IBM en 2018. Donc, Ansible appartient désormais à IBM. 

Complétez votre architecture technique pour Ansible

Votre architecture technique est pour le moment constituée de 2 serveurs. Vous allez ajouter un nouveau serveur qui deviendra votre tour de contrôle Ansible

Votre architecture ressemble donc maintenant au schéma suivant :

  • deux serveurs (Apache et MySQL) ; dans le jargon Ansible, ces serveurs sont appelés des nodes ;

  • un serveur de contrôle, appelé node manager. C’est le serveur sur lequel seront installés les outils Ansible et depuis lequel, les opérations de configuration seront lancées à distance sur les nodes :

Architecture de production complète avec le node manager Ansible

Icône d'un Node

Un node (ou managed node, ou host) est un poste connecté au node manager en SSH, et sur lequel Ansible viendra pousser les tâches d’automatisation. Ansible n’est pas installé sur les nodes.

Icône d'un node manager

Un node manager, ou control node, est un poste qui contrôle les nodes grâce à sa connexion SSH. Il dispose d'une version Ansible d’installé pour leur pousser les tâches d’automatisation grâce aux commandes ansible et ansible-playbook. Ça peut être n’importe quelle machine Linux, mais pas Windows.

 L’inverse du mode push est le mode pull. Par exemple, une marketplace d’applications comme le Play Store ou l’AppStore d’Apple sont des systèmes en mode pull : le client (le smartphone) tire les applications ou les mises à jour vers lui. 

Gérez vos configurations avec le Node Manager

Vous demandez au sysadmin de vous créer en plus un nouveau serveur Debian 11, qui deviendra le node manager.

Ça tombe bien, car le sysadmin est disponible pour le faire tout de suite et en profite pour vous fournir les adresses IP de tous les serveurs et leurs comptes root ; vous allez pouvoir travailler sur le node manager :

  • node manager : 192.168.122.10 (Debian 11) ;

  • serveur 1 : 192.168.122.11 (Debian 11) ;

  • serveur 2 : 192.168.122.12 (Debian 11).

À ce stade, vous devez avoir 3 serveurs disponibles qui communiquent sur le sous-réseau 192.168.122.0/24 et qui sont capables de  sortir et de résoudre sur Internet.

Le node manager va donc être votre tour de contrôle. Vous allez y installer Ansible et tous ses outils, pour déployer automatiquement MediaWiki sur les nodes.

Donc sur le node manager, vous trouverez les outils Ansible et les scripts d’automatisation. Tous les scripts seront lancés depuis le node manager. Ce qui aura pour effet d'exécuter des opérations de configuration à distance sur les nodes.

Installez Ansible

Installez Ansible sur le node manager

Vous allez installer Ansible sur votre node manager. Il y a plusieurs façons d’installer Ansible :

  • via les packages logiciels sur un système Linux ;

  • via pip de Python dans un virtualenv ou pas ;

  • via les sources officielles (Archives ou Git) maintenues par Red Hat.

Ansible peut être installé avec ces trois méthodes nativement sur des systèmes de type UNIX (Linux ou macOS). 

Installez les prérequis

L’installation de Ansible sur le node manager (un serveur Debian) se fera avec la méthode pip de Python dans un virtualenv.

Avec cette méthode, vous créez un environnement de travail virtuel cloisonné, dans lequel vous pourrez installer la version Ansible de votre choix (basée sur le release repository de Ansible).

À chaque sortie de la dernière version de Ansible, il y a des nouveautés et des dépréciations ; il est donc important de tester la compatibilité de vos scripts avant de mettre à jour les outils Ansible. Avec virtualenv c’est très pratique ! Par exemple, vous pouvez créer un virtualenv par version de Ansible.

Sur Debian par exemple, le paquet disponible pour installer Ansible n’est pas la toute dernière version (Debian privilégie la sécurité et la stabilité plutôt que la nouveauté, c’est un parti pris !). C’est parfois un inconvénient quand on attendait une fonctionnalité tout juste sortie mais non disponible en upgrade sur Debian. La méthode pip permet de s’en affranchir et de disposer de la dernière version de Ansible.

Connectez-vous sur le node manager en root 

$ ssh seb@192.168.122.10 Linux node-manager 5.10.0-11-amd64 #1
SMP Debian 5.10.92-1 (2022-01-18) x86_64

The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.

Debian GNU/Linus comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
seb@node-manager:~$ su - root
Mot de passe : root@node-manager:~#

Installez le paquet python-virtualenv, ce qui permettra de créer des environnement de travail virtuel : virtualenv.

Vous profiterez d’installer le paquet sshpass qui servira ultérieurement pour se connecter en SSH avec Ansible.

$ apt install python3.11-venv sshpass

À la question "Continuer ?", répondez 0ui, et l’installation de python-virtualenv et sshpass se lance. 

Créez un simple utilisateur

Pour ne pas travailler en root sur le node manager (ce n’est vraiment pas recommandé, le compte root peut tout faire sans aucune limite, une erreur est vite arrivée !), vous allez donc créer un simple utilisateur user-ansible :

# adduser user-ansible
Ajout de l'utilisateur « user-ansible » ...
Ajout du nouveau groupe « user-ansible » (1001) ...
Ajout du nouvel utilisateur « user-ansible » (1001) avec le groupe « user-ansible » ...
Création du répertoire personnel « /home/user-ansible »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd: password updated successfully
Changing the user information for user-ansible
Enter the new value, or press ENTER for the default
 Full Name []: user-ansible
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Cette information est-elle correcte ? [O/n]

Entrez un mot de passe, confirmez-le, complétez les informations demandées, puis validez avec Oui.

Maintenant que l’utilisateur est créé, vous pouvez l’utiliser avec la commande suivante :

# su - user-ansible
user-ansible@node-manager:~$

Vous travaillez maintenant avec l’utilisateur user-ansible sur le node-manager.

Créez votre environnement de travail virtuel

Comme indiqué plus haut,  vous utiliserez un environnement de travail virtuel pour cloisonner l’installation et l'exécution d'Ansible. Ceci permettra de gérer les dépendances avec la version de Python et d’installer une version particulière de Ansible.

Vous allez installer la dernière version en date de Ansible

Vous créez alors un environnement de travail virtuel nommé ansible.

Le nom est arbitraire. Vous pouvez mettre ce que vous voulez, mais donner du sens à ce que vous faites, c’est mieux.

Sur le node manager, lancez la commande suivante :

user-ansible@node-manager:~$ virtualenv ansible
created virtual environment CPython3.9.2.final.0-64 in 143ms
 creator CPython3Posix(dest=/home/user-ansible/ansible, clear=False, no_vcs_ignore=False, global=False)
 seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/user-ansible/.local/share/virtualenv)
added seed packages: pip==20.3.4, pkg_resources==0.0.0, setuptools==44.1.1, wheel==0.34.2
 activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

Vous utilisez la commande virtualenv pour créer l'environnement ansible dans lequel les outils, les ressources et le gestionnaire de paquets sont installés.

Pour activer l'environnement virtuel, il faut activer la source :

$ user-ansible@node-manager:~$
source ansible/bin/activate
(ansible) user-ansible@node-manager:~$
(ansible) user-ansible@node-manager:~$

Le prompt a changé au profit de  (ansible) user-ansible@node-manager:~$. Ce qui signifie que vous êtes dans l'environnement de travail virtuel Ansible.  

Installez Ansible dans votre environnement virtuel

Installez maintenant Ansible avec pip avec la commande suivante :

(ansible) user-ansible@node-manager:~$ pip install ansible
Collecting ansible
 Downloading ansible-5.3.0.tar.gz (38.0 MB)
  |████████████████████████████████| 38.0 MB 4.6 MB/s
Collecting ansible-core~=2.12.2
 Downloading ansible-core-2.12.2.tar.gz (7.8 MB)
  |████████████████████████████████| 7.8 MB 5.4 MB/s
Collecting PyYAML
 Downloading PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (661 kB)
  |████████████████████████████████| 661 kB 4.6 MB/s
Collecting cryptography
 Downloading cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl (3.6 MB)
  |████████████████████████████████| 3.6 MB 4.6 MB/s
Collecting jinja2
 Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB)
  |████████████████████████████████| 133 kB 4.5 MB/s
Collecting packaging
 Downloading packaging-21.3-py3-none-any.whl (40 kB)
  |████████████████████████████████| 40 kB 3.2 MB/s
Collecting resolvelib<0.6.0,>=0.5.3
 Downloading resolvelib-0.5.4-py2.py3-none-any.whl (12 kB)
Collecting cffi>=1.12
 Downloading cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (444 kB)
  |████████████████████████████████| 444 kB 4.7 MB/s
Collecting pycparser
 Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
  |████████████████████████████████| 118 kB 4.6 MB/s
Collecting MarkupSafe>=2.0
 Downloading MarkupSafe-2.0.2-cp39-cp39-manylinux2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (30 kB)
Collecting pyparsing!=3.0.5,>=2.0.2
 Downloading pyparsing-3.0.7-py3-none-any.whl (98 kB)
  |████████████████████████████████| 98 kB 2.0 MB/s
Building wheels for collected packages: ansible, ansible-core
 Building wheel for ansible (setup.py) ... done
 Created wheel for ansible: filename-ansible-5.3.0-py3-none-any.whl size=63194604 sha256=316aaaca8572c23ef102401b45f767980781721bcc061bc85ddb4c52cddc4c75
 Stored in directory: /home/user-ansible/.cache/pip/wheels/56/28/79/5c9b383eaa4201d55d5496aa4f966afffc4a54c54de7b987aa
 Building wheel for ansible-core (setup.py) ... done
 Created wheel for ansible-core: filename=ansible_core-2.12.2-py3-none-any.whl size=2073804 sha256=bc1d4ad7c9f01baa1d45cbad925393171865ba3ae85155e85b486ed039266fdb
 Stored in directory: /home/user-ansible/.cache/pip/wheels/08/5b/f9/4d61b8eb8920eee229f520e7f61027df5c13e433c09ade1e29
Successfully built ansible ansible-core
Installing collected packages: pycparser, pyparsing, MarkupSafe, cffi, resolvelib, PyYAML, packaging, jinja2, cryptography, ansible-core, ansible
Successfully installed MarkupSafe-2.0.1 PyYAML-6.0 ansible-5.3.0 ansible-core-2.12.2 cffi-1.15.0 cryptography-36.0.1 jinja2-3.0.3 packaging-21.3 pycparser-2.21 pyparsing-3.0.7 resolvelib-0.5.4
  

Vérifiez la version de Ansible avec la commande suivante : 

(ansible) user-ansible@node-manager:~$ ansible --version
ansible [core 2.12.2]
 config file = None
 configured module search path = ['/home/user-ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
 ansible python module location = /home/user-ansible/ansible/lib/python3.9/site-packages/ansible
 ansible collection location = /home/user-ansible/.ansible/collections:/usr/share/ansible/collections
 executable location = /home/user-ansible/ansible/bin/ansible python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
 jinja version = 3.0.3
 libyaml = True

Tout est OK, Ansible est installé !

Vérifiez votre installation

Dans le répertoire bin de votre environnement virtuel, vous pouvez constater que 11 outils Ansible sont installés :

$ ls ansiblebin/ansible* -l
ansible
ansible-config
ansible-connection
ansible-console
ansible-doc
ansible-galaxy
ansible-inventory
ansible-playbook
ansible-pull
ansible-test
ansible-vault

Regardons de plus près trois d’entre eux :

  • ansible : cette commande permet de lancer des actions Ansible en mode ad-hoc (en ligne de commande) ;

  • ansible-config : cette commande permet de manager la configuration de Ansible :

    • si vous lancez la commande $ ansible-config list, vous allez lister la configuration de Ansible. Toutes ces variables sont contenues dans ./lib/pythonX.Y/site-packages/ansible/constants.py ;

  • ansible-doc : cette commande permet d’obtenir de l’aide pour utiliser Ansible ; la documentation est très bien faite, c’est plutôt pratique pour se guider quand on commence, surtout que vous pouvez y trouver des exemples concrets. 

Résumé

Dans ce chapitre, vous avez  découvert l’automatisation avec Ansible, et plus particulièrement : 

  • la genèse de Ansible ;

  • l’architecture Ansible avec le node manager et les nodes ;

  • comment installer Ansible dans un environnement de travail virtuel ;

  • trois outils fondamentaux qui composent une partie des outils Ansible.

Dans le prochain chapitre, vous allez préparer la communication avec les nodes. Il s’agira de mettre en place les prérequis nécessaires pour établir la communication entre le node manager et les nodes.

Exemple de certificat de réussite
Exemple de certificat de réussite