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.