Aller au contenu

Modules Ansible de Configuration Système

Mise à jour :

logo

Ansible propose de nombreux modules dédiés à la gestion et à la configuration des systèmes. Ces modules permettent d’automatiser la gestion des utilisateurs, des groupes, des tâches planifiées, des paramètres système, de la sécurité, des points de montage et bien plus encore. Ce guide présente les principaux modules de configuration système, leurs usages courants et des exemples pratiques.

Le module ansible hostname

Le module hostname permet de gérer le nom d’hôte (hostname) des systèmes distants. Il est utilisé pour définir, modifier ou vérifier le nom d’hôte d’une machine, ce qui est essentiel pour l’identification des serveurs dans un réseau, la configuration DNS, ou encore l’intégration dans des environnements automatisés.

Définir le nom d’hôte

- name: Définir le nom d’hôte
ansible.builtin.hostname:
name: webserver01

Dans cet exemple, le nom d’hôte de la machine sera défini sur webserver01.

Définir un nom d’hôte avec un domaine complet (FQDN)

- name: Définir un FQDN comme nom d’hôte
ansible.builtin.hostname:
name: app01.example.com

Le nom d’hôte sera défini avec le nom de domaine complet, ce qui peut être utile pour l’intégration dans un annuaire ou une infrastructure DNS.

Vérifier et appliquer le nom d’hôte uniquement si nécessaire

- name: Appliquer le nom d’hôte seulement s’il est différent
ansible.builtin.hostname:
name: "{{ inventory_hostname }}"

Cela permet de s’assurer que le nom d’hôte correspond à celui attendu dans l’inventaire Ansible.

Le module ansible user

Le module user permet de gérer les comptes utilisateurs sur les systèmes distants. Il offre une gestion complète : création, modification, suppression d’utilisateurs, gestion des groupes, des mots de passe, des clés SSH, de l’expiration de compte, etc. Ce module est essentiel pour automatiser la gestion des accès et garantir la cohérence des environnements.

Créer un utilisateur avec mot de passe et shell personnalisé

- name: Créer un utilisateur avec un shell spécifique
ansible.builtin.user:
name: alice
password: "{{ 'motdepasse' | password_hash('sha512') }}"
shell: /bin/bash
state: present

Dans cet exemple, l’utilisateur alice est créé avec un mot de passe chiffré et le shell /bin/bash.

Supprimer un utilisateur et son répertoire home

- name: Supprimer un utilisateur et son home
ansible.builtin.user:
name: bob
state: absent
remove: yes

Ici, l’utilisateur bob est supprimé ainsi que son répertoire personnel.

Ajouter un utilisateur à plusieurs groupes

- name: Ajouter un utilisateur à plusieurs groupes
ansible.builtin.user:
name: dev
groups: "sudo,developers"
append: yes

L’utilisateur dev est ajouté aux groupes sudo et developers sans perdre ses groupes existants.

Définir ou modifier le répertoire home

- name: Créer un utilisateur avec un home personnalisé
ansible.builtin.user:
name: testuser
home: /data/testuser
create_home: yes

Ici, le répertoire personnel de testuser sera /data/testuser et sera créé s’il n’existe pas.

Gérer la clé SSH d’un utilisateur

- name: Ajouter une clé SSH à l'utilisateur
ansible.builtin.user:
name: alice
ssh_key: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQE..."

Permet d’ajouter une clé publique SSH à l’utilisateur.

Expirer un compte utilisateur

- name: Expirer un compte utilisateur
ansible.builtin.user:
name: temporaire
expires: 1700000000 # Timestamp UNIX

Le compte temporaire expirera à la date spécifiée.

Verrouiller ou déverrouiller un compte

- name: Verrouiller un compte utilisateur
ansible.builtin.user:
name: alice
password_lock: yes

Le compte alice sera verrouillé (impossible de se connecter).

Changer l’UID ou le GID d’un utilisateur

