GNU/Linux >> Tutoriels Linux >  >> Linux

10 modules Ansible pour l'automatisation du système Linux

Ansible est une solution d'automatisation complète pour votre environnement informatique. Vous pouvez utiliser Ansible pour automatiser la configuration des serveurs Linux et Windows, orchestrer le provisionnement des services, déployer des environnements cloud et même configurer vos périphériques réseau.

Les modules Ansible résument les actions sur votre système afin que vous n'ayez pas à vous soucier des détails de mise en œuvre. Vous décrivez simplement l'état souhaité et Ansible s'assure que le système cible y correspond.

La disponibilité de ce module est l'un des principaux avantages d'Ansible, et il est souvent appelé Ansible avec "piles incluses". En effet, vous pouvez trouver des modules pour un grand nombre de tâches, et même si c'est génial, j'entends souvent des débutants dire qu'ils ne savent pas par où commencer.

Bien que votre choix de modules dépende exclusivement de vos besoins et de ce que vous essayez d'automatiser avec Ansible, voici les dix principaux modules dont vous avez besoin pour démarrer avec Ansible pour l'automatisation du système Linux.

1. copier

Le module de copie vous permet de copier un fichier du nœud de contrôle Ansible vers les hôtes cibles. En plus de copier le fichier, il vous permet de définir la propriété, les autorisations et les étiquettes SELinux sur le fichier de destination. Voici un exemple d'utilisation du module de copie pour copier un fichier de configuration "message du jour" vers les hôtes cibles :

- nom :Assurez-vous que le fichier MOTD est en place
  copie :
    src :files/motd
     dest :/etc/motd
    owner :root
     group :mode racine
    :0644

Pour un contenu moins complexe, vous pouvez copier le contenu directement dans le fichier de destination sans avoir de fichier local, comme ceci :

- nom :Assurez-vous que le fichier MOTD est en place
  copie :
    contenu :"Bienvenue dans ce système."
    dest :/etc/motd
    propriétaire :root
    groupe :racine
    mode :0644

Ce module fonctionne de manière idempotente, ce qui signifie qu'il ne copiera le fichier que si le même fichier n'est pas déjà en place avec le même contenu et les mêmes autorisations.

Le module de copie est une excellente option pour copier un petit nombre de fichiers avec un contenu statique. Si vous avez besoin de copier un grand nombre de fichiers, jetez un œil au module de synchronisation. Pour copier des fichiers avec un contenu dynamique, jetez un œil au template module suivant.

2. modèle

Le module de modèle fonctionne de manière similaire à la copy module, mais il traite le contenu dynamiquement à l'aide du langage de template Jinja2 avant de le copier sur les hôtes cibles.

Par exemple, définissez un modèle "message du jour" qui affiche le nom du système cible, comme ceci :

$ vi templates/motd.j2
Bienvenue dans {{ inventor_hostname }}.

Ensuite, instanciez ce template en utilisant le template module, comme ceci :

- nom :Assurez-vous que le fichier MOTD est en place
 modèle :
    src :templates/motd.j2
    dest :/etc/motd
    propriétaire :root
groupe :root
    mode :0644

Avant de copier le fichier, Ansible traite le modèle et interpole la variable, en la remplaçant par le nom du système hôte cible. Par exemple, si le nom du système cible est rh8-vm03 , le fichier résultat est :

Bienvenue sur rh8-vm03.

Alors que la copy le module peut également interpoler des variables lors de l'utilisation du content paramètre, le template permet une flexibilité supplémentaire en créant des fichiers modèles, qui vous permettent de définir un contenu plus complexe, y compris for boucles, if conditions, et plus encore. Pour une référence complète, consultez la documentation Jinja2.

Ce module est également idempotent, et il ne copiera pas le fichier si le contenu sur le système cible correspond déjà au contenu du modèle.

3. utilisateur

Le module utilisateur vous permet de créer et de gérer des utilisateurs Linux dans votre système cible. Ce module a de nombreux paramètres différents, mais dans sa forme la plus basique, vous pouvez l'utiliser pour créer un nouvel utilisateur.

Par exemple, pour créer l'utilisateur ricardo avec UID 2001, fait partie des groupes users et wheel , et le mot de passe mypassword , appliquez le user module avec ces paramètres :

- nom :Assurez-vous que l'utilisateur ricardo existe
  utilisateur :
    nom :ricardo
     groupe :utilisateurs
     groupes :wheel
    uid :2001
     mot de passe :"{{ 'mypassword' | password_hash('sha512') }}"
    état :présent

Notez que ce module essaie d'être idempotent, mais il ne peut pas le garantir pour toutes ses options. Par exemple, si vous exécutez à nouveau l'exemple de module précédent, il réinitialisera le mot de passe à la valeur définie, en changeant l'utilisateur dans le système pour chaque exécution. Pour rendre cet exemple idempotent, utilisez le paramètre update_password: on_create , en veillant à ce qu'Ansible ne définisse le mot de passe que lors de la création de l'utilisateur et non lors des exécutions suivantes.

Vous pouvez également utiliser ce module pour supprimer un utilisateur en définissant le paramètre state: absent .

