Comment utiliser le module de registre ANSIBLE

Comment utiliser le module de registre ANSIBLE
Dans ANSIBLE, vous pouvez exécuter n'importe quelle commande shell sur vos hôtes anibles, les hôtes que vous configurerez avec Ansible. Ces commandes de shell peuvent avoir des sorties. Par défaut, la sortie est ignorée. Si vous souhaitez stocker la sortie dans une variable et l'utiliser plus tard, vous pouvez utiliser l'anible enregistrer module. Cet article vous montrera comment utiliser l'ANSIBLE enregistrer Module pour stocker la sortie de commande dans une variable et y accéder plus tard dans votre manuel ANSIBLE.

Conditions préalables

Si vous souhaitez essayer les exemples de cet article, vous devez:

1) Ayez une installation anable sur votre ordinateur.

2) Ayez un hôte Ubuntu configuré pour ANSIBLE AUTOMATION.

Il existe de nombreux articles sur Linuxhint dédiés à l'installation de Ansible et à la configuration des hôtes pour ANSIBLE AUTOMATION. Vous pouvez vérifier ces articles si nécessaire.

Configuration d'un répertoire de projet

Avant d'aller plus loin, créez un nouveau répertoire de projet ANSIBLE, juste pour garder les choses un peu organisées.

Pour créer le répertoire de projet registre-Demo / et tous les sous-répertoires requis (dans votre répertoire de travail actuel), exécutez la commande suivante:

$ mkdir -pv registre-démo / playbooks

Une fois le répertoire du projet créé, accédez au répertoire du projet, comme suit:

$ CD Register-Demo /

Créer un hôtes Fichier d'inventaire, comme suit:

$ hôtes nano

Ajoutez le nom IP ou DNS de l'hôte de votre hôte Ubuntu dans le fichier d'inventaire (un hôte par ligne), comme indiqué dans la capture d'écran ci-dessous.

Ici, j'ai ajouté mon ubuntu 20.04 hôte LTS VM3.nodekite.com dans le ubuntu20 groupe.

Une fois que vous avez terminé, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Créer un fichier de configuration anible anable.CFG Dans votre répertoire de projet, comme suit:

$ nano anible.CFG

Ensuite, tapez les lignes suivantes dans le anable.CFG déposer:

[Par défaut]
Inventaire = hôtes
host_key_checking = false

Une fois que vous avez terminé, enregistrez le anable.CFG fichier en appuyant sur + X, suivie par Y et .

Maintenant, essayez de cingler votre hôte Ubuntu, comme suit:

$ anible ubuntu20 -u anible -m ping

Comme vous pouvez le voir, mon ubuntu 20.04 hôte VM3.nodekite.com est accessible.

Exemple 1: les bases

Dans cet exemple, je vais vous montrer quelques-unes des bases de l'ANSIBLE enregistrer module. J'utiliserai ANSIBLE pour générer un mot de passe aléatoire dans mon Ubuntu 20.04 hôte en utilisant le pwgen commande, stockez le mot de passe dans une variable en utilisant le enregistrer module et imprimez le mot de passe à l'écran.

Tout d'abord, créez le nouveau livre de jeu générer_passe.yaml dans le Playbooks / Répertoire, comme suit:

$ nano playbooks / generate_pass.yaml

Tapez les lignes suivantes dans le générer_passe.yaml déposer:

- Hôtes: Ubuntu20
Utilisateur: ANSIBLE
devenir vrai
Tâches:
- Nom: Assurez-vous que PWGEN est installé
apte:
Nom: Pwgen
État: présent
Update_cache: true
- Nom: générer du mot de passe
Shell: pwgen -n 1 -s 30
inscrire: mypass
- Nom: Imprimez le mot de passe généré
déboguer:
MSG: "Le mot de passe est myPass"

Une fois que vous avez terminé, appuyez sur + X, suivie par Y et , Pour sauver le générer_passe.yaml déposer.

La ligne suivante indique à ANSIBLE d'exécuter le livre de jeu générer_passe.yaml sur chaque hôte du ubuntu20 groupe. Dans mon cas, le livre de jeu sera exécuté sur l'hôte VM3.nodekite.com.

Dans ce livre de jeu, je définirai trois tâches.

La première tâche réalisera que le pwgen le package est installé.

La deuxième tâche générera un mot de passe aléatoire de 30 caractères à l'aide du pwgen commande. J'utiliserai le enregistrer module pour stocker le mot de passe généré dans le mypasse variable.