- name: Changer l'UID et le GID
ansible.builtin.user:
name: alice
uid: 1050
group: staff

Permet de modifier l’UID et le groupe principal de l’utilisateur.

Utilisation avancée

  • Gérer les groupes secondaires : utilisez groups et append pour ajouter sans écraser.
  • Gérer l’expiration : le paramètre expires accepte un timestamp UNIX.
  • Verrouillage/déverrouillage : password_lock permet de bloquer ou débloquer un compte.
  • Gestion du home : create_home pour créer le répertoire, move_home pour déplacer un home existant.
  • Suppression complète : remove: yes supprime le home et la boîte mail lors de la suppression de l’utilisateur.

Résumé des principaux paramètres

  • name : nom de l’utilisateur (obligatoire)
  • state : present (par défaut), absent
  • password : mot de passe chiffré (utiliser un filtre comme password_hash)
  • groups : groupes secondaires
  • append : ajouter aux groupes existants (yes/no)
  • shell : shell de connexion
  • home : chemin du répertoire home
  • create_home : créer le home si absent (yes/no)
  • remove : supprimer le home et la boîte mail lors de la suppression
  • ssh_key / ssh_key_file : gérer les clés SSH
  • expires : date d’expiration du compte (timestamp UNIX)
  • password_lock : verrouiller/déverrouiller le compte
  • uid / gid : UID et GID personnalisés

Le module user est donc un outil incontournable pour automatiser la gestion des comptes utilisateurs avec Ansible, garantissant sécurité, cohérence et traçabilité sur l’ensemble de votre infrastructure.

Pour plus de détails et d’options avancées, consultez la documentation officielle du module group.

Le module ansible group

Le module group permet de gérer les groupes d’utilisateurs sur les systèmes distants. Il offre la possibilité de créer, modifier ou supprimer des groupes, de définir leur GID, de gérer leur état système, et d’assurer la cohérence des droits d’accès sur vos machines. Ce module est essentiel pour organiser les utilisateurs et contrôler les permissions de façon centralisée.

Créer un groupe

- name: Créer un groupe
ansible.builtin.group:
name: admins
state: present

Dans cet exemple, le groupe admins est créé s’il n’existe pas déjà.

Supprimer un groupe

- name: Supprimer un groupe
ansible.builtin.group:
name: oldgroup
state: absent

Ici, le groupe oldgroup sera supprimé du système.

Définir un GID spécifique

- name: Créer un groupe avec un GID spécifique
ansible.builtin.group:
name: devs
gid: 1050
state: present

Le groupe devs sera créé avec le GID 1050.

Modifier le GID d’un groupe existant

- name: Modifier le GID d’un groupe existant
ansible.builtin.group:
name: staff
gid: 2000
state: present

Permet de changer le GID du groupe staff si besoin.

Créer un groupe système

- name: Créer un groupe système
ansible.builtin.group:
name: sysgroup
system: yes
state: present

Le groupe sysgroup sera créé comme groupe système (GID généralement < 1000).

Forcer la suppression d’un groupe même s’il est utilisé

- name: Forcer la suppression d’un groupe utilisé
ansible.builtin.group:
name: tempgroup
state: absent
force: yes

Le groupe tempgroup sera supprimé même s’il est encore utilisé par des utilisateurs.

Utilisation avancée

  • Gérer les groupes système : utilisez system: yes pour créer des groupes réservés au système.
  • Définir ou modifier le GID : le paramètre gid permet de fixer ou changer l’identifiant du groupe.
  • Forcer la suppression : force: yes permet de supprimer un groupe même s’il est encore référencé.
  • Compatibilité multi-plateforme : fonctionne sur la plupart des systèmes Unix/Linux.

Résumé des principaux paramètres

  • name : nom du groupe (obligatoire)
  • state : present (par défaut), absent
  • gid : identifiant numérique du groupe
  • system : créer un groupe système (yes/no)
  • force : forcer la suppression du groupe même s’il est utilisé (yes/no)

