Ansible : installation, configuration et utilisation avec Windows et Linux

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.

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 Server

Pour 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
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 sshpass

Une fois installée, ouvrir le fichier /etc/ansible/ansible.cfg.

sudo nano /etc/ansible/ansible.cfg

Dans la section [default], ajouter :

host_key_checking = False

Ansible 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.

Ouvrir avec nano le fichier :

sudo nano /etc/ansible/hosts

Ajouter 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.0

Ce qui nous donne pour notre exemple :

C’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.

ansible-inventory

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 :

Comme 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_vars

Ensuite créer le fichier avec le nom du groupe :

sudo touch /etc/ansible/group_vars/windows.yml

Editer le fichier :

sudo nano/etc/ansible/group_vars/windows.yml

Voici le contenu pour le fichier windows.yml :

Pour 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.io)

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€[email protected]$s0rD ansible_python_interpreter='/usr/bin/env python3' ansible_become_method=sudo

Sé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_ping

Ce 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 ping

Ce 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.windows
ansible-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.yml

Editer le fichier :

nano pb-windows-snmp.yml

Copier le contenu ci-dessous dans le playbook :

Je 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 on

Ensuite 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 -v

Voici 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 :

Exé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 :

Executer 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 :



Start the discussion at community.rdr-it.io