Inventaire des groupes Ansible

AnsibleBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire (lab), vous apprendrez à créer et configurer des fichiers d'inventaire Ansible. Ansible utilise les fichiers d'inventaire pour définir et organiser les hôtes qu'il gère. Vous explorerez la structure de base d'un fichier d'inventaire, créerez des groupes, établirez des hiérarchies de groupes et assignerez des variables aux groupes. Ces compétences sont essentielles pour gérer efficacement votre infrastructure avec Ansible.

Création d'un inventaire de base

L'environnement de laboratoire (lab) a été pré-configuré avec un accès SSH à la machine locale. Vous pouvez utiliser localhost comme hôte cible pour toutes les opérations Ansible dans ce laboratoire.

Un fichier d'inventaire Ansible définit les hôtes et les groupes d'hôtes sur lesquels les commandes, les modules et les tâches d'un playbook s'exécutent. Créons un fichier d'inventaire de base.

Créez un nouveau fichier nommé inventory dans le répertoire /home/labex/project :

nano /home/labex/project/inventory

Ajoutez le contenu suivant au fichier :

localhost ansible_connection=local

Analysons cela :

  • localhost : C'est le nom de l'hôte. Dans ce cas, il s'agit de la machine locale.
  • ansible_connection=local : Il s'agit d'une variable Ansible qui indique à Ansible de se connecter à cet hôte localement, plutôt que via SSH. Cela est utile pour gérer la machine locale.

Enregistrez le fichier et quittez l'éditeur (dans nano, appuyez sur Ctrl+X, puis sur Y, puis sur Entrée).

Maintenant, testons notre inventaire en utilisant le module ping d'Ansible. Le module ping n'utilise pas réellement le protocole ICMP ping ; il vérifie plutôt que Ansible peut se connecter à l'hôte et exécuter du code Python.

Exécutez cette commande :

ansible -i inventory -m ping all

Analysons cette commande :

  • -i inventory : Spécifie le fichier d'inventaire à utiliser.
  • -m ping : Indique à Ansible d'utiliser le module ping.
  • all : Cible tous les hôtes de l'inventaire.

Vous devriez voir une sortie indiquant une connexion réussie :

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Si vous voyez cette sortie, cela signifie qu'Ansible s'est connecté avec succès au localhost et a exécuté le module ping.

Regroupement des hôtes

Ansible vous permet d'organiser les hôtes en groupes. Cela est utile pour appliquer des configurations ou exécuter des tâches sur plusieurs hôtes simultanément. Modifions notre inventaire pour inclure un groupe.

Modifiez le fichier inventory :

nano /home/labex/project/inventory

Mettez à jour le contenu comme suit :

[webservers]
localhost ansible_connection=local

Cela définit un groupe appelé webservers qui inclut notre localhost. Dans Ansible, les groupes sont définis en mettant le nom du groupe entre crochets []. Tous les hôtes répertoriés sous un groupe appartiennent à ce groupe.

Enregistrez et quittez l'éditeur.

Maintenant, testons notre groupe en utilisant le module ping :

ansible -i inventory -m ping webservers

Cette commande est similaire à la précédente, mais au lieu de all, nous ciblons le groupe webservers.

Vous devriez voir la même sortie de réussite que précédemment, mais maintenant nous ciblons explicitement le groupe webservers. Cela peut sembler inutile avec un seul hôte, mais à mesure que votre inventaire grandit, le groupement devient de plus en plus utile pour cibler des ensembles spécifiques d'hôtes.

Création d'hiérarchies de groupes

Ansible prend en charge les groupes imbriqués, vous permettant de créer des hiérarchies. Cela est utile pour organiser les hôtes en fonction de leurs rôles ou de leurs environnements. Ajoutons un autre groupe et créons une hiérarchie.

Modifiez le fichier inventory :

nano /home/labex/project/inventory

Mettez à jour le contenu comme suit :

[webservers]
localhost ansible_connection=local

[production:children]
webservers