Le module group est donc un outil fondamental pour organiser et sécuriser la gestion des utilisateurs sur vos systèmes avec Ansible, en assurant une administration centralisée et reproductible des groupes.

Pour plus de détails et d’options avancées, consultez la documentation officielle du module group.

Le module ansible getent

Le module getent permet d’interroger les bases de données système (comme passwd, group, hosts, services, etc.) via la commande Unix getent. Il est utile pour récupérer des informations sur les utilisateurs, groupes, hôtes, ou autres ressources gérées par les bases de données NSS (Name Service Switch). Ce module est particulièrement pratique pour effectuer des vérifications, des audits ou pour conditionner des tâches selon l’état réel du système.

Récupérer tous les utilisateurs du système

- name: Lister tous les utilisateurs
ansible.builtin.getent:
database: passwd

Cette tâche retourne la liste complète des utilisateurs présents dans la base passwd.

Vérifier l’existence d’un groupe

- name: Vérifier l’existence d’un groupe
ansible.builtin.getent:
database: group
key: admins

Permet de vérifier si le groupe admins existe sur la machine cible.

Récupérer une entrée spécifique dans une base

- name: Récupérer une entrée spécifique dans hosts
ansible.builtin.getent:
database: hosts
key: localhost

Retourne les informations associées à localhost dans la base hosts.

Utilisation avancée

  • Interroger d’autres bases : vous pouvez utiliser ce module avec d’autres bases comme services, protocols, networks, etc.
  • Utilisation conditionnelle : les résultats peuvent être utilisés dans des tâches suivantes pour conditionner l’exécution selon la présence ou l’absence d’une entrée.
  • Audit et reporting : idéal pour générer des rapports sur l’état réel des utilisateurs, groupes ou services sur un parc de machines.

Résumé des principaux paramètres

  • database : nom de la base à interroger (passwd, group, hosts, services, etc.) (obligatoire)
  • key : entrée spécifique à rechercher (optionnel)

Le module getent est donc un outil précieux pour interroger dynamiquement les bases de données système et adapter vos playbooks à l’état réel des ressources sur vos machines.

Le module ansible reboot

Le module reboot permet de redémarrer proprement les hôtes distants et d’attendre qu’ils soient de nouveau accessibles avant de poursuivre l’exécution du playbook. Il est particulièrement utile lors de mises à jour système, de changements de configuration nécessitant un redémarrage, ou dans les scénarios d’automatisation cloud et CI/CD.

Redémarrer un serveur et attendre sa disponibilité

- name: Redémarrer le serveur et attendre qu'il soit de nouveau disponible
ansible.builtin.reboot:
reboot_timeout: 600
test_command: whoami

Dans cet exemple, la machine distante est redémarrée. Ansible attend jusqu’à 10 minutes (reboot_timeout: 600) que l’hôte soit de nouveau accessible, en testant la commande whoami pour valider la connexion.

Redémarrer avec un délai avant la reconnexion

- name: Redémarrer avec un délai avant la reconnexion
ansible.builtin.reboot:
pre_reboot_delay: 5
post_reboot_delay: 20
reboot_timeout: 300

Ici, Ansible attend 5 secondes avant le redémarrage, puis 20 secondes après le redémarrage avant de tenter de se reconnecter.

Redémarrer un hôte Windows

- name: Redémarrer un hôte Windows
ansible.builtin.reboot:
reboot_timeout: 900
connect_timeout: 10

Le module fonctionne aussi avec les hôtes Windows, en adaptant les paramètres de connexion.

Utilisation avancée

  • Personnaliser la commande de test : le paramètre test_command permet de spécifier une commande à exécuter pour vérifier que le système est bien revenu en ligne.
  • Délais personnalisés : pre_reboot_delay et post_reboot_delay permettent de gérer des délais avant et après le redémarrage.
  • Gestion des timeouts : reboot_timeout définit la durée maximale d’attente pour la reconnexion, connect_timeout le délai de chaque tentative.
  • Compatibilité multi-plateforme : fonctionne sur la plupart des systèmes Linux, Unix et Windows.

