Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Gestion des rôles Ansible

Présentation des rôles

Vous avez conçu plusieurs playbooks au fil du temps et vous vous apercevez que vous avez besoin de réemployer le code de ces derniers. En effet, un « play » qui configure un serveur Apache pourrait resservir pour un autre serveur avec des valeurs différentes. Copier/coller le code d’un playbook dans un autre peut s’avérer complexe, voire parfois compliqué.

Les rôles de Ansible offrent la possibilité de réutiliser du code de façon générique. Vous allez utiliser, dans une structure de dossiers standardisée, les tâches, les variables, les fichiers, les modèles Jinja2 (templates) entre autres… Et ce afin de déployer des applications ou bien une infrastructure. Il suffit de dupliquer l’arborescence du rôle d’un projet à un autre. Vous exécutez, par la suite, ce rôle depuis un « play ».

Vous pouvez développer vos propres rôles en fonction de vos besoins et les utiliser à plusieurs reprises. Les distributions Red Hat Enterprise Linux et CentOS 8 fournissent de base un paquet qui propose des rôles système. Plus loin dans ce chapitre, leurs fonctionnalités et utilisations seront abordées. Vous disposez également, sur le site web Ansible Galaxy, d’un grand nombre de rôles...

Structure des rôles

Un rôle a une structure standardisée qui est composée de sous-dossiers et de fichiers :

Mon-role 
├─── defaults 
│      └──────── main.yml 
├─── files 
├─── handlers 
│      └──────── main.yml 
├─── meta 
│      └──────── main.yml 
├─── tasks 
│      └──────── main.yml 
├─── templates 
├─── tests 
│      ├──────── inventory 
│      └──────── test.yml 
└─── vars 
│      └──────── main.yml 
└─── README.md 

Le dossier racine, en l’occurrence ici mon-role, détermine le nom du rôle proprement dit.

Les fichiers sont organisés dans une arborescence de dossiers nommés en fonction de l’objectif...

Variables

Il existe deux types de variables :

  • variables de rôle ;

  • variables par défaut.

1. Variables de rôle

Ces variables possèdent une priorité haute. Il n’est pas possible de les remplacer par des variables d’inventaire. Elles ne sont donc pas destinées à être modifiées quand elles sont utilisées dans un playbook. Elles sont généralement utilisées par le fonctionnement interne du rôle.

Les variables de rôle sont définies sous la forme d’une paire valeur/clé dans le fichier main.yml qui doit être situé dans le dossier vars. Des références à ces variables sont présentes dans le fichier YAML du rôle : {{ nom_de_variable }}.

2. Variables par défaut

Les variables par défaut sont déclarées sous la forme d’une paire valeur/clé dans le fichier main.yml qui doit être situé dans le dossier defaults.

Ces variables ont la priorité la plus basse de toutes les variables disponibles. Elles peuvent donc être facilement remplacées par d’autres variables. Elles servent à définir des valeurs par défaut pour les variables qui sont utilisées dans un « play ». Elles offrent, ainsi, la possibilité de configurer le rôle ou bien de personnaliser...

Utilisation de rôles

Vous savez ce qu’est un rôle. Maintenant, cette section va démontrer comment utiliser des rôles dans un playbook et contrôler l’ordre de leur exécution.

1. Fonctionnement des rôles

L’appel de rôles s’effectue avec le mot-clé roles :

--- 
- hosts: servers 
  roles: 
  - apache 

Lorsqu’un rôle est spécifié dans un playbook, ses tâches, ses gestionnaires (handlers), ses variables et ses dépendances seront importées dans cet ordre.

Toutes les tâches du rôle peuvent faire référence aux fichiers, aux modèles Jinja2 ou bien aux fichiers tâches dans le rôle sans invoquer un chemin relatif ou absolu. En effet, Ansible Engine les cherche dans les sous-répertoires files, templates ou tasks du rôle.

Ne réutilisez pas les noms des variables de rôle que vous définissez ailleurs dans votre play parce que les valeurs des variables de rôle remplaceront les variables d’inventaire et de « play ».

Lorsque vous utilisez une section roles afin d’importer des rôles dans un « play », les rôles sont exécutés en premier avant toutes les tâches définies pour ce « play ».

2. Contrôle de l’ordre d’exécution

Jusqu’ici, dans un playbook, pour chaque « play » présent, les tâches s’exécutent dans l’ordre de la liste des tâches. Ensuite, tous les gestionnaires (handlers) notifiés sont exécutés.

Si un playbook comporte des rôles, les tâches de rôle sont alors ajoutées au début de la liste des tâches. Chaque rôle exécute à tour de rôle ses tâches.

Si vous avez besoin d’exécuter certaines tâches avant les rôles, le « play » peut contenir une section pre_tasks. Ainsi, toutes les tâches listées dans cette section s’exécutent avant que des rôles ne soient exécutés. Si l’une de ces tâches notifie un gestionnaire, les tâches de gestionnaire s’exécutent avant les rôles ou les tâches normales....

Rôles système

1. Présentation des rôles système

L’objectif des rôles système est de normaliser la configuration des sous-systèmes RHEL/CentOS sur différentes versions à partir de la version 6.10 et plus. Ceci permet de simplifier la gestion de configuration.

Depuis la version 7.4 de RHEL/CentOS, un paquet RPM rhel-system-roles fourni de base, contient un certain nombre de rôles. Concernant, la version 8, ce paquet est présent dans le dépôt AppStream.

a. Rôles système avec support

Les rôles système proviennent du projet Open Source Linux System Roles, disponible sur le site web Ansible Galaxy. Ils sont pris en charge par la société Red Hat dans le cadre d’un abonnement Red Hat Enterprise Linux standard :

