Aller au contenu principal

🎓 PFE BAC+3 | DĂ©ploiement automatique de fichier de configuration de switch avec Ansible

· 8 minutes de lecture
Alexandre FIDALGO
Alexandre FIDALGO
J'fais des trucs sur mon pc et mes serveurs

Rebelote, pour la validation de ma 3e année d'étude, je dois réaliser un nouveau projet de fin d'études. Cette fois-ci, ça sera sur l'automatisation du déploiement de fichier de configuration de switch à l'aide d'Ansible.

attention

Cet article est encore en cours de rédaction, je mettrais les dates lors d'ajouts de nouveaux éléments, alors n'hésitez pas à revenir plus tard pour voir l'évolution du projet.


PrĂ©sentation globale du projet​

Cette année, le but du projet est de permettre là mise à jour et la sauvegarde de fichier de configuration de switch HPE, le tout avec l'utilisation de Git pour sauvegarder les configs et de Ansible pour automatiser le déploiement sur l'ensemble du parc. Bah ouais, on ne va pas sauvegarde/déployer des fichiers de config sur 2025 switchs à la mano.

Donc, pour faire court, ce projet doit permettre :

  • La mise Ă  jour automatique des fichiers de conf
  • Sauvegarder les fichiers de configuration sur Git
  • L'automatisation de dĂ©ploiement de fichier de configuration des switchs
  • Permettre le rollback en cas de dĂ©faillance

Technologies utilisĂ©es​

🔗 Git, c'est quoi ?​

Git c'est un systĂšme de gestion de versions qui permet de suivre l’évolution des fichiers dans un projet. Ici on va s'en servir pour stocker l'ensemble des fichiers de configuration de nos switchs.

Avec Git, tu peux :

✅ Sauvegarder et suivre les modifications d’un projet au fil du temps

✅ Revenir Ă  une version prĂ©cĂ©dente en cas d’erreur

✅ Travailler Ă  plusieurs sans Ă©craser les modifications des autres

✅ ExpĂ©rimenter avec des branches avant d’intĂ©grer des changements dans le projet principal

⚙ Ansible, c'est quoi ?​

Ansible c'est un outil d'automatisation qui permet de gérer des serveurs, installer des logiciels et configurer des systÚmes de maniÚre simple et efficace. Ici il servira à administrer les switchs.

Avec Ansible, tu peux :

✅ GĂ©rer plusieurs machines en mĂȘme temps avec un seul script

✅ Automatiser les tĂąches rĂ©pĂ©titives comme l’installation la sauvegarde de fichiers de configuration

✅ Éviter les erreurs humaines grñce à des configurations reproductibles

✅ Utiliser un systùme sans agent, car Ansible fonctionne via SSH (pour Linux) et WinRM (pour Windows)

💡 Comment ça marche ?​

Pour que vous puissiez mieux comprendre le fonctionnement du projet, il me paraßt plutÎt évident d'expliquer le fonctionnement d'Ansible.

Ansible se compose de plusieurs éléments :

Node Manager

Un node manager, ou control node, est la machine sur laquelle est installĂ©e Ansible et servira Ă  contrĂŽler les nodes grĂące Ă  une connexion SSH en utilisant les commande ansibleet ansible-playbook. Ça peut ĂȘtre n’importe quelle machine Linux, mais pas de Windows.

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.

rĂŽle ansible

Un rĂŽle est une structure arborescente constituĂ©e de rĂ©pertoires et de fichiers de configuration YAML, qui vont avoir pour fonction d’installer tel ou tel systĂšme. Les rĂŽles peuvent ĂȘtre imbriquĂ©s et interdĂ©pendants les uns des autres.

Playbook

Un playbook est un fichier de configuration YAML qui contient un ensemble de tĂąche qui seront executĂ©. Chaque playbook peut ĂȘtre constituĂ© d'option, et fait appel Ă  un ou plusieurs rĂŽles.

Exemple de playbook​

install_apache.yml
---
- name: Installer Apache
hosts: webservers
become: yes # Exécuter en tant que root
tasks:
- name: Installer le package Apache
apt:
name: apache2
state: present

👉 Ici, Ansible va se connecter aux machines du groupe webservers et installer Apache.

TĂąche

Une tùche est une instruction décrite en YAML dans un fichier de configuration. Chaque tùche utilise un module ainsi que quelques éventuels arguments supplémentaires.

Modules

Un module est un programme utilisĂ© pour exĂ©cuter une tĂąche ou une commande Ansible. Chaque tĂąche utilise un module et un seul, qui peut prendre des arguments pour ĂȘtre exĂ©cutĂ© de maniĂšre personnalisĂ©e. Ansible fournit de nombreux modules, mais il est possible d'utiliser ceux de la commaunautĂ©, oĂč de crĂ©er les siens.

Pour la faire courte​

  • un rĂŽle contient un ou plusieurs fichiers de configuration YAML.

  • un fichier de configuration contient une ou plusieurs tĂąches

  • une tĂąche fait appel Ă  un module.

  • un module Ă  plusieur arguments spĂ©cifiĂ©

MindMap du projet​

Retrouver ici la MindMap du projet, oĂč on peut voir l'ensemble des playbooks que j'ai Ă  rĂ©alisĂ© durant de projet :

