
Ansible est logiciel Open Source de gestion de configuration multiplateforme (Linux, Windows, équipements réseaux …).
En d’autre terme, Ansible va vous permettre de gérer, déployer ou encore exécuter des actions sur un groupe d’ordinateur en une « seule ligne de commande ».
Les actions/configuration sont écrites dans un fichier au format YAML également appelé playbook.
À travers ce tutoriel, je vais vous expliquer, comment installer Ansible, puis nous verrons comment créer notre inventaire (ordinateurs) et nous terminerons sur la création de différents playbook.
À la fin de ce tutoriel, j’espère que je vous aurais convaincu d’utiliser Ansible et vous serais en mesure de créer vos propres playbook.
Sommaire
Prérequis
Pour ce tutoriel, vous aurez besoin d’une machine linux pour l’installation de Ansible, d’une machine Windows et Linux.
Afin de pouvoir se connecter à l’ordinateur Windows, il est nécessaire de configurer WinRM.
Depuis Windows 2012, WinRM est normalement activé, la seule chose à faire, c’est d’activer l’authentification CredSSP pour les serveurs membres d’un domaine en utilisant la commande ci-dessous :
Enable-WSManCredSSP -Role ServerPour les ordinateurs qui ne sont pas membre d’un domaine Active Directory, il faut utiliser l’authentification Basic
winrm set winrm/config/client/auth '@{Basic="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'Pour être au plus proche d’une utilisation en entreprise, dans ce tutoriel, j’ai utilisé deux serveurs Windows qui sont membres d’un domaine Active Directory.
En complément, je vous invite à lire cette documentation : Windows Remote Management — Ansible Documentation
Installation de Ansible sur Ubuntu
Il existe plusieurs façons d’installer Ansible sur Linux. Avec Ubuntu, Ansible est disponible par le gestionnaire de paquet, ce qui facilite son installation.
Depuis le terminal, entrer la commande suivante pour installer Ansible :
sudo apt install ansible


Confirmer l’installation des paquets
Une fois installée, entrer la commande ci-dessous pour vérifier que Ansible est bien installé :
ansible --version
Installation des composants supplémentaires pour gérer des serveurs Windows
Pour gérer des serveurs Windows qui sont membres d’un domaine Active Directory, il est nécessaire d’installer des composants supplémentaires afin de pouvoir se connecter aux serveurs à l’aide de credssp.
Comme Ansible utilise Python, nous allons installer pip pour ensuite installer les compléments python.
sudo apt install python3-pip
Nous allons maintenant passer à l’installation de pywinrm[credssp], qui va nous permettre de se connecter à nos serveurs Windows.
Installer pywinrm[credssp] :
sudo pip install "pywinrm[credssp]"
SI vous avez également l’erreur ERROR: pyopenssl 20.0.1 has requirement cryptography>=3.2, but you'll have cryptography 2.8 which is incompatible, voici comment installer la bonne version de cryptography.
Entrer la commande ci-dessous pour mettre à jour cryptography :
sudo pip install -U cryptography
Installation de SSHPASS
Afin de pouvoir se connecter en SSH avec un couple identifiant / mot de passe, il est nécessaire d’installer SSHPASS.
sudo apt install sshpassUne fois installée, ouvrir le fichier /etc/ansible/ansible.cfg.
sudo nano /etc/ansible/ansible.cfgDans la section [defaults], ajouter :
host_key_checking = FalseAnsible est installé, nous allons maintenant passer à la partie inventaire.
L’Inventaire de serveurs pour Ansible
L’inventaire dans Ansible est quelque chose d’assez complexe, dans ce tutoriel, je vais vous expliquer comment débuter avec l’inventaire (Inventory) dans Ansible, mais je vous invite à lire la documentation officielle pour en savoir plus : How to build your inventory — Ansible Documentation
Par défaut, l’inventaire dans Ansible est fait dans le fichier /etc/ansible/hosts qui est un fichier au format ini et qui contient des différents groupes dans lequel on déclare les serveurs cibles.
Par défaut voici à quoi ressemble le fichier :

