Tutoriel pour débutants - Playbooks, variables et inventaire Ansible

Beginner S Tutorial Ansible Playbooks



Les playbooks Ansible sont des fichiers qui contiennent des tâches exécutées afin de configurer les hôtes avec Ansible. Les playbooks Ansible sont écrits au format YAML. YAML est un format de fichier très simple, tout comme JSON. Je vais vous montrer à quoi ressemblent les playbooks Ansible YAML dans une section ultérieure de cet article.

Les fichiers d'inventaire Ansible conservent une liste des hôtes que vous souhaitez configurer ou gérer avec Ansible. Vous pouvez également regrouper ces hôtes et les gérer par groupes. Vous pouvez également passer différentes variables pour chaque hôte ou pour un groupe d'hôtes.







Dans cet article, je vais vous montrer comment utiliser les playbooks, les variables, les fichiers d'inventaire Ansible et certains modules Ansible courants avec des exemples pratiques. Alors, commençons !



Conditions préalables

Si vous souhaitez essayer les exemples de cet article,



1) Vous devez avoir installé Ansible sur votre ordinateur.
2) Vous devez avoir au moins un hôte Ubuntu/Debian et un hôte CentOS/RHEL 8 configurés pour l'automatisation Ansible.





Il existe de nombreux articles sur LinuxHint dédiés à l'installation d'Ansible et à la configuration des hôtes pour l'automatisation d'Ansible. Vous pouvez consulter ces articles si nécessaire pour plus d'informations.

Création d'un répertoire de projet

Tout d'abord, créez un répertoire de projet ~/projet/ avec la commande suivante :

$mkdir -pv~/projet/livres de jeu

Naviguez vers le ~/projet/ répertoire comme suit :

$CD~/projet

Fichier d'inventaire de base :

Créer un fichier d'inventaire Ansible hôtes dans le répertoire du projet avec la commande suivante :

$nanohôtes

Vous pouvez saisir les adresses IP des hôtes que vous souhaitez configurer/automatiser à l'aide d'Ansible dans le hôtes fichier d'inventaire.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

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

Si vous souhaitez utiliser des noms DNS au lieu d'adresses IP dans le fichier d'inventaire, vous pouvez également le faire.

Si vous n'avez pas de serveur DNS fonctionnel, vous pouvez utiliser le /etc/hôtes fichier sur votre ordinateur pour la résolution DNS locale.

Pour la résolution DNS locale, ouvrez le /etc/hôtes fichier avec un éditeur de texte ( nano , dans mon cas) comme suit :

$sudo nano /etc/hôtes

Saisissez les adresses IP et les noms DNS souhaités comme suit :

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Une fois cette étape terminée, appuyez sur + X suivie par ET et .

Ouvrir le fichier d'inventaire Ansible hôtes comme suit:

$nanohôtes

Vous pouvez maintenant taper les noms DNS des hôtes que vous souhaitez configurer/automatiser à l'aide d'Ansible dans le hôtes fichier d'inventaire.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Une fois que vous avez terminé, enregistrez le fichier d'inventaire des hôtes en appuyant sur + X suivie par ET et .

Test de la connectivité à tous les hôtes

Maintenant, vous pouvez essayer de pinger tous les hôtes dans le fichier d'inventaire comme suit :

$ansible-jehéberge tout-uansible-m ping

Comme vous pouvez le voir, tous les hôtes du fichier d'inventaire sont accessibles. Nous sommes donc prêts à passer à la section suivante de cet article.

Votre premier livre de jeu Ansible

Créons un simple playbook Ansible ping_all_hosts.yaml dans le cahiers/ annuaire. Cette action cinglera tous les hôtes dans le hôtes fichier d'inventaire, comme précédemment.

$nanolivres de jeu/ping_all_hosts.yaml

Tapez les lignes suivantes dans le ping_all_hosts.yaml Fichier de playbook Ansible :

- hébergeurs : tous
utilisateur : ansible
Tâches:
- nom : Ping tous les hôtes
ping :

Ici,

hôtes : tous – sélectionne tous les hôtes du fichier d'inventaire hôtes .
utilisateur : ansible – indique à Ansible de SSH dans les hôtes du fichier d'inventaire en tant que ansible utilisateur.
Tâches – toutes les tâches qu'Ansible exécutera dans les hôtes sont répertoriées ici. Chacune des tâches a généralement un Nom et une ou plusieurs options spécifiques au module.

Le livre de jeu ping_all_hosts.yaml n'a qu'une seule tâche, envoyer un ping à tous les hôtes dans le fichier d'inventaire hôtes . Le nom de la tâche est Ping tous les hôtes et il utilise le ping module.