Nom du rôle

Description

rhel-system-roles.kdump

Configurer le service kdump.

rhel-system-roles.network

Configurer les interfaces de communication.

rhel-system-roles.selinux

Configurer SELinux.

rhel-system-roles.storage

Gérer les systèmes de fichiers sur des disques non partitionnés (LVM).

rhel-system-roles.timesync

Configurer la synchronisation de l’horloge.

b. Rôles système en préversion technologique

Les rôles système qui sont en préversion technologique, pourraient dans de futures versions utiliser différentes variables de rôle.

Par conséquent, les playbooks peuvent faire l’objet d’un réusinage de code (refactoring ou refactorisation) si les variables de rôles système sont amenées à changer. Il est conseillé, par mesure de précaution, d’effectuer un test d’intégration de vos playbooks.

Les rôles système en préversion technologique sont :

Nom du rôle

Description

rhel-system-roles.postfix

Configurer l’agent MTA (Mail Transfer Agent) sur les hôtes gérés.

rhel-system-roles.sap

Configurer RHEL 7.6 et plus avant d’installer le logiciel SAP HANA ou SAP NetWeaver.

c. Rôles système en cours de développement

Des rôles système sont actuellement en cours de développement dans le projet Linux System Roles. Ils ne figurent pas, pour le moment, dans la distribution RHEL/CentOS et ne sont donc pas pris en charge par la société...

Création de rôles

La conception de rôles Ansible s’effectue en trois phases :

1. Création de la structure du dossier;

2. Définition du contenu du rôle.

3. Utilisation du rôle.

1. Création de la structure du dossier

La recherche des rôles s’effectue, par défaut, dans un sous-dossier nommé roles qui est situé dans le dossier dans lequel se trouve votre playbook. Si Ansible Engine ne trouve pas le rôle à cet endroit, alors il examine les dossiers spécifiés par la variable roles_path. La liste des dossiers à rechercher est séparée par un caractère deux-points. La valeur par défaut de cette variable est :

~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles 

Dans ~/.ansible/roles, vous pouvez stocker vos propres rôles tandis que le système peut avoir, dans /usr/share/ansible/roles, des rôles disponibles pour tous les utilisateurs qui accèdent au nœud de contrôle.

Arborescence

Vous pouvez, tout d’abord, concevoir un dossier racine qui se nomme /ansible par exemple. Il va englober les projets Ansible :

[root@server1 ~]# ll /ansible 
total 8 
drwxr-xr-x. 4 root root 4096 3 avril 03:17 app1 
drwxr-xr-x. 4 root root 4096 3 avril 03:53 app2 
[root@server1 ~]# 

Les dossiers /ansible/app1 et /ansible/app2 sont deux projets distincts Ansible.

Le projet /ansible/app1 a une arborescence comme suit :

[root@server1 ~]# tree /ansible/app1 
/ansible/app1 
├── ansible.cfg 
├── group_vars 
│   └── serveurs 
├── host_vars 
│   └── server2.staff.local 
├── inventories 
│   ├── production.ini 
│   └── stagging.ini 
├── install_app1.yml 
└── roles 
├── vars 
│   └── ext_vars.yml 
└── vault-files 
   └── pw-file 
[root@server1 ~]# 

Il comporte :

  • le fichier de configuration ansible.cfg ;

  • les variables pour les groupes d’hôtes qui sont définies dans le dossier group_vars ;

  • les variables pour...

Déploiement de rôle

1. Ansible Galaxy

a. Présentation de Ansible Galaxy

Ansible Galaxy est une bibliothèque publique de contenu Ansible situé à l’adresse https://galaxy.ansible.com. Elle met à disposition un moteur de recherche qui vous permet de trouver les rôles mis à disposition par la communauté. Vous disposez aussi de liens vers de la documentation et des vidéos destinées aux nouveaux utilisateurs ou développeurs de rôles.

La commande ansible-galaxy avec l’option init a été utilisée précédemment pour créer l’arborescence d’un nouveau rôle. Elle va servir aussi pour obtenir et gérer des rôles de Ansible Galaxy ou pour gérer des rôles à partir de vos propres référentiels Git.

b. Aide et documentation sur Ansible Galaxy

Sur la page d’accueil du site Ansible Galaxy, le bouton Documentation, en haut à droite de l’écran, vous donne accès à une page qui décrit l’utilisation d’Ansible Galaxy.

images/CE10-01.png

Vous y apprendrez notamment comment télécharger et utiliser des rôles à partir d’Ansible Galaxy. Cette page contient également des instructions relatives au développement de rôles :

images/CE10-02.png

c. Rechercher des rôles

Le bouton Search sur le côté gauche de la page d’accueil permet aux utilisateurs d’accéder à des informations relatives aux rôles publiés sur Ansible Galaxy. 

images/CE10-03.png

La recherche d’un rôle peut s’effectuer en fonction de son nom ou en utilisant des balises qui peuvent être system, development, web, storage, etc. Un rôle peut posséder jusqu’à vingt balises. Elles sont définies dans le fichier meta/main/yml du rôle :

[root@server1 workspace]# cat /usr/share/ansible/roles/
linux-system-roles.storage/
meta/main.yml 
galaxy_info: 
  author: David Lehman <dlehman@redhat.com> 
  description: Configure volumes and filesystems 
  galaxy_tags: ['system', 'lvm', 'storage', 'redhat', 'rhel', 
'fedora', 'centos'] 
  company: Red Hat, Inc. 
  license: MIT 
  min_ansible_version:...