Je vais vous montrer plusieurs solutions pour gérer votre inventaire dans Ansible.
D’autres solutions sont possibles, elles sont expliquées dans la documentation.
Déclarer les ordinateurs dans Ansible
On va commencer par la méthode la plus simple, qui est d’ajouter un groupe et les adresses IP des serveurs dedans.
Voici le bloc que l’on va ajouter dans le fichier hosts de ansible.
[windows]
192.168.100.1
192.168.100.5
[ubuntu]
192.168.14.131Ouvrir avec nano le fichier :
sudo nano /etc/ansible/hostsAjouter le bloc de texte dans le fichier :

Sauvegarder le fichier.
On a ajouté à l’inventaire 2 ordinateurs Windows et un ordinateur dans le groupe ubuntu.
Pour afficher l’inventaire utiliser la commande suivante :
ansible-inventory --list
Comment vous pouvez le voir, on retrouve les ordinateurs que l’on a déclaré dans le fichier hosts.
Cette solution n’est pas super « friendly-user », quand l’on a un ou deux serveurs mettre les adresses IP ça passe, mais quand l’on a plusieurs dizaines ou centaines de serveurs, c’est pas top.
On va maintenant améliorer ça, en ajoutant un alias afin d’avoir le nom de l’ordinateur dans l’inventaire.
La déclaration se fait sous cette forme :
alias ansible_host=0.0.0.0Ce qui nous donne pour notre exemple :
[windows]
LAB-DC1 ansible_host=192.168.100.1
LAB-SRV-1 ansible_host=192.168.100.5
[ubuntu]
LAB-NGINX ansible_host=192.168.14.131C’est plus lisible comme ça non ?
Éditons de nouveau le fichier /etc/ansible/hosts pour modifier l’inventaire :

SI on liste de nouveau l’inventaire à l’aide de la commande ansible-inventory --list, on arrive à un résultat plus facile à exploiter.

