Contactez-nous

Etape 2 : Utiliser des commandes ad-hoc pour vérifier l'uptime, l'espace disque, et la présence d'un paquet spécifique

Maîtrisez les commandes ad-hoc d'Ansible pour auditer rapidement vos serveurs : vérification de l'uptime, de l'espace disque disponible et de l'installation de paquets spécifiques.

La puissance des commandes Ad-Hoc pour l'inspection rapide

Après avoir configuré notre inventaire à l'étape précédente, nous allons maintenant explorer la flexibilité des commandes ad-hoc d'Ansible. Une commande ad-hoc est une manière d'exécuter une tâche unique et simple sur un ou plusieurs noeuds gérés, directement depuis la ligne de commande, sans avoir besoin d'écrire un playbook complet. C'est un outil extrêmement utile pour des vérifications rapides, des diagnostics ou des actions ponctuelles.

L'objectif de cette étape est de vous familiariser avec la syntaxe des commandes ad-hoc et de les utiliser pour effectuer trois types de vérifications courantes en administration système :

  • Vérifier le temps de fonctionnement (uptime) des serveurs.
  • Contrôler l'espace disque disponible.
  • S'assurer de la présence (ou de l'absence) d'un paquet logiciel spécifique.

Ces opérations illustrent bien comment Ansible, même sans playbook, peut simplifier et accélérer la collecte d'informations sur votre parc.

Pour toutes les commandes suivantes, nous supposerons que votre fichier d'inventaire se nomme my_inventory.ini et que vous ciblez le groupe lab_servers défini précédemment. Adaptez ces noms si nécessaire. La structure générale d'une commande ad-hoc est : ansible -i -m -a [options].

Vérifier l'uptime des serveurs

L'uptime d'un serveur indique depuis combien de temps il est en fonctionnement sans redémarrage. C'est une information de base souvent consultée. Pour cela, nous pouvons utiliser le module command d'Ansible, qui permet d'exécuter n'importe quelle commande shell simple sur les noeuds distants. La commande Linux standard pour obtenir l'uptime est... uptime.

Exécutez la commande suivante :

ansible lab_servers -i my_inventory.ini -m command -a "uptime"

Analysons cette commande :

  • ansible lab_servers : Cible tous les hôtes du groupe lab_servers.
  • -i my_inventory.ini : Spécifie le fichier d'inventaire à utiliser.
  • -m command : Indique que nous utilisons le module command. Ce module prend la commande à exécuter comme argument. Il n'interprète pas les variables d'environnement shell ni les opérateurs comme les pipes ou les redirections. Pour cela, il faudrait utiliser le module shell.
  • -a "uptime" : Passe la chaîne "uptime" comme argument au module command. C'est la commande qui sera exécutée sur chaque noeud.

En retour, Ansible affichera la sortie de la commande uptime pour chaque serveur du groupe lab_servers. Vous verrez typiquement une ligne par serveur indiquant son nom, si la commande a réussi ("changed": false, "rc": 0), et la sortie standard ("stdout") contenant l'information d'uptime.

node1 | SUCCESS => {
    "changed": false, 
    "cmd": "uptime", 
    "delta": "0:00:00.003091", 
    "end": "2023-10-27 10:00:00.000000", 
    "rc": 0, 
    "start": "2023-10-27 09:59:59.996909", 
    "stderr": "", 
    "stdout": " 10:00:00 up 10 days,  2:30,  1 user,  load average: 0.00, 0.01, 0.05", 
    "stdout_lines": [" 10:00:00 up 10 days,  2:30,  1 user,  load average: 0.00, 0.01, 0.05"],
    "warnings": []
}
node2 | SUCCESS => {
    "changed": false, 
    "cmd": "uptime", 
    "delta": "0:00:00.002874", 
    "end": "2023-10-27 10:00:01.000000", 
    "rc": 0, 
    "start": "2023-10-27 10:00:00.997126", 
    "stderr": "", 
    "stdout": " 10:00:01 up 5 days, 12:15,  0 users,  load average: 0.08, 0.03, 0.01", 
    "stdout_lines": [" 10:00:01 up 5 days, 12:15,  0 users,  load average: 0.08, 0.03, 0.01"],
    "warnings": []
}

