2022-10-16 10:20 Temps de lecture : 13 min

7 tâches quotidiennes d'administrateur système à automatiser avec Ansible

Découverte d'Ansible : L'automatisation au service de l'infrastructure IT

Ansible, solution gratuite et open source développée par Red Hat et basée sur Python, s'impose comme une plateforme incontournable pour la gestion de configuration et l'automatisation des infrastructures informatiques.

Sa nature multiplateforme lui permet de s'intégrer avec la majorité des systèmes d'exploitation contemporains, incluant Linux, Windows et macOS. Il fonctionne grâce à un langage déclaratif, basé sur YAML, qui permet de définir la configuration souhaitée du système de manière claire et concise. YAML n'est pas un langage de balisage, mais un format de données lisible par l'humain.

À l'instar d'autres plateformes de gestion de configuration modernes, Ansible a profondément modifié les pratiques d'automatisation informatique, redéfinissant les standards de l'industrie. Les outils de gestion de configuration sont désormais des composants clés des chaînes DevOps, jouant un rôle essentiel dans le cycle de vie des processus IT modernes. Ceci est valable pour tout environnement d'infrastructure actuel, qu'il soit hébergé sur site, en mode hybride ou dans le cloud. De plus, Ansible ne se limite pas à DevOps; il contribue également à automatiser de nombreuses opérations quotidiennes réalisées par un administrateur système.

L'un des principaux avantages d'Ansible réside dans son architecture sans agent. Il ne requiert pas d'installation complexe : un accès SSH à la machine cible et une version compatible de Python, généralement préinstallée sur la majorité des systèmes d'exploitation modernes, suffisent. De plus, sa légèreté lui permet d'être déployé et utilisé aussi bien avec des systèmes existants qu'avec des environnements innovants.

Cas d'utilisation d'Ansible

Orchestration

Ansible est l'outil de prédilection pour orchestrer une grande variété de tâches d'administration système et de déploiement. Grâce aux playbooks, il est possible de réutiliser les mêmes séquences d'orchestration dans différents projets. Les configurations basées sur YAML facilitent le stockage et le versionnement de l'infrastructure au sein d'un dépôt Git ou de toute plateforme de contrôle de version.

Déploiement d'applications

Que l'application soit simple, avec quelques lignes de code, ou complexe, avec une architecture à plusieurs niveaux, Ansible permet d'automatiser l'ensemble du cycle de déploiement, de bout en bout.

Sécurité et conformité

Ansible assure la sécurité des systèmes en les alignant avec les directives organisationnelles et les normes sectorielles. Il peut être exécuté sur des milliers de serveurs, générer des rapports d'audit et corriger les vulnérabilités de sécurité, offrant à l'administrateur un contrôle total sur l'environnement.

Examinons maintenant des exemples de tâches d'administration système courantes qu'il est possible d'automatiser avec Ansible.

Gestion de fichiers : copie entre systèmes

La copie de fichiers entre répertoires est une action fréquente pour les administrateurs système. Il est souvent nécessaire de transférer des fichiers de configuration vers des serveurs distants ou de déplacer des fichiers entre des emplacements distants.

Le module de copie d'Ansible permet d'automatiser ces opérations via un playbook.

Pour l'administrateur, il est crucial de connaître l'état des serveurs et de réaliser des actions prédéfinies, conformément aux politiques de l'organisation. L'une de ces tâches consiste à vérifier la disponibilité des serveurs. Avec Ansible, il est aisé de récupérer et de présenter ces informations. L'exemple ci-dessous illustre la copie d'une configuration NTP du serveur local vers un serveur distant à l'aide du module de copie :

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copier un nouveau fichier de configuration ntp et sauvegarder l'original, s'il diffère
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes

Automatisation des tâches planifiées avec Cron

La programmation de tâches planifiées pour automatiser les actions de routine est essentielle pour la gestion de tout serveur. Il est possible de programmer des sauvegardes automatiques, des installations de correctifs, des audits, etc., à des moments précis de la journée ou du mois, libérant ainsi du temps pour d'autres activités.

Cron est l'un des outils Linux qui permet la planification de tâches, et Ansible aide à ajouter ou modifier ces tâches. L'exemple de playbook ci-dessous montre comment définir une tâche rsync en tant que root sur un ou plusieurs serveurs à l'aide d'Ansible :

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Déployer une tâche cron
      cron:
        name: "Définir une tâche rsync"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /chemin/vers/dossier1 /chemin/vers/dossier1 2>&1"