L'user Le module propose de nombreuses options pour vous permettre de gérer plusieurs aspects utilisateur. Assurez-vous de consulter la documentation du module pour plus d'informations.

4. paquet

Le module de package vous permet d'installer, de mettre à jour ou de supprimer des packages logiciels de votre système cible à l'aide du gestionnaire de packages standard du système d'exploitation.

Par exemple, pour installer le serveur Web Apache sur une machine Red Hat Linux, appliquez le module comme ceci :

- nom :Assurez-vous que le package Apache est installé
  package :
    nom :httpd
     état :présent

En savoir plus sur Ansible

  • Guide de démarrage rapide d'Ansible
  • Aide-mémoire Ansible
  • Cours en ligne gratuit :les bases d'Ansible
  • Télécharger et installer Ansible
  • eBook :L'entreprise automatisée
  • Livre électronique :Ansible pour DevOps
  • Livres numériques Ansible gratuits
  • Derniers articles Ansible

Ce module est indépendant de la distribution et fonctionne en utilisant le gestionnaire de packages sous-jacent, tel que yum/dnf pour les distributions basées sur Red Hat et apt pour Debian. Pour cette raison, il n'effectue que des tâches de base telles que l'installation et la suppression de packages. Si vous avez besoin de plus de contrôle sur les options du gestionnaire de packages, utilisez le module spécifique pour la distribution cible.

Gardez également à l'esprit que, même si le module lui-même fonctionne sur différentes distributions, le nom du package pour chacun peut être différent. Par exemple, dans la distribution basée sur Red Hat, le nom du package du serveur Web Apache est httpd , alors que dans Debian, c'est apache2 . Assurez-vous que vos playbooks traitent de cela.

Ce module est idempotent et n'agira pas si l'état actuel du système correspond à l'état souhaité.

5. services

Utilisez le module de service pour gérer les services du système cible à l'aide du système init requis ; par exemple, systemd.

Dans sa forme la plus basique, tout ce que vous avez à faire est de fournir le nom du service et l'état souhaité. Par exemple, pour démarrer le sshd service, utilisez le module comme ceci :

- nom :Assurez-vous que SSHD est démarré
  service :
    nom :sshd
     état :démarré

Vous pouvez également vous assurer que le service démarre automatiquement lorsque le système cible démarre en fournissant le paramètre enabled: yes .

Comme avec le package module, le service module est flexible et fonctionne sur différentes distributions. Si vous avez besoin d'un réglage fin sur le système d'initialisation cible spécifique, utilisez le module correspondant ; par exemple, le module systemd .

Semblable aux autres modules que vous avez vus jusqu'à présent, le service module est également idempotent.

6. pare-feu

Utilisez le module firewalld pour contrôler le pare-feu du système avec le firewalld démon sur les systèmes qui le prennent en charge, comme les distributions basées sur Red Hat.

Par exemple, pour ouvrir le service HTTP sur le port 80, utilisez-le comme ceci :

- nom :Assurez-vous que le port 80 (http) est ouvert
  pare-feu :
    service :http
     état :activé
     permanent :oui
     immédiat :oui

Vous pouvez également spécifier des ports personnalisés au lieu des noms de service avec le port paramètre. Dans ce cas, assurez-vous de spécifier également le protocole. Par exemple, pour ouvrir le port TCP 3000, utilisez ceci :

- nom :Assurez-vous que le port 3000/TCP est ouvert
  pare-feu :
    port :3000/tcp
    état :activé
    permanent :oui
    immédiat :oui

Vous pouvez également utiliser ce module pour contrôler d'autres firewalld aspects comme les zones ou les règles complexes. Assurez-vous de consulter la documentation du module pour une liste complète des options.

7. fichier

Le module de fichiers vous permet de contrôler l'état des fichiers et des répertoires, en définissant les autorisations, la propriété et les étiquettes SELinux.

Par exemple, utilisez le file module pour créer un répertoire /app appartenant à l'utilisateur ricardo , avec des autorisations de lecture, d'écriture et d'exécution pour le propriétaire et le groupe users :

- nom :Assurez-vous que le répertoire /app existe
  fichier :
    chemin :/app
    état :répertoire
     propriétaire :ricardo
     groupe :utilisateurs
mode :0770

Vous pouvez également utiliser ce module pour définir les propriétés des fichiers sur les répertoires de manière récursive en utilisant le paramètre recurse: yes ou supprimer des fichiers et répertoires avec le paramètre state: absent .

Ce module fonctionne avec l'idempotence pour la plupart de ses paramètres, mais certains d'entre eux peuvent lui faire changer le chemin cible à chaque fois. Consultez la documentation pour plus de détails.

8. fichier de ligne

Le module lineinfile vous permet de gérer des lignes simples sur des fichiers existants. Il est utile de mettre à jour la configuration ciblée sur des fichiers existants sans modifier le reste du fichier ni copier l'intégralité du fichier de configuration.

Par exemple, ajoutez une nouvelle entrée à votre fichier hosts comme ceci :