mindmap projet ansible

Oui, elle est gigantesque, mais c'est parce qu'elle est découpée en deux grosses parties. La partie qui concerne le réseau et la partie qui concerne Ansible.

Le but de cette MindMap était de vraiment découper l'ensemble du projet en sous-catégorie pour avoir une vision globale de ce qu'il y avait à faire.

Informations sur le lab​

Avant le dĂ©ploiement en prod, c'est important d'avoir un lab oĂč tester les diffĂ©rents playbook Ă  exĂ©cuter.

đŸ–„ Configuration du lab:​

  1. 1 VM de contrĂŽle oĂč Ansible est installĂ©.
  2. Switch HPE 5130 un vieux switch qui servira pour les tests et qui ressevra l'ensemble des commandes executé grùce aux playbooks.

Mise en place de l'environnement​

Bon, comme c’est la premiĂšre fois que je fais du Ansible et que je n’ai absolument AUCUNE idĂ©e de comment ça fonctionne, on va faire la bonne vieille technique de tuto.

LĂ  en l'occurrence le “tuto” que j’ai suivi est celui d’Openclassrooms, donc globalement tout ce qui sera dans cette premiĂšre partie de l’article sera tirĂ© de ce que j’ai fais avec le cours d’Openclassrooms.

Du moins c’est que j’avais commencĂ© Ă  faire avant de me rendre compte que le cours n’était pas maintenu, qu’il avait plein de problĂšmes, et que les playbooks ne respectaient pas les bonnes pratiques, j’ai donc fini par attaquer directement la crĂ©ation de playbook pour le projet et je me suis dit que j’apprendrais sur le tas Ă  force de faire et de me prendre plein d’erreurs dans les dents.

Bon maintenant que ça, c’est dit, il est temps de mettre en place un environnement pour pouvoir travailler et apprendre à se servir d’Ansible.

Mise en place d'Ansible​

Le but ici est d’avoir une infrastructure qui puisse discuter avec le switch. J’avais dĂ©jĂ , lors de prĂ©cĂ©dents mois, travaillĂ© sur une infrastructure virtualisĂ©e pour apprendre Ă  utiliser Ansible. J’étais partie dans cette optique Ă©galement pour ce projet, or impossible de ping le switch depuis mes machines virtuelles sur WorkStation. Je n'ai pas voulu me casser trop la tĂȘte, j’ai donc dĂ©cider de passer par WSL qui lui, pouvait ping le switch de test.

Le projet Ansible sera donc hébergé sur un WSL debian.

J’ai donc montĂ© un environnement virtuel et installer les diffĂ©rents paquets nĂ©cessaires Ă  l’utilisation d'Ansible.

Un environnement virtuel, est un environnement d'exĂ©cution isolĂ© qui permet de gĂ©rer de façon indĂ©pendamment du projet, les dĂ©pendances, scripts et versions de Python. En gros, t'as une vieille lib qu'est en 1.6, mais qui fonctionne qu'avec une vieille version de Python, tu crĂ©er ton venv et ça te permet de downgrade ton Python et d'utiliser ta lib uniquement dans cet environnement. Le but c'est d'Ă©viter les conflits entre projets qui utilisent des versions diffĂ©rentes d'une mĂȘme bibliothĂšque. RĂ©sultat : chaque projet peut tourner avec sa stack prĂ©cise, sans polluer l’environnement global.

Donc pour en mettre un en place, il faut commencer par installer différents packages, on créer ensuite le venv, une fois fait, il ne manque plus qu'à l'activer :

er0x@U2023028:~$ sudo apt install python3 python3-virtualenv sshpass
er0x@U2023028:~$ python3 -m venv venv-ansible # pour créer le répertoir
er0x@U2023028:~$ source venv-ansible/bin/activate # pour activer l'environnement virtuel
(venv-ansible) er0x@U2023028:~$ pip install ansible # on install ansible dans le venv
(venv-ansible) er0x@U2023028:~$ pip3 install argcomplete
(venv-ansible) er0x@U2023028:~$ activate-global-python-argcomplete

On sait qu'on est dans l'environnement quand on voit son nom affiché entre parenthÚses avant le prompt du terminal.

Ansible est correctement installĂ©, il faut maintenant vĂ©rifier qu’il fonctionne en exĂ©cutant une commande qui exĂ©cutera la commande echo 'salut B0B' :

(venv-ansible) er0x@U2023028:~$ ansible all -i "localhost," -c local -m shell -a 'echo Salut B0B'
localhost | CHANGED | rc=0 >>
Salut B0B

Il est à présent temps de créer et configurer un répertoire pour le projet :

(venv-ansible) er0x@U2023028:~$ mkdir ansible-project && cd ansible-project
(venv-ansible) er0x@U2023028:~/ansible-project$ ansible-config init --disabled > ansible.cfg
(venv-ansible) er0x@U2023028:~/ansible-project$ touch hosts.ini

Avec la commande ansible-config init on génÚre un fichier de configuration standard avec toutes les sections et options courantes que je vais ensuite adapter à mes besoins et envie pour le projet.

Entre autres, voici le fichier de configuration :

ansible.cfg
[defaults]
action_warnings=True
force_color=True
inventory=/home/er0x/ansible-project/inventory/hosts
remote_user=ansible