Sommaire
1) Présentation
![](https://i0.wp.com/www.jjworld.fr/wp-content/uploads/2024/07/ansble-playbook.png?resize=855%2C556&ssl=1)
Dans ce tutoriel, nous allons créer et exécuter un playbook ansible afin d’automatiser des tâches d’administration (Ex : mise à jour des paquets, Création d’utilisateurs et bien d’autres) sur vos serveurs locaux ou vos VPS.
Ce tutoriel s’appuie sur une installation d’ansible réalisée à l’aide du tutoriel Ansible – Installation et configuration.
2) Connexion ansible
Pour commencer, se connecter en tant qu’utilisateur ansible (Si vous avez suivi le tutoriel Ansible – Installation et configuration).
1 |
sudo -i -u ansible |
3) Création arborescence ansible
Création d’un répertoire racine /ansible
et des sous-répertoires prod
et test
afin de séparer l’environnement de test de celui de production. Les répertoires prod et test présente ensuite la même sous-arborescence.
3.1) Créer l’arborescence
1 2 3 4 5 6 7 |
# Création des répertoires sudo mkdir -p /ansible/{prod,test}/inventory/{group_vars,host_vars} sudo mkdir -p /ansible/{prod,test}/roles # Création des fichiers sudo touch /ansible/{prod,test}/playbook.yml sudo touch /ansible/{prod,test}/inventory/00-inventory.yml |
3.2) Explication de l’arborescence d’ansible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/ansible/ # Répertoire racine ansible ├── prod # Répertoire de production │ ├── inventory # Répertoire d'inventaire │ │ ├── 00-inventory.yml # Fichier d'inventaire │ │ ├── group_vars # Répertoire contenant les variables par groupe d'hôtes (inventaire) │ │ └── host_vars # Répertoire contenant les variable par hôte (inventaire) │ ├── playbook.yml # Fichier Playbook ansible │ └── roles # Répertoires contenant les rôles ansible │ └── test # Répertoire de test ├── inventory │ ├── 00-inventory.yml │ ├── group_vars │ └── host_vars ├── playbook.yml └── roles |
3.3) Ajuster les droits pour l’utilisateur ansible
Si vous disposez d’un utilisateur ansible spécifique (Ex : ansible), il faudra lui donner les droits sur le répertoire /ansible
.
1 |
sudo chown -R ansible:ansible /ansible |
4) Création de rôles ansible
Nous allons créer 3 rôles grâce à la commande ansible-galaxy
.
La commande ansible-galaxy init
permet de créer l’arborescence du rôle ansible.
- packages_upgrade : Pour mettre à jour tous les paquets du système
- packages_install : Pour installer des paquets spécifiques
- users_create : Pour créer ou modifier des utilisateurs
4.1) Créer l’arborescence des rôles
4.1.1) Role packages_ugrade
1 2 |
# Rôle de mise à jour de tous les paquets ansible-galaxy init /ansible/test/roles/packages_upgrade |
4.1.2) Role packages_install
1 2 |
# Rôle d'installation de paquets ansible-galaxy init /ansible/test/roles/packages_install |
4.1.3) Role users_create
1 2 |
# Rôle de création d'utilisateurs ansible-galaxy init /ansible/test/roles/users_create |
4.1.4) Explication de l’arborescence d’un rôle ansible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
roles/ # Répertoire racine des rôles │ └── packages_upgrade # Répertoire du rôle "packages_upgrade" ├── defaults │ └── main.yml # Variables par défaut pouvant facilement être surchargées │ ├── files # Répertoire des fichiers statiques │ ├── handlers │ └── main.yml # Tâches spécifiques lancées par des déclencheurs │ ├── meta │ └── main.yml # Métadonnées (Ex : dépendances et auteurs) │ ├── README.md # Description et documentation du rôle │ ├── tasks │ └── main.yml # Tâches à exécuter par le rôle │ ├── templates # Répertoire des fichiers modifiés dynamiquement │ ├── tests # Répertoire de test du rôle contenant : │ ├── inventory # - Inventaire de test │ └── test.yml # - Playbook de test │ └── vars └── main.yml # Variables spécifiques du rôle (Elles ont moins vocation à être surchargées) |
4.2) Simplifier l’arborescence des rôles
L’arborescence d’un rôle générée par ansible-galaxy est exhaustive. Il est recommandé de l’utiliser si vous comptez partager le rôle avec la communauté ou si vous travaillez en équipe.
Cependant, dans le cadre de ce tutoriel, elle complexifie la lecture avec des répertoires et des fichiers que nous n’utiliserons pas.
Nous supprimerons donc certains éléments afin de simplifier la lecture du rôle.
4.2.1) Suppression des élements non-essentiels
1 |
rm -rf /ansible/test/roles/*/{files,handlers,meta,templates,tests} |
4.2.2) Arborescence simplifiée des roles ansible
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
roles/ ├── packages_install │ ├── defaults │ │ └── main.yml │ ├── README.md │ ├── tasks │ │ └── main.yml │ └── vars │ └── main.yml ├── packages_upgrade │ ├── defaults │ │ └── main.yml │ ├── README.md │ ├── tasks │ │ └── main.yml │ └── vars │ └── main.yml └── users_create ├── defaults │ └── main.yml ├── README.md ├── tasks │ └── main.yml └── vars └── main.yml |
4.3) Rôle de mise à jour des paquets
4.3.1) Ajouter des tâches au rôle packages_upgrade
1 |
nano /ansible/test/roles/packages_upgrade/tasks/main.yml |
Contenu du fichier :
1 2 3 4 5 |
- name: "Mise à jour de tous les packets" ansible.builtin.apt: name: "*" state: "latest" update_cache: "yes" |
ansible.builtin.apt
est un module ansible permettant de gérer les paquets via apt.name: "*"
signifie que l’on souhaite agir sur tous les paquets.state: "latest"
indique que l’on veut que chaque paquet soit dans sa dernière version disponible.update_cache: "yes"
permet de faire un apt update avant l’installation.
4.4) Rôle ansible d’installation de paquets
4.4.1) Ajouter des tâches au rôle packages_install
1 |
nano /ansible/test/roles/packages_install/tasks/main.yml |
Contenu du fichier :
1 2 3 4 5 |
- name: "Installation de packets en dernière version" ansible.builtin.apt: name: "{{ role_packages_install_packages }}" state: "latest" update_cache: "yes" |
Toujours avec le module ansible.builtin.apt
mais cette fois, nous utilisons une variable {{role_packages_install_packages}}
pour définir la liste des paquets. Une valeur sera affectée à cette variable un peu plus loin dans le tutoriel.
4.4.2) Ajouter des variables par défaut au rôle packages_install
1 |
nano /ansible/test/roles/packages_install/defaults/main.yml |
Contenu du fichier :
1 |
role_packages_install_packages: "" |
Variable role_packages_install_packages
vide par défaut, elle sera surchargée au niveau des variables de groupes de l’inventaire.
4.5) Rôle ansible de création d’utilisateurs
4.5.1) Ajouter des tâches au rôle users_create
1 |
nano /ansible/test/roles/users_create/tasks/main.yml |
Contenu :du fichier
1 2 3 4 5 6 7 8 9 10 |
- name: "Création/Modification des utilisateurs" ansible.builtin.user: name: "{{ item.user }}" comment: "Créé par ansible" groups: "{{ item.groups }}" create_home: yes shell: "{{ role_users_create_Shell }}" append: yes with_items: - "{{ role_users_create_UsersAndGroups }}" |
ansible.builtin.user
est un module ansible permettant de gérer les utilisateurs.with_items
: Permet de spécifier une liste de valeur sur laquelle l’opération va se répéter.name: "{{ item.user }}"
: item
représente l’élément en cours de la liste de valeurs spécifiées dans with_items
. Le nom de l’utilisateur sera donc récupéré dans la propriété name
de l’objet représenté par item
.
4.5.2) Ajout de variables par défaut pour le rôle users_create
1 |
nano /ansible/test/roles/users_create/defaults/main.yml |
Contenu du fichier :
1 2 |
role_users_create_UsersAndGroups: role_users_create_Shell: "/bin/bash" |
Variable role_users_create_UsersAndGroups
vide par défaut, elle sera surchargée au niveau des variables de groupes de l’inventaire.
5) Création d’un playbook ansible
Nous allons créer 2 playbooks. Un pour les configurations communes et l’autre pour la tâche de mise à jour des paquets.
5.1) Création d’un playbook pour la mise à jour des paquets
1 |
nano /ansible/test/playbook_upgrade_all_packages.yml |
Contenu du fichier :
1 2 3 4 5 |
- name: "Mis à jour de tous les paquets" hosts: "all" become: "yes" roles: - packages_upgrade |
5.2) Création d’un fichier de playbook principal :
1 |
nano /ansible/test/playbook.yml |
Contenu du fichier :
1 2 3 4 5 6 |
- name: "Configuration générale HomeLab" hosts: "all" become: "yes" roles: - packages_install - users_create |
6) Création d’un inventaire ansible
6.1) Création d’un fichier d’inventaire
1 |
nano /ansible/test/inventory/00-inventory.yml |
Contenu du fichier :
1 2 3 4 5 |
all: children: HomeLab: hosts: srv1: |
7) Variables de groupe
7.1) Création d’un répertoire contenant les variables du groupe « all »
1 |
mkdir /ansible/test/inventory/group_vars/all |
7.2) Création du fichier principal de variable
1 |
nano /ansible/test/inventory/group_vars/all/main.yml |
Contenu du fichier :
1 2 3 4 |
role_packages_install_packages: "sudo,htop,git,qemu-guest-agent,tree" role_users_create_UsersAndGroups: - { user: "jean", groups: "sudo" } - { user: "backupjj", groups: "sudo" } |
role_packages_install_packages
: Liste des paquets à installer par le rôle packages_install
.role_users_create_UsersAndGroups
: Liste des utilisateurs et de leurs groupes d’appartenance à créer par le rôle users_create
.
8) Exécution du playbook ansible
8.1) Se déplacer dans le répertoire de projet ansible
1 |
cd /ansible/test |
8.2) Lancer le playbook_upgrade_all_packages.yml
1 |
ansible-playbook -i inventory playbook_upgrade_all_packages.yml -K |
–i : Spécifier le fichier d’inventaire.
-K : Demander le mot de passe pour l’élévation de privilège sudo.
-k : Demander le mot de passe pour la connexion ssh (si on ne souhaite pas utiliser l’authentification par clé ssh).
Résultat :
![](https://i0.wp.com/www.jjworld.fr/wp-content/uploads/2024/07/image.png?resize=855%2C223&ssl=1)
L’exécution suivante :
![](https://i0.wp.com/www.jjworld.fr/wp-content/uploads/2024/07/image-1.png?resize=855%2C221&ssl=1)
8.3) Lancer le playbook.yml
1 |
ansible-playbook -i inventory playbook.yml -K |
Résultat :
![](https://i0.wp.com/www.jjworld.fr/wp-content/uploads/2024/07/image-2.png?resize=855%2C284&ssl=1)
L’exécution suivante :
![](https://i0.wp.com/www.jjworld.fr/wp-content/uploads/2024/07/image-3.png?resize=855%2C304&ssl=1)
Voilà ! C’est terminé !
Vous pouvez maintenant automatiser des tâches grâce à Ansible.
Il ne reste plus qu’à :
- Créer vos propres rôles, playbooks et inventaires ansible.
- Exécuter vos playbooks ansible depuis l’interface web de Semaphore UI.
- Utiliser la section commentaires pour me faire part de vos remarques ou problèmes rencontrés.
- Visiter la page de la documentation officielle pour aller encore plus loin.
- Faire un don pour soutenir notre travail.
En savoir plus sur Jj World
Subscribe to get the latest posts sent to your email.
Laisser un commentaire