Skip to content

Commandes unitaires

Il faut garder à l’esprit qu’Ansible est un outil de gestion de configuration. À ce titre, il est tout à fait possible d’appliquer unitairement des configurations sur une ou plusieurs machines de façon simple sans avoir à utiliser de playbook ou de rôles.

C’est là qu’interviennent les commandes directes d’Ansible, ou ce que j’aime appeler « raw command » par abus de langage. Il faudrait plutôt parler de « commande unitaire » ou d’« action unitaire », celà serait plus exact.

Ansible est capable d’exécuter unitairement ses modules, et ceux en dehors de tout playbook ou rôle.

Ça a un très fort intérêt sur plusieurs aspects :

  • Collecte des facts
  • Tâche simple à effectuer sur plusieurs machines

Je vous avait déjà donné un exemple dans la terminologie dans le paragraphe sur les facts.

Par exemple pour lancer la collecte des facts sur une ou plusieurs machines la commande à exécuter est la suivante :

Terminal window
ansible -m setup -i "<ip_machine1>,<ip_machine2>," all

On vient dire ici à Ansible :

  • -m setup : Utilise le module setup d’Ansible
  • -i <ip_machine1>,<ip_machine2>, : Sur les machines 1 et 2. Cette partie est en fait un inventaire simple. Lorsque aurez votre fichier d’inventaire, vous pourrez bien sur faire pointer l’option -i sur le fichier d’inventaire et plus sur une liste simple comme ici.
  • all : Sur toutes les machines listées précédemment.

Dans la terminologie je vous avait présenté une tâche basique pour copier un fichier vers une machine distante.

Je vais m’appuyer sur le même type d’action pour vous donner un exemple de commande unitaire pour créer un fichier sur les machines qui contiendra le texte « Ansible created file »

Terminal window
ansible -i "<ip_machine1>,<ip_machine2>," \
-m ansible.builtin.copy \
-a "content='Ansible created file' dest=/tmp/file.txt" \
all

On constate ici que l’on retrouve bien la partie « inventaire » (-i) et « module » (-m), mais en plus de celà on retrouve une option -a. Cette option est en fait les arguments que l’on veut passer au module ansible.builtin.copy. Dans le cas présent :

  • content='Ansible created file' : Définit que l’on va déposer dans le fichier cible le contenu de la chaine.
  • dest=/tmp/file.txt : Définit l’emplacement du fichier sur les machines cible.

Si vous exécutez la commande, vous retrouverez sur les machines un fichier /tmp/file.txt avec le contenu Ansible created file.

Cette fonctionnalité à l’avantage de pouvoir effectuer rapidement sur un grand ensemble de machine une modification simple, tout en étant idempotente par le fonctionnement interne d’Ansible.