ANSIBLE local_action

ANSIBLE local_action
Dans la plupart des situations, nous utilisons ANSIBLE pour gérer et configurer les hôtes distants à partir d'un seul nœud de contrôle. Par conséquent, lors de la création de playbooks, c'est avec la compréhension qu'ils doivent exécuter sur les machines distantes que nous spécifions dans le bloc de l'hôte des livres de jeu.

Cependant, il y a des cas où vous devrez peut-être effectuer une action spécifique sur la machine locale au lieu des hôtes distants. Dans de tels cas, une fonctionnalité comme local_action est très pratique.

Ce guide vous montrera comment travailler avec le module local_action local ANSIBLE pour exécuter des tâches localement.

Comment fonctionne le module local_action local ANSIBLE

Comme mentionné précédemment, lors de la création de playbooks, la cible est généralement des hôtes distants. Si vous devez effectuer une tâche pour des hôtes autres que les hôtes distants, vous pouvez utiliser des modules anibles tels que local_action et delegate_to.

Delegate_to est utile lorsque vous devez définir une tâche à exécuter sur un hôte spécifique. Vous pointez le module Delegate_to aux hôtes cibles en spécifiant son nom d'hôte ou son adresse IP.

Local_action, en revanche, exécutera les tâches définies sur la machine locale uniquement. Il est similaire à la définition de la valeur de Delegate_to à LocalHost ou 127.0.0.1

Delegate_to: localhost

Le module local_action est pratique lorsque vous devez d'abord effectuer une tâche sur la machine locale avant de l'envoyer à des systèmes distants. Ce sont principalement des commandes personnalisées ou shell dans le système local.

La meilleure façon de comprendre comment utiliser le module local_action est en utilisant des exemples de manuels.

ANSIBLE LOCAL_ACTION Exemple d'utilisation

Pour plus de simplicité, nous essaierons de garder les manuels courts et pas trop complexes.

Avant de nous concentrer sur les livres de jeu, décrivons notre configuration anible, qui nous permettra de comprendre comment fonctionne le module local_action.

Dans notre exemple de configuration, nous avons un Ubuntu 20.04 serveur qui a installé ANNIBLE. Cela servira de nœud de contrôle anible.

Ensuite, nous avons trois machines à distance: un Ubuntu 21.04 serveur, un serveur Debian 11 et un serveur CentOS 8.

Nous avons le fichier d'inventaire ANSIBLE contenant les adresses IP des trois hôtes dans le nœud de contrôle.

Une fois que nous avons exécuté un livre de jeu, il exécute les trois hôtes.

NOTE: Nous limiterons la sortie à un seul hôte pour éviter la complexité et la confusion.

Local_action à l'aide d'un module

Considérez le livre de jeu suivant:

---
- hôtes: tout
rassemble_facts: non
devenir vrai
Tâches:
- Nom: ArchiveTheLoLlogFiles
local_action:
Module: communauté.général.archive
chemin: / var / log
dest: / var / log / log.le goudron.gz
Format: gz
Force_archive: vrai
- Nom: CopylogarchiveToreMoteHost
anable.construit.copie:
src: / var / log / log.le goudron.gz
dest: / home / ubuntu

Dans le premier bloc, nous spécifions les hôtes cibles pour exécuter les tâches sauf indication contraire.

Le Playbook continue de désactiver les faits sur les hôtes distants en définissant le bloc Gather_facts sur.

Pour avoir l'autorisation de lecture et d'écriture, nous définissons le bloc CETT sur true.

Dans les blocs suivants, nous définissons deux tâches:

La première tâche crée une archive des fichiers journaux du système local. Nous déléguons la tâche pour s'exécuter dans le système local en utilisant le bloc local_actioB. Dans notre exemple, nous utilisons un module communautaire que nous pouvons installer en utilisant la commande:

Communauté d'installation de la collection ANSIBLE-GALAXY.général

La tâche suivante copie l'archive de journal du système local vers le chemin spécifié de l'hôte distant.

Enregistrez le playbook et exécutez-le à l'aide de la commande:

anable-playbook local_action.YML

Une fois réussi, vous devriez voir une sortie similaire à celle ci-dessous:

Local_action à l'aide d'une commande shell

L'exemple ci-dessous vous montre comment exécuter les commandes shell en utilisant le module local_action.

---
- hôtes: tout
rassemble_facts: non
devenir vrai
Tâches:
- Nom: countfiles etdirectrices
Shell: ls-la ~ | wc -l
Registre: Remote_files
- Nom: Printremotefiles
déboguer:
msg: 'Remote_files.stdout '
- Nom: countfiles etdirectrices
local_action: shellls-la ~ | wc -l
Enregistrement: local_files
- Nom: printLocalfiles
déboguer:
msg: 'local_files.stdout '

Dans l'exemple de playbook ci-dessus, nous utilisons le module local_action pour exécuter une commande shell. La commande shell compte le nombre de fichiers et répertoires enregistrés dans une variable.

Nous utilisons ensuite le module de débogage pour imprimer le nombre de fichiers à la fois sur la télécommande et localhost.

Exécutez le fichier comme:

anable-playbook fileCount.YML

Local_action avec run_once

Vous pouvez utiliser le module local_action à côté du paramètre run_once.

---
- hôtes: tout
rassemble_facts: non
devenir vrai
Tâches:
- Nom: StopTheapacheServer
local_action:
Module: ANSIBLE.construit.service
Nom: httpd
État: arrêté
run_once: vrai

Le playbook ci-dessus exécutera le bloc local_action une fois sur le système local.

Conclusion

Le module local_action est utile lorsque vous souhaitez déléguer une tâche pour s'exécuter sur la machine locale. Vous pouvez l'utiliser à la fois avec un module ANSIBLE ou une commande shell.