Gestion des disques et systèmes de fichiers

Ansible peut être utilisé pour gérer les disques, les partitions, les systèmes de fichiers et les points de montage, y compris le fichier /etc/fstab sur les serveurs Linux. Différents modules Ansible permettent cela. L'exemple ci-dessous illustre la création d'une partition de 100 Go sur un disque, son formatage en ext4, la création d'un répertoire pour le montage et le montage de la partition. Une entrée dans /etc/fstab est également ajoutée pour un montage temporaire ou permanent, selon les options du module :

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Créer une partition
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Formater la nouvelle partition
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Créer un répertoire de montage
      file:
        path: /data
        state: directory
    - name: Monter la partition
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted

Collecte centralisée de journaux

La centralisation des journaux est essentielle pour la sécurité, l'audit et l'analyse. Ansible facilite la collecte de journaux provenant de divers serveurs de votre infrastructure et leur stockage dans un emplacement unique. Voici un playbook pour cela :

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:

    - name: Rechercher les journaux
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

    - name: Récupérer les journaux
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"

Gestion des paquets logiciels

L'installation de paquets est souvent nécessaire, que ce soit à la demande des utilisateurs ou lors de la mise en place initiale d'un serveur. Il peut également être nécessaire de supprimer certains paquets devenus obsolètes ou posant des problèmes. Ansible simplifie ces actions, évitant d'intervenir manuellement sur chaque serveur. Voici un exemple montrant l'installation et la suppression de paquets sur des serveurs Linux basés sur Ubuntu et RHEL/CentOS :

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Installer l'utilitaire lsof
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Supprimer l'utilitaire ARP Scan
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Installer l'utilitaire lsof
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Supprimer l'utilitaire ARP Scan
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes

Gestion des utilisateurs et groupes

La gestion des utilisateurs et des groupes est un aspect fondamental de la sécurité et de l'administration des systèmes Unix/Linux. Dans une grande organisation, cela peut s'avérer complexe, malgré l'automatisation. Ansible propose des outils robustes pour créer, modifier et supprimer les utilisateurs et les groupes avec toutes les options supportées par le système d'exploitation.

Voici un exemple simple montrant la création et la suppression d'utilisateurs et de groupes via Ansible. Après l'exécution de ce playbook, les serveurs cibles auront le groupe A et le groupe B créés avec les GID spécifiés, l'utilisateur 1 sera supprimé, s'il existe. Un nouvel utilisateur sans shell sera créé en tant qu'utilisateur2 avec un UID, des groupes et un mot de passe verrouillé :

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - group:
        gid: 12310
        name: groupA
        state: present
    - group:
        gid: 12311
        name: groupB
        state: present
    - user:
        name: user1
        state: absent
    - user:
        name: user2
        uid: 12427
        shell: /bin/false
        password_lock: yes
        groups: groupA, groupB

Contrôle des services

Les services sont des processus s'exécutant en arrière-plan et offrant des services spécifiques, tels que sshd pour la connectivité SSH. Ansible permet de contrôler les services système et utilisateur, comme le démarrage, l'arrêt et le redémarrage. Voici un exemple de playbook pour illustrer cela :

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Redémarrer le démon ssh
      service:
        name: ssh
        state: restarted
    - name: Arrêter le démon sssd
      service:
        name: sssd
        state: stopped
    - name: Démarrer le démon httpd
      service:
        name: httpd
        state: started

Dans cet exemple, le service SSH est redémarré, le service SSSD est arrêté et le démon httpd est démarré. L'idempotence d'Ansible garantit que les services déjà dans l'état souhaité ne seront pas modifiés, mais que le redémarrage implique toujours un changement d'état. Il est important de vérifier les noms des services, car les distributions Linux peuvent utiliser des noms différents pour le même service, comme ssh et sshd.

Conclusion

Ansible simplifie la vie des administrateurs système en automatisant les tâches répétitives et chronophages, réduisant les erreurs et les efforts humains. Il permet également de stocker les données de configuration dans un référentiel centralisé, comme Git, favorisant ainsi la collaboration et le contrôle des activités.

Pour approfondir vos connaissances sur Ansible et son ensemble de modules, consultez sa documentation.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.