Les ping module n'a pas besoin d'autres options. Donc, je l'ai laissé vide (il n'y a rien après les deux points, : )

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

Vous pouvez exécuter le ping_all_hosts.yaml Playbook Ansible comme suit :

$ansible-playbook-jehéberge des playbooks/ping_all_hosts.yaml

Comme vous pouvez le voir, la tâche ping réussit sur tous les hôtes du fichier d'inventaire.

Fichier de configuration Ansible simple

Dans l'exemple précédent, vous deviez utiliser le -je option pour indiquer à Ansible quel fichier d'inventaire utiliser. Dans mon cas, c'est le hôtes fichier d'inventaire.

$ansible-playbook-jehéberge des playbooks/ping_all_hosts.yaml

Si vous ne souhaitez pas transmettre un dossier d'inventaire avec le -je chaque fois que vous exécutez un playbook Ansible, tout ce que vous avez à faire est de définir un fichier d'inventaire par défaut pour votre projet.

Pour ce faire, créez un nouveau fichier de configuration Ansible ansible.cfg dans la racine de votre projet comme suit :

$nanoansible.cfg

Tapez les lignes suivantes dans le ansible.cfg déposer:

[valeurs par défaut]
inventaire = ./hôtes

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

Vous pouvez exécuter le même playbook Ansible comme suit :

$ansible-playbook playbooks/ping_all_hosts.yaml

Comme vous pouvez le voir, le playbook utilise le hôtes fichier d'inventaire par défaut. Vous pouvez toujours utiliser le -je option pour spécifier un fichier d'inventaire différent, si vous le souhaitez. Ansible est très flexible.

Regroupement des hôtes dans le fichier d'inventaire

Jusqu'à présent, je vous ai montré comment exécuter un ensemble de tâches (playbook) dans tous les hôtes du fichier d'inventaire. Mais que se passe-t-il si vous souhaitez exécuter un ensemble de tâches sur certains hôtes et un autre ensemble de tâches sur d'autres hôtes ? Vous pouvez regrouper les hôtes dans le fichier d'inventaire et exécuter différentes tâches sur les groupes d'hôtes.

Dans cette section, je vais vous montrer comment regrouper des hôtes dans le fichier d'inventaire et comment travailler avec des groupes d'hôtes.

Tout d'abord, ouvrez le fichier d'inventaire hôtes comme suit:

$nanohôtes

Tapez les lignes suivantes dans le hôtes fichier d'inventaire :

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Ici, j'ai créé deux groupes d'hôtes : debian10 et centos8 .

Dans le debian10 groupe, j'ai deux hôtes: vm1.nodekite.com et vm2.nodekite.com

Dans le centos8 groupe, j'ai deux hôtes: vm3.nodekite.com et vm4.nodekite.com

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

Nous allons maintenant créer un nouveau playbook ping_debian10_hosts.yaml , qui cinglera les hôtes comme avant, mais seulement les hôtes dans le debian10 groupe d'accueil.

Créer un livre de jeu ping_debian10_hosts.yaml dans le cahiers/ répertoire comme suit :

$nanolivres de jeu/ping_debian10_hosts.yaml

Tapez les lignes suivantes dans le ping_debian10_hosts.yaml Livre de jeu Ansible :

- hôtes : debian10
utilisateur : ansible
Tâches:
- nom : Ping tout Debiandixhôtes
ping :

À la place de hôtes : tous , J'ai ajouté hôtes : debian10 ici. debian10 est le groupe hôte. Ce playbook s'exécutera uniquement sur les hôtes dans le debian10 groupe d'accueil.

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

Exécutez le playbook comme suit :

$ansible-playbook playbooks/ping_debian10_hosts.yaml

Comme vous pouvez le voir, seuls les hôtes du debian10 groupe d'hôtes sont ping.

En utilisant la même méthode, créez un autre playbook ping_centos8_hosts.yaml comme suit:

$nanolivres de jeu/ping_centos8_hosts.yaml

Tapez les lignes suivantes dans le ping_centos8_hosts.yaml Livre de jeu Ansible :

- hôtes : centos8
utilisateur : ansible
Tâches:
- nom: Ping tous les CentOS8hôtes
ping :

De la même manière, j'ai ajouté hôtes : centos8 ici. centos8 est le groupe hôte. Ce playbook s'exécutera uniquement sur les hôtes dans le centos8 groupe d'accueil.

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

Exécutez le playbook comme suit :

$ansible-playbook playbooks/ping_centos8_hosts.yaml