Le champ changed est à false car la commande uptime ne modifie pas l'état du système.

Contrôler l'espace disque disponible

Savoir combien d'espace disque est disponible sur les systèmes de fichiers est crucial pour éviter les pannes. La commande Linux courante pour cela est df -h (le -h étant pour un affichage "human-readable", plus facile à lire).

Nous pouvons à nouveau utiliser le module command. Si l'argument de la commande (-a) ne contient pas d'espaces ou de caractères spéciaux interprétés par le shell, les guillemets ne sont pas toujours nécessaires, mais c'est une bonne pratique de les utiliser.

ansible lab_servers -i my_inventory.ini -a "df -h"

Notez que si aucun module n'est spécifié avec -m, Ansible utilise par défaut le module command. Donc, la commande ci-dessus est équivalente à :

ansible lab_servers -i my_inventory.ini -m command -a "df -h"

La sortie vous montrera l'utilisation de l'espace disque pour tous les systèmes de fichiers montés sur chaque serveur cible. Cela peut être verbeux. Si vous souhaitez cibler un point de montage spécifique, par exemple /var, vous pouvez adapter la commande :

ansible lab_servers -i my_inventory.ini -a "df -h /var"

Pour des analyses plus poussées ou pour utiliser ces informations de manière programmatique dans des playbooks, Ansible propose le fact ansible_mounts (collecté par le module setup) qui fournit des données structurées sur les points de montage et leur utilisation.

Vérifier la présence d'un paquet spécifique

Il est souvent nécessaire de vérifier si un paquet logiciel est installé, quelle est sa version, ou s'il est disponible pour installation. Pour cela, il est préférable d'utiliser les modules Ansible dédiés à la gestion des paquets, car ils sont idempotents et gèrent les spécificités des différents gestionnaires de paquets (apt, yum, dnf, etc.).

Supposons que nous voulions vérifier si le paquet nginx est installé sur nos serveurs (qui sont, imaginons, basés sur Debian/Ubuntu et utilisent donc apt). Nous pouvons utiliser le module apt avec l'argument name pour le nom du paquet et state=present pour s'assurer de sa présence. Pour une simple vérification sans rien installer, nous ajoutons l'option --check (mode dry-run) à la commande Ansible.

ansible lab_servers -i my_inventory.ini -m apt -a "name=nginx state=present" --check --become

Décortiquons cette commande :

  • -m apt : Utilise le module apt.
  • -a "name=nginx state=present" : Spécifie que nous nous intéressons au paquet nginx et que son état désiré est present (installé).
  • --check : C'est une option globale d'Ansible qui demande de simuler les actions sans les exécuter réellement. Le module rapportera ce qu'il ferait. Si le paquet est déjà là, il indiquera ok. S'il n'est pas là, il indiquera changed (car il l'installerait en mode normal).
  • --become : Cette option globale demande à Ansible d'utiliser une élévation de privilèges (typiquement sudo) pour exécuter le module. La gestion des paquets nécessite généralement des droits root.

Si vos serveurs utilisent un autre gestionnaire de paquets comme yum ou dnf, vous remplaceriez -m apt par -m yum ou -m dnf. Le module package est un module plus générique qui tente de détecter automatiquement le bon gestionnaire de paquets du système cible :

ansible lab_servers -i my_inventory.ini -m package -a "name=nginx state=present" --check --become

La sortie vous indiquera pour chaque hôte si le paquet est présent (ok) ou s'il aurait été installé (changed en mode check). Si le paquet n'est pas installé et que vous omettez --check, Ansible tentera de l'installer.

Ces exemples démontrent la simplicité et l'efficacité des commandes ad-hoc pour des tâches d'audit rapide. Elles vous permettent d'obtenir rapidement un aperçu de l'état de votre parc avant de passer à l'écriture de playbooks pour des configurations plus complexes ou des déploiements.