Résumé des principaux paramètres

  • reboot_timeout : durée maximale d’attente pour la reconnexion (en secondes)
  • test_command : commande à exécuter pour valider la disponibilité de l’hôte
  • pre_reboot_delay : délai avant le redémarrage (en secondes)
  • post_reboot_delay : délai après le redémarrage avant de tenter la reconnexion
  • connect_timeout : délai de chaque tentative de connexion

Le module reboot est donc un outil indispensable pour automatiser les opérations de redémarrage dans vos playbooks Ansible, en garantissant la reprise des opérations uniquement lorsque les systèmes sont réellement prêts.

Pour plus de détails et d’options avancées, consultez la documentation officielle du module reboot.

Le module ansible cron

Le module cron permet de gérer les tâches planifiées (crontab) des utilisateurs sur les systèmes distants. Il offre la possibilité d’ajouter, modifier, désactiver ou supprimer des entrées cron, ce qui est essentiel pour automatiser des scripts, des sauvegardes ou toute tâche récurrente sur vos serveurs.

Ajouter une tâche cron

- name: Ajouter une tâche cron pour une sauvegarde quotidienne
ansible.builtin.cron:
name: "Backup quotidien"
minute: "0"
hour: "2"
job: "/usr/local/bin/backup.sh"

Cette tâche planifie l’exécution du script /usr/local/bin/backup.sh tous les jours à 2h du matin.

Supprimer une tâche cron

- name: Supprimer une tâche cron
ansible.builtin.cron:
name: "Backup quotidien"
state: absent

Supprime l’entrée cron nommée “Backup quotidien” de la crontab de l’utilisateur.

Désactiver une tâche cron sans la supprimer

- name: Désactiver une tâche cron sans la supprimer
ansible.builtin.cron:
name: "Backup quotidien"
disabled: yes

La tâche reste dans la crontab mais est commentée et donc inactive.

Ajouter une tâche cron pour un utilisateur spécifique

- name: Ajouter une tâche cron pour l'utilisateur alice
ansible.builtin.cron:
name: "Nettoyage temporaire"
user: alice
minute: "30"
hour: "3"
job: "/usr/local/bin/clean_tmp.sh"

La tâche sera ajoutée à la crontab de l’utilisateur alice.

Utilisation avancée

  • Variables d’environnement : utilisez le paramètre env pour définir des variables d’environnement dans la crontab.
  • Gestion fine de la planification : tous les champs cron (minute, hour, day, month, weekday) sont disponibles pour une planification précise.
  • Suppression ciblée : le paramètre state: absent supprime uniquement l’entrée correspondant au nom donné, sans affecter les autres tâches.

Résumé des principaux paramètres

  • name : nom de la tâche cron (obligatoire pour l’identification)
  • job : commande à exécuter
  • minute, hour, day, month, weekday : planification de la tâche
  • user : utilisateur cible (par défaut, root)
  • state : present (par défaut), absent
  • disabled : désactiver la tâche sans la supprimer (yes/no)
  • env : définir une variable d’environnement

Le module cron est donc un outil incontournable pour automatiser et centraliser la gestion des tâches planifiées sur vos systèmes avec Ansible.

Pour plus de détails et d’options avancées, consultez la documentation officielle du module cron.

Contrôle de connaissances

Pourquoi ce contrôle ?

Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.

🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.

🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.

💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.

Bonne chance ! 🚀

Conclusion

Les modules Ansible de configuration système offrent une large gamme d’outils pour automatiser la gestion des utilisateurs, groupes, tâches planifiées, points de montage et bien plus encore. En utilisant ces modules, vous pouvez garantir la cohérence, la sécurité et l’efficacité de vos environnements systèmes. Que ce soit pour des opérations simples ou des scénarios complexes, Ansible vous permet de gérer vos systèmes de manière centralisée et reproductible.