Comme vous pouvez le voir, seuls les hôtes du centos8 groupe d'hôtes sont ping.

Types de variables Ansible

Il existe différents types de variables dans Ansible. Les principaux types de variables sont Variables Ansible Facts et Variables définies par l'utilisateur .

Variables Ansible Facts : En fonction de l'hôte sur lequel Ansible travaille, Ansible génère des variables de faits Ansible. Les variables de faits Ansible contiennent des informations sur l'hôte, telles que les adresses IP, le nom d'hôte, le nom de domaine, la date, l'heure, les variables d'environnement du shell, etc.

Variables définies par l'utilisateur : Ce sont des variables personnalisées définies par l'utilisateur. Vous pouvez transmettre des variables définies par l'utilisateur à partir de la ligne de commande ou en utilisant le fichier d'inventaire.

Les variables principalement définies par l'utilisateur sont de deux types : Variables de groupe et Variables hôtes .

Priorité variable Ansible

La priorité variable d'Ansible est : Variables de ligne de commande > Variables d'hôte > Variables de groupe

Si vous définissez la même variable que la variable hôte et la variable de groupe, la variable hôte sera appliquée.

De même, les variables que vous définissez à partir de la ligne de commande lors de l'exécution d'un playbook remplaceront à la fois les variables d'hôte et de groupe.

Travailler avec des variables Ansible Facts

Dans cette section, je vais vous montrer comment travailler avec les variables de faits Ansible. Alors, commençons !

Vous pouvez lister toutes les variables Ansible Facts des hôtes dans votre hôtes fichier d'inventaire comme suit :

$ansible tous-uansible-mmettre en place

Comme vous pouvez le voir, toutes les variables Ansible Facts sont répertoriées au format JSON. C'est une très longue liste.

Comme la liste est assez longue, vous pouvez l'ouvrir avec un programme de pager tel que moins comme suit:

$ansible tous-uansible-mmettre en place| moins

Maintenant, vous pouvez faire défiler la sortie vers le haut, le bas, la gauche et la droite selon vos besoins.