La troisième tâche imprimera le mypasse variable en utilisant l'anible déboguer module.

Exécutez le livre de jeu générer_passe.yaml Utilisation de la commande suivante:

$ anible-playbook playbooks / generate_pass.yaml

Comme vous pouvez le voir, le playbook a fonctionné avec succès. Un mot de passe a également été généré.

Mais pourquoi la variable mypasse Imprimer tant d'articles?

Eh bien, la variable mypasse est un objet qui contient des propriétés importantes.

Les propriétés les plus importantes de chacun des enregistrer Les variables sont les suivantes:

CMD - La commande qui a couru pour générer la sortie.

stdout - La sortie de la commande.

stderr - La sortie d'erreur de la commande.

commencer - La date et l'heure où la commande a commencé à s'exécuter.

fin - La date et l'heure à laquelle la commande a terminé l'exécution.

delta - Le temps pris pour exécuter la commande. C'est la différence entre le fin et le commencer propriétés.

stdout_lines - Un tableau contenant chaque ligne de sortie de la commande. Pareil que stdout, mais stdout sépare les lignes à l'aide d'un Newline (\ n) caractères au lieu de tableaux.

stderr_lines - Un tableau contenant chaque ligne de sortie d'erreur de la commande. Pareil que stderr, mais stderr sépare les lignes à l'aide de caractères de Newlines (\ n) au lieu de tableaux.

Si vous souhaitez simplement imprimer / accéder à la chaîne de mot de passe (ce qui est très probable), vous pouvez imprimer / accéder au stdout propriété du mypasse variable dans votre manuel, comme marqué dans la capture d'écran ci-dessous.

$ nano playbooks / generate_pass.yaml

Une fois que vous avez terminé, exécutez le livre de jeu générer_passe.yaml encore. Seule la chaîne de mot de passe sera imprimée, comme vous pouvez le voir dans la capture d'écran ci-dessous.

Qui couvre les bases de l'ANSIBLE enregistrer module.

Exemple 2: Contenu des répertoires de magasin

Dans cet exemple, je vais vous montrer comment stocker le contenu d'un répertoire dans une variable en utilisant l'ANSIBLE enregistrer module, ainsi que comment les itérer sur eux.

Tout d'abord, créez le nouveau livre de jeu get_dir_contents.yaml dans le Playbooks / annuaire.

$ nano playbooks / get_dir_contents.yaml

Ensuite, tapez les lignes suivantes dans le get_dir_contents.yaml Playbook:

- Hôtes: Ubuntu20
Utilisateur: ANSIBLE
devenir vrai
Tâches:
- Nom: énumérez tous les fichiers et répertoires dans / home / anible
Shell: LS / Home / Ansible
enregistrer: dir_contents
- Nom: Imprimer le contenu du répertoire à l'aide de boucles
déboguer:
msg: "item"
Loop: "dir_contents.stdout_lines "

Une fois que vous avez terminé, appuyez sur + X, suivie par Y et , Pour sauver le générer_passe.yaml déposer.

Dans ce livre de jeu, je définirai deux tâches.

La première tâche répertorie tous les contenus du / Home / Ansible répertoire et les stocke dans le dir_contents variable.

La deuxième tâche imprime le dir_contents variable.

Courir le get_dir_contents.yaml Playbook, comme suit.

$ anible-playbook playbooks / get_dir_contents.yaml

Comme vous pouvez le voir, le stdout_lines propriété stockée le contenu de l'annuaire en tant que tableau. Le stdout la propriété est également stockée dans le contenu du répertoire. Ces propriétés sont séparées par des caractères de Newline (\ n). Dans cet exemple, le stdout_lines la propriété est facile à travailler avec.

Ensuite, itérez sur le contenu du répertoire à l'aide d'une boucle.

Pour ce faire, ouvrez le get_dir_contents.yaml Playbook et modifier la deuxième tâche, comme marqué dans la capture d'écran ci-dessous.

$ nano playbooks / get_dir_contents.yaml

Ici, je itère sur le dir_contents.stdout_lines tableau à l'aide d'une boucle et imprimer les éléments de tableau à l'aide de l'anible déboguer module. Dans cette tâche, le article La variable est une variable de boucle utilisée pour itérer sur les éléments du tableau.

Courir le get_dir_contents.yaml Playbook, comme suit:

$ anible-playbook playbooks / get_dir_contents.yaml