C’est mieux comme ça non ?
On a déclaré notre inventaire, mais il faut encore configurer plusieurs informations comme le couple identifiant / mot de passe et comme se connecter aux ordinateurs.
Configurer les variables d’inventaire
Par défaut, Ansible tente de se connecter aux ordinateurs avec le protocole SSH, ce qui est bon pour le serveur Ubuntu, par contre pour notre groupe Windows, il faut indiquer à Ansible d’utiliser WinRM.
La gestion des variables peut être faite de plusieurs manières :
- Dans le fichier hosts
- Dans un fichier dédié au groupe
Je vais vous montrer les deux.
Personnellement, je préfère la seconde solution, car le fichier hosts devient vite illisible.
Configuration des variables dans le fichier hosts
La première solution pour configurer les variables, c’est directement dans le fichier hosts en ajoutant les variables au format INI.
Le bloc de variables est défini de cette façon : [group:vars].
Si on continue avec l’exemple de départ ce qui nous donne pour le groupe windows et ubuntu :
[windows:var]
[email protected]
ansible_password=secret_password
ansible_port=5985
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
ansible_winrm_transport=credssp
[linux:var]
ansible_connection=ssh
ansible_ssh_user=ansible
ansible_ssh_pass=secret_password
ansible_python_interpreter='/usr/bin/env python3'
ansible_become_method=sudoComme vous pouvez le voir, dans le groupe de variable, on indique plusieurs informations pour se connecter aux serveurs.
Plus vous aurez de groupe dans votre inventaire, plus le fichier hosts sera compliqué à suivre.
Configuration des variables dans un fichier dédié au groupe
La seconde méthode que je vais vous montrer dans ce tutoriel, va permettre de stocker les variables dans un fichier séparer pour chaque groupe.
Ce fichier doit être place dans le dossier /etc/ansible/group_vars/ et doit être nommé avec le nom du groupe (winodws.yml / ubuntu.yml).
Ici le format n’est pas INI mais YAML.
Si le dossier n’existe pas, créer le :
sudo mkdir /etc/ansible/group_varsEnsuite créer le fichier avec le nom du groupe :
sudo touch /etc/ansible/group_vars/windows.ymlEditer le fichier :
sudo nano/etc/ansible/group_vars/windows.ymlVoici le contenu pour le fichier windows.yml :
ansible_user: [email protected]
ansible_password: secret_password
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
ansible_winrm_transport: credsspPour le fichier ubuntu.yml, je vous laisse le faire par vous même.
Afin de vous faciliter l’édition, je vous conseille d’utiliser vscode ou notepad++ qui prend en charge le format YML.
Vous trouverez la correction ici : Ansible : inventory vars #3 ($158) · Extraits de code · Extraits de code · GitLab (rdr-it.com)
Configurer les variables dans la déclaration de l’hôte
Pour compléter cette partie sur la variable, il est possible de les indiquer directement dans la déclaration de l’hôte.
Dans le second exemple que j’ai donné avec l’alias et ensuite l’ip, celle-ci est indiquée par le paramètre ansible_host. Toutes les variables qui ont été déclarée dans le groupe, il est possible de les mettre sur la ligne de l’hôte, ce qui est pratique pour gérer un cas particulier.
LAB-APACHE2 ansible_host=192.168.14.79 ansible_connect=ssh ansible_ssh_user=ansible ansible_ssh_pass=$€cr€Tp@$s0rD ansible_python_interpreter='/usr/bin/env python3' ansible_become_method=sudoSéparer l’inventaire dans plusieurs fichiers
Il est possible d’avoir plusieurs inventaires dans Ansible.
Pour cela, il faut créer un dossier inventories dans le dossier /etc/ansible/, puis dans ce dossier créer un fichier hosts.
Pour chaque appel de commande ansible ou ansible-playbook, il faudra utiliser le paramètre -i pour spécifier l’inventaire.
Plus d’info ici : Sample Ansible setup — Ansible Documentation
Vous savez maintenant comment créer votre inventaire pour Ansible, nous allons maintenant passer au test et vérifier que tout fonctionne.
Tester la connexion entre Ansible et les ordinateurs de l’inventaire
Avant d’executer des actions de configuration à l’aide de playbook, on va tester la bonne configuration de Ansible et de notre configuration à l’aide d’un « ping » .
Pour tester les machines Windows utiliser la commande ci-après :
ansible group -m win_pingCe qui donne pour notre groupe windows :
ansible windows -m win_ping
Si tout est bien installé et configuré, la réponse au ping sera pong.
Pour linux ou autre connexion ssh, on va utiliser ping :
ansible group -m pingCe qui donne pour le groupe ubuntu :
ansible ubuntu -m ping
Comme pour les ordinateurs Windows, si tout est bon, la réponse au ping est pong.
Vous avez effectué votre premier interaction entre ansible et vos serveurs. On va maintenant passer au playbook.
Les playbooks ou livre de recette
Nous allons enfin pouvoir passer aux choses sérieuses et vous allez maintenant voir toute la puissance de Ansible.
Avant de se lancer, je vais vous expliquer « rapidement », ce qu’un playbook.
Un playbook, c’est une liste d’action que nous allons effectuer sur les ordinateurs, c’est un fichier au format YAML où l’on va décrire ce que l’on veut.
Vous verrez avec les exemples, cela sera plus facile à comprendre 😉
Avant de se lancer dans un playbook, nous allons aussi utiliser Ansible Galaxy, qui est un site qui propose des modules qui vont apporter des fonctionnalités supplémentaires à Ansible et nous allons en avoir besoin dans les playbooks que je vais vous présenter.
Playbooks Windows
Avant de commencer à créer notre premier playbook, qui va nous permettre d’installer la fonctionnalité SNMP et de configurer le service, nous allons devoir installer des modules supplémentaires.
Pour commencer nous allons installer deux collections :
Entrer les commandes ci-dessous :
ansible-galaxy collection install ansible.windowsansible-galaxy collection install community.windows
Nous allons maintenant passer à la création et utilisation de notre premier playbook.
Installer et configurer la fonctionnalité SNMP sur Windows avec Ansible
Pour notre première exemple, nous allons installer la fonctionnalité SNMP et la configurer en créant une communauté et également en indiquant l’adresse IP du serveur de supervision qui sera autorisé à interroger le service SNMP.
On va commencer par créer le fichier qui va contenir notre playbook, il n’est pas obligatoire de créer le fichier dans le dossier /etc/ansible/.
Je vais le créer dans le dossier home de mon utilisateur.
touch pb-windows-snmp.ymlEditer le fichier :
nano pb-windows-snmp.ymlCopier le contenu ci-dessous dans le playbook :
---
- name: SNMP conf for Windows
hosts: windows # host group to run the module on
tasks:
- name: Install Service
ansible.windows.win_feature:
name: SNMP-Service
include_management_tools: yes
state: present
- name: Replace SNMP
community.windows.win_snmp:
community_strings:
- RDRIT
permitted_managers:
- 192.168.100.100
action: setJe ne vais pas rentrer dans le détail du playbook, la syntaxe YAML étant assez simple à comprendre.
Ce qu’il faut retenir :
la ligne ci-dessous permet d’indiquer à quel groupe la playbook s’applique :
hosts: windows # host group to run the module onEnsuite vous avez la section tasks et en dessous on peut voir les différentes actions qui vont être effectuées :
- Installation de la fonctionnalité SNMP-Service
- Configuration du service SNMP en indiquant la communauté et l’adresse IP autorisée.
On va maintenant lancer le playbook :
ansible-playbook pb-windows-snmp.yml -vVoici la vidéo de l’execution :
On va maintenant vérifier sur un serveur, dans la liste des services, on retrouve bien le service SNMP. :