Vous pouvez également rechercher des noms de variables à partir du pager. Pour ce faire, appuyez sur le / touche de votre clavier. Ensuite, saisissez la chaîne de recherche ( nom d'hôte dans mon cas) et appuyez sur .

Comme vous pouvez le voir, la variable de faits Ansible qui correspond à la chaîne de recherche est ansible_hostname . Vous pouvez appuyer sur N aller au prochain match et P pour aller à la correspondance précédente à partir du pager. C'est ainsi que vous trouvez la variable de faits Ansible dont vous avez besoin pour votre projet Ansible.

Voyons maintenant comment accéder aux variables de faits Ansible.

Créer un nouveau livre de jeu print_variable1.yaml comme suit:

$nanolivres de jeu/print_variable1.yaml

Tapez les lignes suivantes dans le print_variable1.yaml déposer:

- hébergeurs : tous
utilisateur : ansible
Tâches:
-nom: Imprimernom d'hôtede tous les hôtes
déboguer:
message :'{{ ansible_hostname }}'

Ici, j'ai ajouté une tâche Imprimer le nom d'hôte de tous les hôtes . Cette tâche utilise l'Ansible déboguer module pour imprimer un message lorsque le playbook s'exécute.

message est le seul paramètre requis de la déboguer module. Les message Le paramètre accepte une chaîne entre guillemets, qui est le message qui sera imprimé sur la console.

Ici, {{ Nom de variable }} format est utilisé pour accéder à une variable. Dans ce cas, {{ ansible_hostname }} est utilisé pour imprimer le ansible_hostname variable de chacun des hôtes dans le fichier d'inventaire.

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

Vous pouvez également accéder à la variable de faits Ansible comme ansible_facts[variable_name] . Alors le ansible_hostname variable deviendra ansible_facts[nom d'hôte] .

On peut réécrire le print_variable1.yaml playbook comme celui-ci aussi. Nous obtiendrons le même résultat.

- hébergeurs : tous
utilisateur : ansible
Tâches:
-nom: Imprimernom d'hôtede tous les hôtes
déboguer:
message :'{{ ansible_facts['variable_name'] }}'

Exécuter le playbook print_variable1.yaml comme suit:

$ansible-playbook playbooks/print_variable1.yaml

Comme vous pouvez le voir, le nom d'hôte de chacun des hôtes dans le fichier d'inventaire est imprimé sur la console.

Imprimons maintenant l'adresse IPv4 par défaut de chaque hôte ainsi que le nom d'hôte. Comme vous pouvez le voir, l'adresse IPv4 par défaut de l'hôte est accessible à l'aide de la adresse propriété de la ansible_default_ipv4 objet.

Créer un nouveau livre de jeu print_variable2.yaml comme suit:

$nanolivres de jeu/print_variable2.yaml

Tapez les lignes suivantes dans le print_variable2.yaml déposer:

- hébergeurs : tous
utilisateur : ansible
Tâches:
-nom: Imprimernom d'hôtede tous les hôtes
déboguer:
message :'{{ ansible_hostname }} - {{ ansible_default_ipv4.address }}'

Ce livre de jeu est le même que précédemment. La seule différence est la nouvelle variable {{ ansible_default_ipv4.address }} dans le message option de la déboguer module.

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

Exécutez le print_variable2.yaml livre de jeu comme suit :

$ansible-playbook playbooks/print_variable2.yaml

Comme vous pouvez le voir, l'adresse IPv4 par défaut et le nom d'hôte des hôtes sont imprimés sur la console.

Voici donc comment vous travaillez avec les variables Ansible Facts.

Définition de variables définies par l'utilisateur à partir de la ligne de commande :

Dans cette section, je vais vous montrer comment définir des variables définies par l'utilisateur à partir de la ligne de commande lors de l'exécution de playbooks Ansible.

Tout d'abord, créez un nouveau playbook print_variable3.yaml comme suit:

$nanolivres de jeu/print_variable3.yaml

Tapez les lignes suivantes dans le print_variable3.yaml déposer:

- hébergeurs : tous
utilisateur : ansible
Tâches:
-nom: Imprimercommandervariable de ligne
déboguer:
message :« Bienvenue {{ nom d'utilisateur }} »

Ici, j'ai utilisé le déboguer module pour imprimer le message Bienvenue {{ nom d'utilisateur }} . Nom d'utilisateur est une variable qui sera remplacée lors de l'exécution du playbook.

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

Exécuter le playbook print_variable3.yaml comme suit:

$ansible-playbook-Et 'nom d'utilisateur = Bob'livres de jeu/print_variable3.yaml

REMARQUE: Ici, -Et L'option est utilisée pour passer un Nom d'utilisateur variable avec la valeur Bob au livre de jeu print_variable3.yaml à partir de la ligne de commande.

Comme vous pouvez le voir, le message Bienvenue Bob est imprimé sur la console.

Voyons maintenant comment passer plusieurs variables depuis la ligne de commande.

Créer un nouveau livre de jeu print_variable4.yaml comme suit:

$nanolivres de jeu/print_variable4.yaml

Tapez les lignes suivantes dans le print_variable4.yaml déposer:

- hébergeurs : tous
utilisateur : ansible
Tâches:
- nom : imprime les variables définies par l'utilisateur
déboguer:
message :'username={{ username }} http_port={{ http_port }}'

Le playbook devrait vous être très familier en ce moment. Tout ce qu'il fait est d'imprimer les 2 variables Nom d'utilisateur et http_port sur la console.

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

Vous pouvez maintenant passer le Nom d'utilisateur et http_port variable au playbook en utilisant deux -Et option comme suit :

$ ansible-playbook-Et 'nom d'utilisateur = Bob' -Et 'http_port=8080'
livres de jeu/print_variable4.yaml

Ou, vous pouvez simplement séparer les variables par un espace, comme suit :

$ ansible-playbook-Et 'nom d'utilisateur=Bob http_port=8080'
livres de jeu/print_variable4.yaml

Comme vous pouvez le voir, le Nom d'utilisateur et http_port les variables sont imprimées sur la console.

Utilisation de variables de groupe définies par l'utilisateur

Supposons que vous souhaitiez ajouter des variables à un groupe d'hôtes. Cette action est très facile à faire dans Ansible.

Tout d'abord, ouvrez votre hôtes fichier d'inventaire comme suit :

$nanohôtes

Tapez les lignes suivantes dans votre hôtes fichier d'inventaire :

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10:vars]
nom d'utilisateur = Lily
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8 : var]
nom d'utilisateur = Bob
http_port =7878

