Guide pratique des modules essentiels d'Ansible

Les modules représentent l'unité d'exécution fondamentale dans l'architecture d'Ansible. Principalement développés en Python, ils agissent comme des scripts autonomes déployés sur les nœuds cibles pour accomplir des tâches spécifiques. Voici une exploration détaillée des modules natifs les plus utilisés pour l'automatisation d'infrastructure.

  1. Module ping

Ce module permet de vérifier la connectivité et l'accessibilité des nœuds gérés via SSH. Il ne requiert aucun argument et renvoie la chaîne pong en cas de succès.

ansible frontend_servers -m ping
  1. Module setup

Responsable de la collecte de faits (facts) sur les machines distantes. Ces métadonnées (version de l'OS, adresse IP, architecture) sont cruciales pour alimenter les variables dans les playbooks. Le paramètre gather_facts fait appel à ce module en arrière-plan.

# Collecte ciblée avec un filtre
ansible database_tier -m setup -a 'filter=ansible_os_family'

# Sauvegarde des faits dans une arborescence locale
ansible compute_nodes -m setup --tree /tmp/facts_inventory/

Voici un aperçu des variables fréquemment exrtaites par ce module :

Variable Description Exemple de valeur
ansible_hostname Nom court de la machine "web-node-01"
ansible_fqdn Nom de domaine pleinement qualifié "web-node-01.internal.lan"
ansible_memtotal_mb Mémoire RAM totale en Mo 16384
ansible_processor_vcpus Nombre de cœurs logiques 8
ansible_default_ipv4 Configuration de l'interface par défaut {"address": "10.0.0.15", ...}
ansible_distribution Nom de la distribution Linux "Ubuntu"
ansible_pkg_mgr Gestionnaire de paquets natif "apt"
ansible_python_version Version de l'interpréteur Python "3.10.12"
ansible_mounts Liste des points de montage actifs [{"mount": "/", ...}]
  1. Module command

Exécute des instructions natives sur les cibles. C'est le module par défaut si aucun paramètre -m n'est précisé. Attention, il ne prend pas en charge les variables d'environnement, les redirections ou les pipes.

ansible app_nodes -a 'uptime'
ansible app_nodes -m command -a 'chdir=/opt/app creates=/opt/app/.initialized /usr/bin/init_db'
  1. Module cron

Automatise la création, la modification et la suppression de tâches planifiées. Le paramètre name est obligatoire pour identifier la règle dans la crontab.

# Ajout d'une tâche de sauvegarde
ansible database_tier -m cron -a 'name="Dump DB" minute="30" hour="2" job="/opt/scripts/db_dump.sh" state=present'

# Suppression de la tâche
ansible database_tier -m cron -a 'name="Dump DB" state=absent'
  1. Module user

Administre les comptes utilisateurs locaux. Pour définir un mot de passe de manière sécurisée, celui-ci doit impérativement être haché avant d'être transmis au module.

# Génération d'un hash SHA-512 via Python
python3 -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"

# Création d'un utilisateur de déploiement
ansible compute_nodes -m user -a 'name=deploy_agent password="$6$RndmStr...[hash]..." group=docker shell=/bin/bash create_home=yes'

# Suppression de l'utilisateur et de son répertoire personnel
ansible compute_nodes -m user -a 'name=deploy_agent state=absent remove=yes'
  1. Module copy

Transfère des fichiers depuis le nœud de contrôle vers les hôtes gérés. L'option content permet de générer un fichier directement sans nécessiter de source locale.

# Copie d'un fichier de configuration
ansible edge_routers -m copy -a 'src=local_routing.yml dest=/etc/network/routing.yml owner=root mode=0600 backup=yes'

# Création de fichier à la volée
ansible edge_routers -m copy -a 'content="MAX_CONNECTIONS=5000\nTIMEOUT=30\n" dest=/etc/app/limits.conf'
  1. Module file

Manipule les attribtus du système de fichiers : permissions, propriétaires, et création de liens ou de répertoires.

# Création d'une arborescence
ansible storage_array -m file -a 'path=/data/archive state=directory mode=0750 owner=app_user'

# Création d'un lien symbolique
ansible storage_array -m file -a 'src=/data/archive dest=/opt/archive_link state=link'

# Suppression d'un fichier
ansible storage_array -m file -a 'path=/tmp/obsolete_data.log state=absent'
  1. Module yum

Interface de gestion des paquets pour les distributions de la famille RedHat (CentOS, RHEL, Fedora, AlmaLinux).

# Installation de la dernière version
ansible web_cluster -m yum -a 'name=haproxy state=latest'

# Installation d'un groupe de paquets
ansible build_servers -m yum -a 'name="@Development Tools" state=present'

# Désinstallation
ansible web_cluster -m yum -a 'name=telnet state=absent'
  1. Module service

Pilote les démons et services système (démarrage, arrêt, rechargement, activation au démarrage).

# Redémarrage et activation au boot
ansible web_cluster -m service -a 'name=haproxy state=restarted enabled=yes'

# Vérification via commande native
ansible web_cluster -a 'systemctl is-active haproxy'
  1. Module shell

Contrairement au module command, il s'exécute dans un enterpréteur shell complet (par défaut /bin/sh), autorisant l'usage de pipes, de redirections et de variables d'environnement.

ansible monitoring_agents -m shell -a 'ps aux | grep node_exporter | wc -l > /tmp/exporter_count.txt'
  1. Module script

Copie un script local de manière temporaire sur la cible, l'exécute avec les arguments fournis, puis le supprime après exécution.

ansible db_replicas -m script -a '/opt/automation/init_replication.sh --force'
  1. Module synchronize

Implémentation optimisée basée sur rsync pour la synchronisation bidirectionnelle d'arborescences de fichiers volumineuses.

ansible file_servers -m synchronize -a 'src=/local/assets/ dest=/var/www/assets/ delete=yes rsync_opts="--exclude=.git"'
  1. Module mount

Configure les points de montage persistants via le fichier /etc/fstab et gère leur état actif (monté/démonté).

ansible nfs_clients -m mount -a 'path=/mnt/shared src=10.0.0.5:/exports/shared fstype=nfs opts=rw,sync state=mounted'
  1. Module get_url

Télécharge des ressources depuis des serveurs distants (HTTP, HTTPS, FTP) avec une vérification optionnelle de l'intégrité du fichier via somme de contrôle.

ansible app_deployers -m get_url -a 'url=https://releases.internal/app-v2.tar.gz dest=/tmp/app.tar.gz mode=0640 checksum=sha256:a1b2c3d4...'
  1. Écosystème étendu

La collection ansible.builtin inclut de nombreux autres modules spécialisés couvrant la gestion de versions (git, subversion), les paramètres noyau (sysctl), l'authentification SSH (authorized_key), les gestionnaires de paquets alternatifs (apt, zypper, pip), ainsi que l'administration de bases de données (mysql_db, postgresql_db).

Étiquettes: Ansible devops InfrastructureAsCode Linux YAML

Publié le 28 juin à 01h38