Et on peut voir dans les propriétés que la configuration a été appliquée :

En moins de 50 secondes, j’ai pu installer et configurer le rôle SNMP sur 2 serveurs.
SI vous rejouez le playbook, il va vérifier que le service est installé et que la configuration SNMP est bonne, ceci permet de s’assurer d’avoir toujours la bonne configuration également.
Installer les mises à jour Windows avec un playbook Ansible
Le second playbook que je vous propose pour Windows dans ce tutoriel, c’est d’effectuer les mises à jour Windows.
Je le trouve particulièrement intéressant pour les serveurs, car il permet de maitriser l’exécution de Windows Update.
Voici le playbook :
---
- name: Windows Update
hosts: windows
tasks:
- name: Install all update
ansible.windows.win_updates:
category_names:
- SecurityUpdates
- CriticalUpdates
- Update Rollups
- Updates
- Application
- Definition Updates
log_path: C:\ansible_wu.txtExécuter le playbook pour mettre à jour les serveurs.


Le mode verbose permet d’avoir un retour des mises à jour installées.
Playbook Linux – Ubuntu
Le fonctionnement pour Linux est identique, comme pour Windows, voici un playbook qui va vous permettre de mettre à jour les serveurs :
---
- name: Update ubuntu
hosts: ubuntu
become: yes
become_method: sudo
tasks:
- name: Update repo and cache
apt: update_cache=yes force_apt_get=yes cache_valid_time=3600
- name: Upgrade package
apt:
upgrade: yesExecuter le playbook :
ansible-playbook playbook-ubuntu-update.yml -v


Afin de pouvoir exécuter les commandes apt, il est nécessaire de configurer le compte utilisateur pour utiliser sudo sans demande de mot de passe.
Vous savez maintenant comment créer et exécuter un playbook .
Conclusion
Ce tutoriel s’arrête ici et j’espère qu’il vous a aidé à appréhender Ansible, qui va vous permettre d’optimiser la gestion et la configuration de vos serveurs.
Couplet à Jenkins pour l’exécution des playbook, vous aurez le retour console d’enregistrer et vous pourrez suivre l’application des playbook.
De nombreux modules complémentaires sont disponible sur Ansible Galaxy pour vous permettre de gérer l’ensemble de vos serveurs et équipements (switch, routeur, firewall ….).
D’autre tutoriel sur Ansible vont arriver et notamment l’installation et la configuration avec une interface graphique (Ansible AWX / Ansible Semaphore).
Je vais aussi mettre à dispo sur mon git différentds playbooks :