Comme vous pouvez le voir, j'ai créé une nouvelle section [debian10:vars] pour debian10 groupe d'hôtes et ajouté les variables ( Nom d'utilisateur et http_port ) pour debian10 groupe d'accueil là-bas.

De la même manière, j'ai créé une nouvelle section [centos8 : vars] pour centos8 groupe d'hôtes et ajouté les variables ( Nom d'utilisateur et http_port ) pour centos8 groupe d'accueil là-bas.

Une fois que vous avez terminé, enregistrez le hôtes fichier d'inventaire en appuyant sur + X suivie par ET et .

Exécutez le print_variable4.yaml playbooks comme suit :

$ansible-playbook playbooks/print_variable4.yaml

Comme vous pouvez le voir, les variables correctes sont transmises à chacun des hôtes en fonction de leur groupe d'hôtes.

Utilisation de variables hôtes définies par l'utilisateur

Dans cette section, je vais vous montrer comment définir des variables pour des hôtes spécifiques dans le fichier d'inventaire.

Tout d'abord, ouvrez le hôtes fichier d'inventaire comme suit :

$nanohôtes

Pour ajouter des variables à un hôte spécifique (par exemple, vm1.nodekite.com ), ajoutez simplement un espace/une tabulation après le nom IP/DNS de l'hôte et saisissez vos variables, comme indiqué dans la capture d'écran ci-dessous.

Vous pouvez également ajouter plusieurs variables. Séparez simplement chaque variable par un espace.

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

Exécutez le print_variable4.yaml playbooks comme suit :

$ansible-playbook playbooks/print_variable4.yaml

Comme vous pouvez le voir, les variables ne sont définies que pour le vm1.nodekite.com hôte. Les autres hôtes ont des variables de groupe qui leur sont appliquées.

Génération rapide de fichiers d'inventaire avec des plages

Vous pouvez utiliser des plages pour générer rapidement des fichiers d'inventaire Ansible si vos adresses IP d'hôte ou vos noms DNS sont cohérents (c'est-à-dire qu'ils ont un format spécifique).

Dans les exemples précédents, j'ai utilisé les hôtes vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com et vm4.nodekite.com . Au lieu de taper 4 lignes, j'aurais pu simplement taper vm[1:4].nodekite.com dans le fichier d'inventaire.

Pour expérimenter avec les plages, ouvrez le hôtes fichier d'inventaire comme suit :

$nanohôtes

Supprimez tous les hôtes et variables des fichiers d'inventaire.

Nous pouvons maintenant remplacer vm1.nodekite.com et vm2.nodekite.com avec vm[1:2].nodekite.com pour debian10 groupe hôte comme suit.

De la même manière, nous pouvons remplacer vm3.nodekite.com et vm4.nodekite.com avec vm[3:4].nodekite.com pour centos8 groupe d'accueil.

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

Exécutez le ping_all_hosts.yaml comme suit:

$ansible-playbook playbooks/ping_all_hosts.yaml

Comme vous pouvez le voir, les plages d'hôtes ont été étendues lorsque j'ai exécuté le playbook.

Stockage de variables dans différents fichiers

Le stockage des variables de groupe et des variables hôtes dans le même fichier d'inventaire est très simple. Mais vous recherchez peut-être plus de flexibilité. Surtout lorsque vous souhaitez utiliser des plages dans votre fichier d'inventaire, car vous ne pouvez plus définir de variables hôte si vous utilisez des plages. Eh bien, vous pouvez stocker des variables de groupe et des variables hôtes dans différents fichiers. Dans cette section, je vais vous montrer comment faire.

Par défaut, Ansible recherche les variables de groupe dans le var_groupes / répertoire et variables d'hôte dans le host_vars / annuaire.

Alors, créez le var_groupes / et host_vars / répertoire comme suit :

$mkdir -pv {hôte, groupe}_dont

Pour définir des variables de groupe pour le debian10 groupe d'hôtes, créer un fichier debian10 (identique au nom du groupe) dans le var_groupes / répertoire comme suit :

$nanovar_groupe/debian10

Saisissez vos variables comme suit :

nom d'utilisateur : Lily
http_port : 4343

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

De la même manière, pour définir des variables de groupe pour le centos8 groupe d'hôtes, créer un fichier centos8 (identique au nom du groupe) dans le var_groupes / répertoire comme suit :

$nanovar_groupe/centos8

Saisissez vos variables comme suit :

nom d'utilisateur : Bob
http_port : 7878

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

Exécutez le print_variable4.yaml livre de jeu comme suit :

$ansible-playbook playbooks/print_variable4.yaml

Comme vous pouvez le voir, les variables de groupe sont correctement définies pour chaque groupe d'hôtes.

Pour définir des variables hôte pour l'hôte vm1.nodekite.com , créez un fichier vm1.nodekite.com (identique au nom d'hôte ou à l'adresse IP) dans le host_vars / répertoire comme suit :

$nanovm1.nodekite.com

Saisissez vos variables hôte comme suit :

nom d'utilisateur : Alex
http_port : 7788

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

Exécutez le print_variable4.yaml livre de jeu comme suit :

$ ansible-playbook playbooks/print_variable4.yaml
[

Comme vous pouvez le voir, les variables hôte sont correctement définies pour l'hôte vm1.nodekite.com .

Travailler avec des boucles dans Ansible

Dans cette section, je vais vous montrer comment utiliser les boucles dans Ansible.

Tout d'abord, créez un nouveau playbook boucle1.yaml dans le cahiers/ répertoire comme suit :

$nanolivres de jeu/boucle1.yaml

Tapez les lignes suivantes dans le boucle1.yaml livre de jeu :

- hébergeurs : tous
utilisateur : ansible
Tâches:
- nom : Imprimer la liste des utilisateurs
déboguer:
message :'Utilisateur : {{ élément }}'
avec_éléments :
-Alex
- Bob
- Lys

Ici, j'ai 1 tâche qui imprime une liste d'utilisateurs à l'aide de loop.

Pour définir les valeurs d'itération de la tâche, vous utilisez le avec_éléments module. Ensuite, vous ajoutez les valeurs une par une.

avec_éléments :
-Alex
- Bob
- Lys

Vous accédez à la valeur de l'itération en cours à l'aide de la Objet variable.

déboguer:
message :'Utilisateur : {{ élément }}'

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

Exécutez le boucle1.yaml livre de jeu comme suit :

$ansible-playbook playbooks/boucle1.yaml

Comme vous pouvez le voir, la même tâche s'est exécutée pour chaque élément sur chaque hôte. Donc, la boucle fonctionne.

Travailler avec des conditions dans Ansible

Si vous souhaitez exécuter des tâches en fonction de certaines conditions, cette section est pour vous.

Pour exécuter des tâches en fonction de la condition, vous pouvez utiliser le lorsque module d'Ansible. Voyons un exemple de ce module. Tout d'abord, créez un nouveau playbook condition1.yaml comme suit:

$nanolivres de jeu/condition1.yaml

Tapez les lignes suivantes dans le condition1.yaml livre de jeu :

- hébergeurs : tous
utilisateur : ansible
Tâches:
- nom : exécuter cette tâche uniquement sur Debian
déboguer:
message :'cette tâche s'exécute sur Debian'
quand : ansible_facts['Distribution']=='Debian'

Ici,

ansible_facts[‘distribution’] == ‘Debian’ est utilisé pour vérifier si le Distribution est Debian . La tâche ne s'exécutera que si la distribution est Debian.

Les ansible_facts[‘distribution’] est utilisé pour accéder à la variable Ansible Facts ansible_distribution . Vous pouvez également vérifier la version de distribution en utilisant le ansible_distribution_major_version variable.

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

Exécutez le condition1.yaml livre de jeu comme suit :

$ansible-playbook playbooks/condition1.yaml

Comme vous pouvez le voir, la tâche n'a été exécutée que sur les hôtes Debian. La tâche ne s'est pas exécutée sur les hôtes CentOS.

Vous pouvez également vérifier plusieurs conditions en même temps et exécuter la tâche uniquement si toutes les conditions sont vraies. Voyons un exemple.

Créer un nouveau livre de jeu condition2.yaml comme suit:

$nanolivres de jeu/condition2.yaml

Tapez les lignes suivantes dans le condition2.yaml déposer:

- hébergeurs : tous
utilisateur : ansible
Tâches:
- nom : exécuter cette tâche uniquement sur Debiandix
déboguer:
message :'cette tâche s'exécute sur Debian 10'
quand : ansible_facts['Distribution']=='Debian'
et ansible_facts['distribution_major_version']=='dix'

Ici, la tâche ne s'exécutera que si la distribution est Debian ( ansible_facts[‘distribution’] == ‘Debian’ ) et la version est 10 ( ansible_facts['distribution_major_version'] == '10' ). Si les deux conditions sont vraies, la tâche s'exécutera. Sinon, la tâche ne s'exécutera pas.

j'ai utilisé le et mot-clé pour vérifier si les deux conditions sont vraies ici. Si vous voulez vérifier si l'une des conditions est vraie, vous pouvez utiliser le ou mot-clé à la place.

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

Exécuter le playbook condition2.yaml comme suit:

$ansible-playbook playbooks/condition2.yaml

Comme vous pouvez le voir, la tâche s'est exécutée uniquement sur les hôtes Debian 10.

Changeons le playbook condition2.yaml pour exécuter la tâche uniquement sur les hôtes Debian 8 comme suit.

Comme vous pouvez le voir, tous les hôtes ont été ignorés car je n'ai aucun hôte Debian 8 dans le fichier d'inventaire.

Travailler avec le module Ansible apt

Les apte module d'Ansible est utilisé pour installer un package logiciel spécifique sur les hôtes Ubuntu/Debian. Voyons comment utiliser ce module.

Tout d'abord, créez un nouveau playbook apt1.yaml dans le cahiers/ répertoire comme suit :

$nanolivres de jeu/apt1.yaml

Tapez les lignes suivantes dans le apt1.yaml livre de jeu :

- hôtes : debian10
utilisateur : ansible
devenir vrai
Tâches:
- nom : Installer apache2
apte:
nom : apache2
état : dernier

Les apte module ne nécessite que le Nom du package que vous souhaitez installer/mettre à niveau/supprimer et le Etat du paquet.

Ici, j'essaye d'installer le apache2 emballer ( nom : apache2 ) sur mes hôtes Debian 10. Comme j'essaie d'installer un package et de le mettre à niveau si une nouvelle version est disponible, le Etat devrait être dernier .

Etat accepte également les options suivantes :

- absent – Le package sera supprimé s'il est déjà installé.
- dernier – Le package sera mis à niveau si une mise à jour est disponible. Si le package n'est pas déjà installé, il sera installé.
- présent – Le package sera installé s'il n'est pas déjà installé. Mais le package ne sera pas mis à niveau si une mise à jour est disponible.

Notez que j'ai ajouté devenir vrai dans le livre de jeu. Cela donnera le ansible les privilèges sudo de l'utilisateur pour modifier la structure du système de fichiers (c'est-à-dire installer/mettre à niveau/supprimer des packages). Sans devenir vrai , les apte module ne pourra pas installer le apache2 emballer.

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

Exécutez le apt1.yaml livre de jeu comme suit :

$ansible-playbook playbooks/apt1.yaml

Comme vous pouvez le voir, le playbook s'est exécuté avec succès sur les hôtes Debian 10.

Comme vous pouvez le voir, le apache2 package est installé sur mes hôtes Debian 10.

Travailler avec le module Ansible dnf/yum

Les dnf et Miam module d'Ansible est utilisé pour installer un progiciel spécifique sur les hôtes CentOS/RHEL. Vous pouvez utiliser ce module de la même manière que vous avez fait le apte module dans la section précédente de cet article.

Les deux dnf et Miam les modules acceptent les mêmes paramètres. Vous pouvez utiliser le dnf module sur les hôtes CentOS/RHEL 8, et Miam sur CentOS/RHEL 7 ou plus ancien.

Voyons maintenant un exemple de ce module.

Tout d'abord, créez un nouveau playbook dnf1.yaml dans le cahiers/ répertoire comme suit :

$nanolivres de jeu/dnf1.yaml

Tapez les lignes suivantes dans le dnf1.yaml livre de jeu :

- hôtes : centos8
utilisateur : ansible
devenir vrai
Tâches:
- nom : installer le paquet httpd
dnf :
nom : httpd
état : dernier

Les dnf et Miam module ne nécessite que le Nom du package que vous souhaitez installer/mettre à niveau/supprimer et le Etat du paquet.

Ici, j'essaye d'installer le httpd emballer ( nom : httpd ) sur mes hôtes CentOS 8. Comme j'essaie d'installer un package et que j'aimerais également le mettre à niveau si une nouvelle version est disponible, le Etat devrait être dernier .

Etat accepte les options suivantes :

- absent – Le package sera supprimé s'il est déjà installé.
- dernier – Le package sera mis à niveau si une mise à jour est disponible. Si le package n'est pas déjà installé, il sera installé.
- présent – Le package sera installé s'il n'est pas déjà installé. Mais le package ne sera pas mis à niveau si une mise à jour est disponible.

Notez que j'ai ajouté devenir vrai dans le livre de jeu. Cela donne le ansible les privilèges sudo de l'utilisateur pour modifier la structure du système de fichiers (c'est-à-dire installer/mettre à niveau/supprimer des packages). Sans devenir vrai , les apte module ne pourra pas installer le httpd emballer.

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

Exécutez le dnf1.yaml livre de jeu comme suit :

$ansible-playbook playbooks/dnf1.yaml

Comme vous pouvez le voir, le playbook s'est exécuté avec succès sur l'hôte CentOS 8.

Travailler avec le module de service Ansible

Les service Le module d'Ansible est utilisé pour démarrer, arrêter, redémarrer, activer (ajouter un service au démarrage) et désactiver (supprimer le service du démarrage) des services dans vos hôtes.

Dans les sections précédentes, je vous ai montré comment installer le package de serveur HTTP Apache à l'aide de l'Ansible apte , dnf et Miam modules. Vérifions maintenant que le service du serveur HTTP Apache est en cours d'exécution et a été ajouté au démarrage du système.

Je travaillerai avec mes hôtes Debian 10. Mais, vous pouvez travailler avec des hôtes CentOS 8, si vous le souhaitez. Ajustez simplement le playbook en conséquence.

Tout d'abord, créez un nouveau playbook Ansible apt2.yaml comme suit:

$nanolivres de jeu/apt2.yaml

Tapez les lignes suivantes dans le apt2.yaml livre de jeu :

- hôtes : debian10
utilisateur : ansible
devenir vrai
Tâches:
- nom : Installer apache2
apte:
nom : apache2
état : dernier
- nom : démarre le service apache2
service:
nom : apache2
état : commencé
activé : vrai

Ici, j'ai ajouté une nouvelle tâche, Démarrer le service apache2 .

nom : apache2 – le service sur lequel je travaille est apache2 .

état : commencé – le service doit être en cours d'exécution.

activé : vrai – le service doit être ajouté au démarrage du système.

Les Etat paramètre accepte d'autres valeurs.

- rechargé – Le service doit recharger les fichiers de configuration.
- redémarré – Le service doit être redémarré.
- commencé – Le service doit être en cours d'exécution. Si le service n'est pas en cours d'exécution, démarrez le service.
- arrêté – Le service doit être arrêté. Si le service est en cours d'exécution, arrêtez le service.

Exécuter le playbook apt2.yaml comme suit:

$ansible-playbook playbooks/apt2.yaml

Comme vous pouvez le voir, le playbook s'est exécuté avec succès.

Comme vous pouvez le voir, le apache2 le service s'exécute sur mes hôtes Debian 10.

Travailler avec le module de copie Ansible

L'Ansible copie module est principalement utilisé pour copier des fichiers de votre ordinateur vers des hôtes distants.

Dans la section précédente, j'ai installé le serveur Web Apache 2 sur mes hôtes Debian 10. Copions maintenant un index.html à la racine Web des hôtes Debian 10.

Tout d'abord, créez un nouveau répertoire des dossiers/ comme suit:

$mkdir -vdes dossiers

Créer un nouveau fichier index.html dans le des dossiers/ répertoire comme suit :

$nanodes dossiers/index.html

Tapez les lignes suivantes dans le index.html déposer:


< html >
< diriger >
< Titre >Serveur Web par Ansible</ Titre >
</ diriger >
< corps >
< h1 >Bienvenue sur LinuxHint</ h1 >
< p >Ce serveur Web a été déployé avec Ansible.</ p >
</ corps >
</ html >

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

Créer un nouveau playbook Ansible apt3.yaml comme suit:

$nanolivres de jeu/apt3.yaml

Tapez les lignes suivantes dans le apt3.yaml déposer:

- hôtes : debian10
utilisateur : ansible
devenir vrai
Tâches:
- nom : Installer apache2
apte:
nom : apache2
état : dernier
- nom : copiez index.html sur le serveur
copie:
src : ../des dossiers/index.html
destination ://www/html/index.html
mode : 0644
propriétaire : www-data
groupe : www-données
- nom : démarre le service apache2
service:
nom : apache2
état : commencé
activé : vrai

Ici, la tâche Copier index.html sur le serveur copie le index.html du des dossiers/ répertoire vers le /var/www/html/ répertoire des hôtes Debian 10.

src : ../files/index.html – Le chemin du fichier source.
destination : /var/www/html/index.html – Le chemin du fichier de destination.
mode : 0644 – Les autorisations pour l'utilisateur du fichier (6 – lecture et écriture), le groupe (4 – lecture) et autres (4 – lecture).
propriétaire : www-data – Définissez le propriétaire du fichier sur www-données .
groupe : www-données – Définissez le groupe du fichier sur www-données .

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

Exécutez le apt3.yaml livre de jeu comme suit :

$ansible-playbook playbooks/apt3.yaml

Comme vous pouvez le voir, la tâche Copier index.html sur le serveur est réussi.

Comme vous pouvez le voir, le index.html fichier a été copié sur les hôtes Debian 10.

Comme vous pouvez le voir, le serveur Web Debian 10 sert le index.html page que je viens de copier sur les hôtes Debian 10.

Voilà donc les bases d'Ansible. Vous pouvez en savoir plus sur Ansible en lisant la documentation officielle d'Ansible. Merci d'avoir lu cet article.