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.
Qu’est-ce que ça veut dire ?
Section titled “Qu’est-ce que ça veut dire ?”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 :
ansible -m setup -i "<ip_machine1>,<ip_machine2>," allOn 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-isur le fichier d’inventaire et plus sur une liste simple comme ici.all: Sur toutes les machines listées précédemment.
Exemple pour la copie d’un fichier
Section titled “Exemple pour la copie d’un fichier”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 »
ansible -i "<ip_machine1>,<ip_machine2>," \ -m ansible.builtin.copy \ -a "content='Ansible created file' dest=/tmp/file.txt" \ allOn 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.