Cela crée un nouveau groupe appelé production qui inclut tous les hôtes du groupe webservers. Le suffixe :children indique à Ansible que ce groupe est un groupe de groupes, pas un groupe d'hôtes.

Voici ce que signifie cette hiérarchie :

  • Tout hôte du groupe webservers est également implicitement dans le groupe production.
  • Vous pouvez appliquer des configurations à tous les hôtes de production en ciblant le groupe production.
  • Vous pouvez toujours cibler uniquement le groupe webservers si nécessaire.

Enregistrez et quittez l'éditeur.

Testez la nouvelle hiérarchie de groupes :

ansible -i inventory -m ping production

Cette commande devrait effectuer un ping sur tous les hôtes du groupe production, qui inclut tous les hôtes du groupe webservers. Dans notre cas, il s'agit toujours seulement du localhost, mais dans un scénario réel, cette structure permet une gestion puissante et flexible des hôtes.

Attribution de variables aux groupes

Ansible vous permet d'attribuer des variables aux groupes dans le fichier d'inventaire. Ces variables peuvent être utilisées dans les playbooks et les modèles, rendant votre code Ansible plus flexible et réutilisable.

Modifiez le fichier inventory :

nano /home/labex/project/inventory

Mettez à jour le contenu comme suit :

[webservers]
localhost ansible_connection=local

[production:children]
webservers

[webservers:vars]
http_port=80

Cela attribue la variable http_port avec une valeur de 80 à tous les hôtes du groupe webservers. Le suffixe :vars est utilisé pour définir des variables pour un groupe.

Enregistrez et quittez l'éditeur.

Maintenant, créons un simple playbook pour afficher cette variable. Un playbook est un fichier YAML qui définit un ensemble de tâches à exécuter sur les hôtes. Créez un nouveau fichier nommé show_http_port.yml :

nano /home/labex/project/show_http_port.yml

Ajoutez le contenu suivant :

---
- name: Show HTTP Port
  hosts: webservers
  tasks:
    - name: Display HTTP Port
      debug:
        msg: "The HTTP port is {{ http_port }}"

Ce playbook :

  • Cible le groupe webservers
  • A une seule tâche qui utilise le module debug pour afficher un message
  • Utilise la syntaxe {{ http_port }} pour faire référence à la variable que nous avons définie dans l'inventaire

Enregistrez et quittez l'éditeur.

Exécutez le playbook :

ansible-playbook -i inventory show_http_port.yml

Vous devriez voir une sortie affichant la valeur du port HTTP :

PLAY [Show HTTP Port] ********************************************************

TASK [Gathering Facts] ********************************************************
ok: [localhost]

TASK [Display HTTP Port] ******************************************************
ok: [localhost] => {
    "msg": "The HTTP port is 80"
}

PLAY RECAP ********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Cela démontre que la variable que nous avons définie dans l'inventaire est accessible dans notre playbook.

Résumé

Dans ce laboratoire (lab), vous avez appris les bases de la gestion des inventaires Ansible. Vous avez créé un fichier d'inventaire de base et avez appris à utiliser le module ping d'Ansible pour vérifier la connectivité. Vous avez exploré comment regrouper les hôtes et créer des hiérarchies de groupes, ce qui est essentiel pour organiser et gérer des infrastructures plus importantes. Enfin, vous avez appris à attribuer des variables aux groupes et à les utiliser dans un simple playbook.

Ces compétences constituent la base du travail avec Ansible et seront inestimables lorsque vous aborderez des tâches d'automatisation plus complexes. N'oubliez pas que la gestion efficace des inventaires est la clé pour des projets Ansible évolutifs et maintenables. Au fur et à mesure de votre progression dans le monde d'Ansible, envisagez d'explorer des fonctionnalités d'inventaire plus avancées telles que les inventaires dynamiques et les plugins d'inventaire.

La pratique est la clé pour maîtriser ces concepts. Essayez de créer des inventaires plus complexes, expérimentez avec différentes structures de groupes et utilisez des variables dans des playbooks plus avancés. Plus vous travaillerez avec Ansible, plus vous vous sentirez à l'aise avec ses puissantes capacités d'automatisation.