Comment créer des pièces et des livres de jeu anibles - Part 5
- 2250
- 302
- Anaïs Charles
Dans ce Partie 5 de la série ANSIBLE, nous expliquerons comment créer ANSIBLE Plays et Manuels en utilisant des modules anibles.
Anable navires avec des scripts autonomes appelés modules qui sont utilisés dans manuels Pour l'exécution de tâches spécialisées sur les nœuds distants.
Modules être utile pour l'automatisation des tâches telles que la gestion des packages, l'archivage et la copie de fichiers pour n'en citer que quelques-uns. Ils vous permettent de faire des ajustements sur les fichiers de configuration et de gérer des appareils tels que des routeurs, des commutateurs, des équilibreurs de chargement, des pare-feu et une multitude d'autres appareils.
L'objectif de ce sous-thèse est de vous donner un aperçu de diverses tâches qui peuvent être accomplies par Modules anibles:
Gestion des packages dans Linux
La gestion des emballages est l'une des tâches les plus essentielles et les plus fréquentes effectuées par les administrateurs de systèmes. ANNIBLE ENTRAITE avec des modules qui vous aident à exécuter des tâches de gestion des emballages Chapeau rouge et Debian systèmes basés.
Ils sont relativement faciles à deviner. Il y a le module APT Pour la gestion des packages APT pour Debian, l'ancien module miam pour la gestion des paquets Yum et module DNF Associé à des distributions RHEL plus récentes.
Voici quelques exemples de la façon dont les modules peuvent être utilisés dans un livre de jeu:
Exemple 1: Installation du serveur Web Apache sur RHEL 8
--- - Nom: Installer Apache Webserver Hosts: tâches de serveurs Web: - Nom: Installer Httpd DNF: Nom: Httpd State: Dernière
Exemple 2: Installation du serveur Web Apache sur Debian 10
--- - Nom: Installer Apache Webserver Hosts: Bases de données Tâches: - Nom: Installer Apache Webserver Apt: Nom: Apache2 État: Dernière
Module de service
Le module de service permet aux administrateurs système de démarrer, d'arrêter, de mettre à jour, de mettre à niveau et de recharger les services sur le système.
Exemple 1: Démarrage du serveur Web Apache
--- - Nom: Démarrer le service httpd, sinon démarré Service: Nom: Httpd État: Démarré
Exemple 2: Arrêt d'Apache Webserver
--- - Nom: Stop Service Httpd Service: Nom: Httpd State: arrêté
Exemple 3: redémarrer une interface réseau ENP2S0
--- - Nom: Redémarrer le service réseau pour l'interface ETH0 Service: Nom: État du réseau: Args redémarré: ENP2S0
Module de copie
Comme son nom l'indique, Copier le module copie les fichiers d'un seul emplacement sur la machine distante à un emplacement différent sur la même machine.
Exemple 1: Copie de fichiers de Linux local au Linux distant
--- - Nom: Copier le fichier avec le propriétaire et les autorisations Copier: Src: / etc / fichiers / tecmint.confes dest: / srv / tecmint.Propriétaire de Conf: groupe Tecmint: Mode Tecmint: «0644»
Le playbook copie le fichier de configuration Tecmint.confli depuis / etc / fichiers / répertoire de / srv / répertoire comme Tecmint utilisateur avec 0644 autorisation.
Les autorisations peuvent également être représentées en utilisant une représentation symbolique comme indiqué dans la dernière ligne.
Exemple 2: Copie de fichiers de Linux local au Linux distant
--- - Nom: Copier le fichier avec le propriétaire et les autorisations Copier: Src: / etc / fichiers / tecmint.confes dest: / srv / tecmint.CONFROPORT: Tecmint Group: Tecmint Mode: U = RW, G = R, O = R
Les autorisations dans l'exemple précédent peuvent être représentées comme indiqué dans la dernière ligne, l'utilisateur est affecté lire et écrire Autorisations, le groupe se voit attribuer des autorisations d'écriture et le reste du monde se voit attribuer des autorisations.
Module de fichier
Le module de fichier est utilisé pour effectuer de nombreuses opérations de fichiers, y compris la création de fichiers et répertoires, d'attribuer des autorisations de fichiers et de définir des liens symboliques.
Exemple 1: Effectuez les autorisations de fichiers Linux
--- - Nom: Modifier la propriété du fichier, le groupe et les autorisations Fichier: chemin: / etc / tecmint.Propriétaire de Conf: groupe Tecmint: Mode Tecmint: «0644»
Le jeu ci-dessus crée un fichier appelé Tecmint.confli dans le /etc Autorisations de réglage du répertoire sur 0644.
Exemple 2: Supprimer le fichier Linux
--- - Nom: Supprimer le fichier (supprimer le fichier) Fichier: Chemin: / etc / Tecmint.État confoir: absent
Cela supprime ou supprime le fichier Tecmint.confli.
Exemple 3: Créez un répertoire
--- - Nom: Créez un répertoire s'il n'existe pas de fichier: chemin: / etc / MyDirectory State: Mode du répertoire: '0777'
Cela créera un répertoire dans le /etc Autorisations de réglage du répertoire sur 0777.
Exemple 4: Supprimer récursiver un répertoire
--- - Nom: Suppression récursive d'un fichier de répertoire: chemin: / etc / tecmint.État confoir: absent
Le jeu ci-dessus supprime un répertoire récursivement.
Module LineInfile
Le lineinfile Le module est utile lorsque vous souhaitez modifier une seule ligne dans un fichier. Il peut remplacer une ligne existante.
Exemple 1: manipuler les fichiers dans Linux
--- - Nom: Assurez-vous que SELINUX est défini sur l'application du mode LineInfile: Path: / etc / selinux / config regexp: '^ selinux =' Line: selinux = désactivé
La pièce ci-dessus set Selinux valeur de désactivé.
Selinux = handicapé
Exemple 2: Alter les fichiers dans Linux
--- - Nom: Ajoutez une ligne à un fichier si le fichier n'existe pas, sans passer regexp lineinfile: path: / etc / hosts ligne: 10.200.50.51 Tecmint.com Create: Oui
Cela ajoute l'entrée dix.200.50.51 Tecmint.com au / etc / hôtes déposer.
Module d'archivage
Un Archive Le module est utilisé pour la création d'une archive compressée d'un seul ou multiple. Il suppose que la source de compression existe est présente sur la destination cible. Après l'archival, le fichier source peut ensuite être supprimé ou supprimé à l'aide de l'instruction supprimer = vrai
.
Exemple 1: Créez un fichier d'archive
- Nom: répertoire de compresse / path / vers / tecmint_dir / dans / path / to / tecmint.Tgz Archive: Path: / Path / To / Tecmint_Dir dest: / Path / To / Tecmint.tgz Cela compresse le répertoire / path / vers / Tecmint_dir vers / path / to / tecmint.tgz
Exemple 2: Créez un fichier d'archive et supprimez
- Nom: Compression Fichier régulier / chemin / vers / Tecmint dans / path / to / foo.GZ et supprimez-le Archive: chemin: / path / to / tecmint dest: / path / to / tecmint.TGZ Supprimer: oui
Dans le jeu ci-dessus, le fichier source / chemin / vers / tecmint est supprimé une fois l'archivage terminé.
Exemple 3: Créez un fichier d'archive
- Nom: Créez une archive BZ2 de / path / vers / Tecmint Archive: Path: / path / to / tecmint Format: bz2
Cela crée un fichier compressé dans bz2 format du / chemin / vers / tecmint déposer.
Module git
Le module gère les caisses GIT des référentiels logiciels.
Exemple 1: Vérifiez les référentiels Git
- git: repo: 'https: // foosball.exemple.org / chemin / vers / repo.GIT 'DEST: / SRV / VERSION DE CHECKOT: version 0.22
Module de commande
L'un des modules les plus couramment utilisés, le commande Le module prend le nom de commande et ensuite suivi d'une liste d'arguments. La commande est passée de la même manière que vous tapez un shell Linux.
Exemple 1: exécutez une commande
- Nom: Exécution d'une commande à l'aide de la commande du module de commande: Cat Helloworld.SMS
Exemple 2: Vérifiez la disponibilité de Linux distant
--- - Nom: Vérifiez les hôtes de disponibilité de l'hôte distant: Tâches des serveurs: - Nom: Exécutez la commande Uptime sur le module de commande Register: UptimeOutput Commande: "Uptime" - Debug: var: UptimeOutput.stdout_lines
Le module de commande récupère le temps de disponibilité des serveurs distants.
Variables pour récupérer les résultats des commandes en cours d'exécution
Généralement, Anable Les livres de jeu sont utilisés pour exécuter des tâches sur les hôtes gérés sans afficher la sortie sur la ligne de commande. Il y a des cas, cependant, que vous pourriez être tenu de capturer la sortie ou les résultats. Dans cette section, nous vous guidons à travers la façon dont vous pouvez capturer la sortie d'un manuel dans une variable et l'affichage plus tard.
Un registre ANSIBLE est utilisé pour capturer la sortie d'une tâche et l'enregistrer une variable. La variable contiendra par la suite le stdout de la tâche.
Par exemple, supposons que vous souhaitez vérifier l'utilisation du disque des nœuds gérés dans les répertoires racines respectifs en utilisant le df -th /
commande. Vous allez utiliser le 'commande'
module pour définir la commande et 'enregistrer'
Pour enregistrer la sortie STD dans une variable.
Pour afficher la commande, vous utiliserez le 'déboguer'
module à côté de la valeur de retour stdout.
--- - HOSTS: Tous deviennent: Oui Tâches: - Nom: Exécuter / démarrer l'utilisation sur la commande hosts: 'df -th /' registre: df - debug: var = df.stdout
Maintenant, exécutons le livre de jeu. Dans ce cas, nous avons nommé notre livre de jeu check_disk_space.YML.
# anible-playbook check_disk_space.YMLVérifiez l'utilisation du disque des nœuds gérés anibles
Comme vous l'avez vu, la sortie est toutes mélangées et rend difficile la suite.
Pour aligner la sortie et faciliter la lecture, remplacez le stdout Valeur de retour avec stdout_lines.
--- - HOSTS: Tous deviennent: Oui Tâches: - Nom: Exécuter / démarrer l'utilisation sur la commande hosts: 'df -th /' registre: df - debug: var = df.stdout_lines
Utiliser les conditions pour contrôler l'exécution de la lecture
Tout comme dans les langages de programmation, expressions conditionnelles sont utilisés lorsque plusieurs résultats sont possibles. Jetons un coup d'œil à certaines des déclarations conditionnelles couramment utilisées dans les manuels ANSIBL.
Lorsque la déclaration
Parfois, vous voudrez peut-être effectuer des tâches sur des nœuds spécifiques et pas d'autres. Le 'quand'
La déclaration conditionnelle est assez facile à utiliser et à mettre en œuvre dans un livre de jeu. Lorsque vous utilisez le 'quand'
La clause déclare simplement la condition adjacente à la clause comme indiqué:
Quand: condition
Lorsque la condition est satisfaite, la tâche est effectuée sur le système distant.
Voyons quelques exemples:
Exemple 1: en utilisant quand l'opérateur
--- - Hôtes: Toutes les tâches: - Nom: Installer Nginx sur Debian Apt: Name = Nginx State = Present quand: ANSIBLE_OS_FAMILY == "Debian"
Le jeu ci-dessus installe Nginx serveur Web sur les hôtes dirigeant la famille de Debian de Distros.
Vous pouvez également utiliser le OU
et ET
opérateur à côté de la déclaration conditionnelle.
Exemple 2: Utilisation et opérateur avec quand
--- - Hôtes: Toutes les tâches: - Nom: Installez Nginx sur Debian apt: name = nginx state = présente quand: anible_os_family == "Debian" et ANSIBLE_DISTRIBUTION_VERSION == "18.04 ”
Lorsque vous utilisez le ET
opérateur, les deux déclarations doivent être satisfaites pour que la tâche soit exécutée.
Le jeu ci-dessus installe Nginx sur des nœuds exécutant une famille de Debian de système d'exploitation qui est la version 18.04. De toute évidence, ce sera Ubuntu 18.04.
Exemple 3: Utilisation ou opérateur avec quand
Avec OU
opérateur, la tâche est exécutée si l'une ou l'autre des conditions est remplie.
--- - Hôtes: Toutes les tâches: - Nom: Installez Nginx sur Debian apt: name = nginx state = présente quand: anible_os_family == "Debian" ou ANSIBLE_OS_FAMILY == "SUSE"
La pièce ci-dessus installe des serveurs Web Ninx sur Debian ou Suse Family Of Os ou les deux.
NOTE: Assurez-vous toujours d'utiliser le signe à double égalité ==
Lors du test d'une condition.
Conditionnels dans les boucles
Les conditions peuvent également être utilisées dans une boucle. Dites par exemple que vous avez une liste de plusieurs packages qui doivent être installés sur les nœuds distants.
Dans le livre de jeu ci-dessous, nous avons un tableau appelé paquets contenant une liste de packages qui doivent être installés. Ces tâches seront effectuées l'une après l'autre si la requis La clause est définie sur Vrai.
--- - Nom: Installer des packages logiciels Hosts: Tous les Vars: Packages: • Nom: Nginx requis: TRUE • Nom: MySQL requis: TRUE • Nom: Apache requis: Faux Tâches: • Nom: Installer “Item.nom ”sur Debian apt: nom:“ item.nom ”État: présent quand: article.requis == True Loop: «packages»
Configurer la gestion des erreurs
Parfois, les tâches échouent lors de l'exécution de manuels. Supposons que vous exécutez 5 tâches sur 3 serveurs comme indiqué dans le livre de jeu ci-dessous. Si une erreur se produit sur la tâche 3 (démarrage MySQL) sur le serveur 2, ANIBLE arrêtera d'exécuter les tâches restantes sur le serveur 2 et tentera de terminer les tâches restantes sur le reste des serveurs.
--- - Nom: Installer des packages logiciels Hosts: Server1, server2, server3 Tâches: - Nom: Installer les dépendances <> - Nom: Installez la base de données MySQL < > - Nom: Démarrez MySQL < > - Nom: Installer Nginx < > - Nom: Démarrez Nginx < >
Si vous voulez une cohérence dans l'exécution du playbook, par exemple, arrêtez l'exécution d'un playbook, si l'un des serveurs échoue, ajoutez l'option.
--- - Nom: Installer des packages logiciels Hosts: Server1, server2, server3 any_errors_fatal: true Tâches:
De cette façon, si une tâche échoue sur un serveur, ANIBLE arrête l'exécution de l'ensemble du playbook sur tous les serveurs et sortira.
Si vous souhaitez que le Playbook ignore les erreurs et procédez pour exécuter l'ensemble des tâches restantes, utilisez le Ignore_errors: True Option.
--- - Nom: Installer des packages logiciels Hosts: Server1, server2, server3 Tâches: - Nom: Installer les dépendances <> ignore_errors: vrai
Créer des livres de jeu pour configurer les systèmes à un état spécifié
Dans cette section, nous examinons certaines options supplémentaires disponibles lors de l'exécution d'un livre de jeu.
Commençons par le Vérifier mode ou Course à sec option. L'option Dry Run ou Check Mode est utilisée lors de l'exécution d'un livre de jeu pour vérifier si des erreurs seront rencontrées et s'il y a des modifications qui seront apportées sur les hôtes gérés. Cependant, il n'apporte aucune modification aux nœuds distants.
Par exemple, pour sécher l'exécution d'un livre de jeu appelé httpd.YML
qui installe et démarre le serveur Web d'Apache:
# anible-playbook httpd.YML - VérifierDry Run un livre de jeu ANSIBLE
L'autre option que nous devons examiner est le --démarrage
option. Ceci est utilisé lors de la spécification du nom de la tâche que le livre de jeu doit commencer ou commencer par.
Prenons un exemple: le playbook ci-dessous épelle 2 tâches: le premier jeu installe le serveur Web Apache et le second installe un utilitaire HTOP.
--- - Nom: Installer Httpd Hosts: Toutes les tâches: Yum: Nom: Httpd État: Installé - Nom: Installer htop yum: Nom: HTOP État: Démarré
Si vous souhaitez sauter l'installation d'Apache Webserver et installez à la place HTOP Utility Run:
# ANSIBLE-PLAYbook Playbook.YML --Start-at Task "Installer HTOP"Installez des packages à l'aide de Playbook ANSIBLE
Enfin, vous pouvez marquer vos tâches ou jouer en ajoutant le Mots clés Option à votre manuel comme indiqué. Cela est utile lorsque vous avez un livre de jeu assez important et que vous souhaitez exécuter des tâches spécifiques de l'ensemble du livre de jeu.
--- - Nom: installer httpd Tags: installer et démarrer Hôtes: Toutes les tâches: Yum: Nom: Httpd État: installé Tags: installer • Service: Nom: Httpd État: Démarré
# ANSIBLE-PLAYbook Playbook.yml -tags "installer"
Pour omettre les balises utilisez le --saut
Options comme indiqué.
# ANSIBLE-PLAYbook Playbook.yml --skip-tags "installer"
Conclusion
Dans ce sujet, nous vous avons guidé à travers les modules couramment utilisés dans Anable, Comment récupérer Stdout à partir de l'exécution d'un livre de jeu pour l'analyse, en utilisant des conditions dans le playbook et comment gérer les erreurs qui peuvent survenir lors de l'exécution de tâches. Enfin, nous avons récapitulé la configuration des livres de jeu et comment vous pouvez utiliser des options supplémentaires pour décider quelles tâches exécuter si vous n'avez pas l'intention d'exécuter l'intégralité de Playbook.
- « Comment désactiver IPv6 dans Centos 8
- Comment exécuter une commande avec la limite de temps (temps mort) dans Linux »