- nom :Assurez-vous que l'hôte rh8-vm03 dans le fichier d'hôtes
  lineinfile :
    chemin :/etc/hosts
    ligne :192.168.122.236 rh8-vm03
    état :présent

Vous pouvez également utiliser ce module pour modifier une ligne existante en appliquant le paramètre regexp pour rechercher une ligne existante à remplacer. Par exemple, mettez à jour le sshd_config fichier pour empêcher la connexion root en modifiant la ligne PermitRootLogin yes à PermitRootLogin no :

- nom :assurez-vous que la racine ne peut pas se connecter via ssh
  lineinfile :
    chemin :/etc/ssh/sshd_config
     regexp :'^PermitRootLogin'
    ligne :PermitRootLogin no
    état :présent

Remarque :Utilisez le module de service pour redémarrer le service SSHD afin d'activer cette modification.

Ce module est également idempotent, mais, en cas de modification de ligne, assurez-vous que l'expression régulière correspond à la fois aux états d'origine et mis à jour pour éviter des modifications inutiles.

9. désarchiver

Utilisez le module unarchive pour extraire le contenu des fichiers d'archive tels que tar ou zip des dossiers. Par défaut, il copie le fichier d'archive du nœud de contrôle vers la machine cible avant de l'extraire. Modifiez ce comportement en fournissant le paramètre remote_src: yes .

Par exemple, extraire le contenu d'un .tar.gz fichier qui a déjà été téléchargé sur l'hôte cible avec cette syntaxe :

- nom :Extraire le contenu de app.tar.gz
  unarchive :
     src :/tmp/app.tar.gz
    dest :/app
     remote_src :yes

Certaines technologies d'archivage nécessitent que des packages supplémentaires soient disponibles sur le système cible; par exemple, le package unzip pour extraire .zip fichiers.

Selon le format d'archive utilisé, ce module peut ou non fonctionner de manière idempotente. Pour éviter des modifications inutiles, vous pouvez utiliser le paramètre creates pour spécifier un fichier ou un répertoire que ce module créerait lors de l'extraction du contenu de l'archive. Si ce fichier ou répertoire existe déjà, le module n'en réextrait pas le contenu.

10. commande

Le module de commande est flexible et vous permet d'exécuter des commandes arbitraires sur le système cible. En utilisant ce module, vous pouvez faire presque n'importe quoi sur le système cible tant qu'il y a une commande pour cela.

Même si la command module est flexible et puissant, il doit être utilisé avec précaution. Évitez d'utiliser le module de commande pour exécuter une tâche s'il existe un autre module approprié disponible pour cela. Par exemple, vous pourriez créer des utilisateurs en utilisant la command module pour exécuter le useradd commande, mais vous devriez utiliser le user module à la place, car il vous fait abstraction de nombreux détails, en prenant soin des cas particuliers et en veillant à ce que la configuration ne change que lorsque cela est nécessaire.

Pour les cas où aucun module n'est disponible, ou pour exécuter des scripts ou des programmes personnalisés, la command module est toujours une excellente ressource. Par exemple, utilisez ce module pour exécuter un script déjà présent sur la machine cible :

- nom :exécutez la commande du programme d'installation de l'application
 :"/app/install.sh"

Par défaut, ce module n'est pas idempotent, car Ansible exécute la commande à chaque fois. Pour faire la command module idempotent, vous pouvez utiliser when conditions pour n'exécuter la commande que si la condition appropriée existe, ou si le creates argument, similaire à l'exemple du module de désarchivage.

Quelle est la prochaine ?

À l'aide de ces modules, vous pouvez configurer des systèmes Linux entiers en copiant, en créant des modèles ou en modifiant des fichiers de configuration, en créant des utilisateurs, en installant des packages, en démarrant des services système, en mettant à jour le pare-feu, etc.

Si vous êtes nouveau sur Ansible, assurez-vous de consulter la documentation sur la façon de créer des playbooks pour combiner ces modules afin d'automatiser votre système. Certaines de ces tâches nécessitent d'être exécutées avec des privilèges élevés pour fonctionner. Pour plus de détails, consultez la documentation sur l'élévation des privilèges.

Depuis Ansible 2.10, les modules sont organisés en collections. La plupart des modules de cette liste font partie du ansible.builtin collection et sont disponibles par défaut avec Ansible, mais certains d'entre eux font partie d'autres collections. Pour une liste des collections, consultez la documentation Ansible.


Linux
  1. Qu'est-ce que Linux ? Un guide pour les utilisateurs non techniques

  2. 8 conseils pour une automatisation fiable du système Linux

  3. 3 étapes pour identifier les candidats à l'automatisation du système Linux

  4. 3 commandes Linux utiles pour les administrateurs système

  5. 10 meilleurs IPTV pour le système Linux/Ubuntu en 2022

Guide de démarrage rapide d'Ansible pour les administrateurs système Linux

Les 15 meilleurs émulateurs Linux pour système Windows

Les 20 meilleurs outils bioinformatiques pour le système Linux

Top 10 des meilleurs logiciels de géométrie pour système Linux

Top 15 des meilleurs outils de biologie pour le système Linux

15 meilleurs logiciels de montage vidéo pour le système Linux