Comme vous pouvez le voir, le contenu du / Home / Ansible Le répertoire est imprimé sur l'écran.

Exemple 3: répertoire de sauvegarde

Dans cet exemple, je vais vous montrer comment sauvegarder un répertoire en utilisant l'ANSIBLE enregistrer, déposer, et copie modules.

Tout d'abord, créez le nouveau livre de jeu backup_home_dir.yaml dans le Playbooks / Répertoire, comme suit:

$ nano playbooks / backup_home_dir.yaml

Ensuite, tapez les lignes suivantes dans le backup_home_dir.yaml déposer.

- Hôtes: Ubuntu20
Utilisateur: ANSIBLE
devenir vrai
Tâches:
- Nom: Get Home Directory / Home / Ansible Contenu
Shell: LS / Home / Ansible
enregistrer: dir_contents
- Nom: Créez un nouveau répertoire / TMP / ANIBLE
déposer:
chemin: / tmp / anible
État: répertoire
- Nom: répertoire de la maison de sauvegarde / maison / anible à / tmp / anible
copie:
src: / home / anible / item
dest: / tmp / anible /
Remote_src: vrai
Loop: "dir_contents.stdout_lines

Une fois que vous avez terminé, appuyez sur + X, suivie par Y et , Pour sauver le backup_home_dir.yaml déposer.

Dans ce livre de jeu, je définirai trois tâches.

La première tâche stocke le contenu du / Home / Ansible répertoire (le répertoire que je sauvegarde) dans le dir_contents variable en utilisant l'anible enregistrer module.

La deuxième tâche crée un nouveau répertoire / tmp / anible Utilisation de l'ANSIBLE déposer module. C'est le répertoire où la sauvegarde sera stockée.

La troisième tâche boucle à travers le dir_contents.stdout_lines tableau et utilise l'anible copie module pour copier chaque répertoire dans le / tmp / anible / annuaire.

Courir le backup_home_dir.yaml Playbook, comme suit:

$ anible-playbook playbooks / backup_home_dir.yaml

Comme vous pouvez le voir, sur mon Ubuntu 20.04 hôte LTS, la sauvegarde a réussi.

Exemple 4: Exécutez ou sautez les tâches

Dans cet exemple, je vais vous montrer comment exécuter ou sauter des tâches, en fonction de la variable que vous avez enregistrée, en utilisant le enregistrer module.

Tout d'abord, créez le nouveau livre de jeu registre_conditions.yaml dans le Playbooks / Répertoire comme suit:

$ nano playbooks / registre_conditions.yaml

Ensuite, tapez les lignes suivantes dans le registre_conditions.yaml déposer.

- Hôtes: Ubuntu20
Utilisateur: ANSIBLE
devenir vrai
Tâches:
- Nom: Contenu de la liste des répertoires
Shell: LS / Home / ANSIBLE / TEST3
enregistrer: dir_contents
- Nom: Vérifiez si le répertoire est vide
déboguer:
MSG: "Le répertoire est vide."
Quand: dir_contents.stdout == ""

Une fois que vous avez terminé, appuyez sur + X, suivie par Y et , Pour sauver le registre_conditions.yaml déposer.

Dans ce livre de jeu, j'ai défini deux tâches.

La première tâche stocke le contenu du / home / anible / test3 répertoire dans le dir_contents variable.

La deuxième tâche vérifie si dir_contents.stdout est une chaîne vide, ou si le répertoire / home / anible / test3 est vide. Si le répertoire est vide, le message Le répertoire est vide Will imprimer.

Courir le registre_conditions.yaml Playbook, comme suit:

$ anible-playbook playbooks / registre_conditions.yaml

Comme vous pouvez le voir, le playbook a fonctionné avec succès.

Depuis le répertoire / home / anible / test3 est vide, le playbook a imprimé le message Le répertoire est vide.

Ensuite, créez un nouveau fichier dans le / home / anible / test3 annuaire.

$ touch test3 / myfile

Depuis le / home / anible / test3 Le répertoire n'est plus vide, la tâche Vérifiez si le répertoire est vide est sauté, comme vous pouvez le voir dans la capture d'écran ci-dessous.

$ anible-playbook playbooks / registre_conditions.yaml

Conclusion

Le anible enregistrer Le module est très utile pour l'automatisation du serveur. Cet article vous a montré les bases du enregistrer module, y compris des exemples d'utilisation de l'anible enregistrer Module pour le stockage et la sauvegarde du répertoire, et pour l'exécution de tâches de répertoire.