Aller au contenu

Installation et configuration de Ansible

Contexte

Ansible est un outil d’automatisation IT utilisé pour gérer la configuration des systèmes, déployer des applications et orchestrer des infrastructures de manière centralisée. Il permet d’automatiser des tâches répétitives sur un ensemble de machines, tout en garantissant une configuration cohérente et reproductible.

Son fonctionnement repose sur un modèle sans agent (agentless) : aucune installation n’est nécessaire sur les machines cibles, car la communication s’effectue via des protocoles standards comme SSH pour les systèmes Linux ou WinRM pour Windows.


1. Installation

Depuis une machine Linux / Debian, mettre à jour le système :

sudo apt update
sudo apt upgrade -y

Installer Ansible.

Ubuntu propose maintenant Ansible via le dépôt officiel ou via apt directement.
Pour la version stable on utilisera alors la version apt

sudo apt install ansible -y

Vérifier l’installation

ansible --version

Tu devrais voir la version installée, par exemple ansible 2.14.


2. Configuration de base pour test

Créer le fichier d’inventaire :

sudo mkdir -p /etc/ansible
sudo nano /etc/ansible/hosts

Exemple simple de contenu pour tester sur la machine locale :

[local]
127.0.0.1 ansible_connection=local

Créatuib d'yb ytikisateur de liaision dédié (Ansible)

On créer un utilisateur nommée ansible qui servira d'utilisateur de liaison entre le serveur Ansible et les machines cibles.

Nous mettrons cet utilisateur dans la configuration /etc/ansible/host pour ansible_user=ansible

Connexion uniquement avec clé (Recommandée pour Ansible)

Se rendre dans le fichier sudoers :

sudo visudo 

Ajoute en dessous de Root en bas de page :

ansible ALL=(ALL:ALL) NOPASSWD: ALL

Tester la connexion :

ansible all -m ping

Si tout est OK, tu verras pong.


3. Configuration finale

Se rendre dans le fichier suivant :

sudo nano /etc/ansible/hosts

Voici la configuration nécessaire pour notre infrastructure :

À chaque fois qu'on mettra en place une nouvelle VM Serveur, il faudra l'ajouter dans ce fichier de configuration afin que l'inventaire soit à jour par la suite dans le GLPI.

[local]
127.0.0.1 ansible_connection=local

[serveurs]
bdd ansible_host=10.10.120.7 ansible_user=bdd     
reverse-proxy ansible_host=10.10.120.80 ansible_user=user
reverse-proxy-sec ansible_host=10.10.120.90 ansible_user=user
web ansible_host=10.10.120.11 ansible_user=user
dns-autorite ansible_host=10.10.120.8 ansible_user=user
dns-autorite-sec ansible_host=10.10.120.18 ansible_user=user
dns-resolver ansible_host=10.10.120.9 ansible_user=user
dns-resolver-sec ansible_host=10.10.120.19 ansible_user=user
ca-autorite ansible_host=10.10.120.12 ansible_user=certificat
docker ansible_host=10.10.120.15 ansible_user=user
ansible ansible_host=10.10.120.14 ansible_user=ansible

[all_linux:children]
serveurs

4. Generation de la clé publique

Il n'est pas possible d'utiliser une connexion SSH via mot de passe car le serveur Ansible ne le connaît pas, il faut donc mettre en place une authentification via clé publique, nous allons donc générer une clé publique pour le serveur Ansible :

ssh-keygen -t ed25519

On ne met pas en place de PassPhrase, car le serveur ne la connaîtra pas non plus, cela ça reviendrais au même que le mot de passe !


5. Copie de la clé publique sur les VM Serveurs de l'infrastructure

On va copier la clé publique sur toutes les VM que l'on veut répertorier dans l'inventaire à l'aide d'une commande (scp auto) :

ssh-copy-id *utilisateur*@10.10.120.?

On y précisera le MÊME utilisateur utilisé dans ansible_user dans la configuration de l'inventaire via sudo nano /etc/ansible/hosts
Faire cela pour toutes les VM présentes dans la configuration uniquement pour la première fois, une par une, même s'il y en a un grand nombre.


6. Test de connexion

Une fois les étapes précédentes correctement mises en place, nous ferons un test via la commande suivante :

ansible all -m ping 

Le résultat retourné doit être le suivant (ceci est un exemple):

[WARNING]: Host 'dns-resolver-sec' is using the discovered Python interpreter at '/usr/bin/python3.13', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.19/reference_appendices/interpreter_discovery.html for more information.
dns-resolver-sec | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.13"
    },
    "changed": false,
    "ping": "pong"
}