Comment utiliser les modules Ansible pour les tâches d’administration système - Partie 6
Dans cette partie 6 de la série Ansible, nous avons couvert quelques modules Ansible dans les rubriques précédentes, nous allons maintenant approfondir et découvrir des modules supplémentaires qui sont utiles pour effectuer un certain nombre de tâches d’administration système.
Vous aurez une idée de base de chaque module et examinerez les options disponibles pour accomplir certaines tâches.
Sur cette page :
- Gestion des progiciels et des référentiels dans Ansible
- Gestion des services à l’aide d’Ansible
- Gestion du pare-feu avec Ansible
- Archivage de fichiers ou de dossiers avec Ansible
- Planifier des tâches avec Ansible
- Gérer les utilisateurs et les groupes avec Ansible
- Créer des fichiers et des répertoires avec Ansible
- Gestion du stockage avec Ansible
- Gestion des systèmes de fichiers avec Ansible
1. Gestion des progiciels et des référentiels dans Ansible
Lors de l’installation de paquets sur des systèmes Linux, différentes distributions sont livrées avec différents gestionnaires de paquets. Pour les distributions RedHat, nous avons yum & dnf tandis que pour les versions Debian, il y a apt.
Ansible est livré avec un module appelé package, qui élimine le besoin d’utiliser différents gestionnaires de packages pour différents systèmes. Il utilise automatiquement le gestionnaire de paquets correspondant au système hôte, ce qui facilite le travail.
Installer des progiciels
Par exemple, pour installer htop dans un groupe d’hôtes comprenant à la fois des distributions Debian et RedHat, utilisez le module de paquet comme indiqué dans le playbook install_htop.yml ci-dessous.
---
- name: Install htop on Ubuntu and CentOS
hosts: all
tasks:
- package:
name: htop
state: installed
NOTE : Les noms de paquets peuvent différer d’un système d’exploitation à l’autre. Par exemple, nous avons httpd dans les distributions Redhat et Apache2 pour les systèmes Debian/Ubuntu qui désignent tous le serveur web Apache. Par conséquent, il faut redoubler de prudence lors du passage de ces colis. En général, il est préférable d’utiliser des variables ou des instructions conditionnelles.
2. Gestion des services à l’aide d’Ansible
Ensuite, nous avons un module de service, qui est utilisé pour gérer les services sur les systèmes Linux. Il est utilisé pour démarrer, arrêter ou redémarrer un service. Vous pouvez également l’utiliser pour activer un service afin qu’il démarre automatiquement le service lorsqu’un système démarre.
Démarrer et activer un service
Par exemple, pour démarrer et activer le serveur web Apache sur RHEL 8, utilisez le service comme indiqué.
---
- name: Start and enable httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: started
enabled: yes
Arrêter un service
Pour arrêter le service httpd, passez l’attribut stoped.
---
- name: Stop httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: stopped
Redémarrer un service
Pour redémarrer le service httpd, passez l’attribut restarted.
---
- name: Restart httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: restarted
3. Gestion du pare-feu avec Ansible
Une autre tâche importante des administrateurs système est la gestion du pare-feu. Dans les playbooks Ansible, cela a été beaucoup plus facile avec les modules firewalld et ufw. Vous pouvez configurer le pare-feu pour autoriser ou bloquer un port ou un service, ou même une adresse source.
Jetons un coup d’œil à quelques exemples :
Ouvrir/bloquer le port 80 dans firewalld
---
- name: Allow port 80
hosts: webservers
tasks:
-firewalld:
port: 80/tcp
permanent: yes
state: enabled
Dans le playbook ci-dessus, le port 80 est autorisé à travers le pare-feu.
L’option permanent : yes applique la règle de pare-feu et la rend persistante lors des redémarrages. Cependant, cette règle ne s’applique pas immédiatement. Il n’entre en vigueur qu’après un redémarrage. Pour appliquer la règle immédiatement, utilisez l’option immédiat : oui.
Pour spécifier les adresses autorisées, utilisez l’instruction source :0.0.0.0/0.
- firewalld:
source: 192.168.0.0/24
zone: public
state: enabled
Pour spécifier une plage de ports à autoriser à utiliser l’option de port comme suit :
- firewalld:
port: 213-567/udp
permanent: yes
state: enabled
Pour bloquer le port, modifiez l’option d’état sur désactivé comme indiqué :
-firewalld:
port: 80/tcp
permanent: yes
state: disabled
Ajouter/Bloquer un service dans firewalld
Outre l’ajout/blocage d’un port, vous pouvez également appliquer les mêmes règles à un service. Et c’est assez simple. Il suffit d’utiliser le module de service et d’ajouter le service à ajouter et de s’assurer que l’option d’état est définie sur activé.
- firewalld:
service: https
permanent: true
state: enabled
Pour bloquer le service, définissez l’option d’état sur désactivé.
- firewalld:
service: https
permanent: true
state: disabled
4. Archivage de fichiers ou de dossiers avec Ansible
L’archivage fait référence à la compression d’un fichier ou d’un dossier dans un format facilement portable et de plus petite taille. Ansible est livré avec un module appelé archive. La compression d’un fichier est à peu près aussi simple que possible. Il suffit de spécifier le chemin d’accès source du fichier et la destination du fichier compressé.
Compresser un répertoire
Considérez un manuel compress.yml ci-dessous.
---
- hosts: webservers
tasks:
• name: Compress a folder
archive:
path: /opt/data/web
dest: /tmp/web.gz
Le playbook ci-dessus compresse le répertoire /opt/data/web et l’enregistre dans /tmp/web.gz.
Compresser un répertoire avec le format
Le format de compression par défaut est .gz, mais il peut être spécifié à l’aide de l’attribut format. Échantillonnez le prochain Playbook.
---
- hosts: webservers
Tasks:
- name: Create a zip archive
archive:
path: /opt/data/web
dest: /tmp/web
format: zip
Le playbook ci-dessus compresse le répertoire /opt/data/web dans /tmp/web.zip.
Décompresser un fichier
Vous pouvez également décompresser un fichier compressé à l’aide de l’attribut unarchive. Considérez le manuel ci-dessous.
---
- hosts: webservers
tasks:
- name:Uncompress /tmp/web.gz to/opt directory on Ansible controller
unarchive:
src: /tmp/web.bz2
dest: /opt/
Le playbook ci-dessus décompresse le fichier /opt/data/web.gz en /opt sur le contrôleur Ansible.
Décompresser un fichier sur Remote Node
Pour spécifier le système source distant, utilisez l’option remote_src=yes.
---
- hosts: webservers
tasks:
- name:Uncompress /tmp/web.bz2 to/opt on remote host
unarchive:
src: /tmp/web.bz2
dest: /opt/
remote_src=yes
Le playbook ci-dessus décompresse le fichier /tmp/web.bz2 sur le nœud distant dans le répertoire /opt/.
5. Planifier des tâches avec Ansible
Le module cron permet de planifier des tâches dans les playbooks Ansible.
Création d’une tâche planifiée
Considérez le manuel ci-dessous.
---
- hosts: webservers
tasks:
- name: Create a scheduled task
cron:
name: Run employee attendance
job: sh /opt/scripts/attendace.sh
month: 4
day: 5
hour: 17
minute: 00
Le guide exécute le script de présence le 5 avril à 17h00.
Planifier un script à une date précise
Si vous souhaitez que ce script ne s’exécute que si le 5 avril est un lundi, utilisez l’attribut weekday : 1. 0 désigne le dimanche et 6 le samedi selon la notation cron.
month: 4
day: 5
hour: 17
minute: 00
weekday: 1
Un astérisque (*) dans l’un de ces champs indique une valeur.
Exécuter un Job à une date
Pour exécuter le travail le 5 avril à 17h00, quel que soit le jour de la semaine, utilisez les paramètres de temps comme indiqué.
month: 4
day: 5
hour: 17
minute: 00
weekday: *
Exécuter une tâche à un jour précis de chaque mois
Pour exécuter la tâche cron le 5e jour de chaque mois à 17h00, utilisez les paramètres ci-dessous.
month: *
day: 5
hour: 17
minute: 00
weekday: *
Exécuter une tâche quotidiennement
Pour exécuter la tâche cron tous les jours à 17h00, réglez les paramètres de temps comme indiqué :
month: *
day: *
hour: 17
minute: 00
weekday: *
Exécuter un travail toutes les 5 heures
Pour exécuter la tâche cron toutes les 5 heures, utilisez la valeur d’étape */5 comme indiqué.
month: *
day: *
hour: */5
minute: *
weekday: *
6. Gérer les utilisateurs et les groupes avec Ansible
Vous pouvez également gérer les utilisateurs et les groupes dans les playbooks Ansible sans effort.
Créer un nouvel utilisateur
Pour créer un nouvel utilisateur, utilisez le module utilisateur comme indiqué.
---
- hosts: webservers
tasks:
- name: Create a new user
user:
name: Jack
Vous pouvez également ajouter des options supplémentaires telles que l’UID, les groupes.
- name: Create a new user
user:
name: Jack
comment: Jack Peters
uid: 1002
group: administrators
shell: /bin/bash
Supprimer un utilisateur
Pour supprimer l’utilisateur, utilisez l’instruction remove : yes.
- name: Remove the user 'Jack'
user:
name: Jack
state: absent
remove: yes
Créer un nouveau groupe
Pour créer un nouveau groupe, utilisez le module de groupe.
- name: Create a group
group:
name: developers
7. Créez des fichiers et des répertoires avec Ansible
Pour créer des fichiers de répertoires, utilisez le module file.
Créer un nouvel annuaire
Par exemple, pour créer un nouveau répertoire.
---
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/app
state: directory
Vous pouvez ajouter d’autres attributs tels que les autorisations de propriétaire, de groupe et de fichier.
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/web
state: directory
owner: www-data
group: www-data
mode: 0644
De plus, vous pouvez créer des répertoires de manière récursive à l’aide de l’instruction recurse : yes.
---
- hosts: webservers
tasks:
- name: Create directories recursively
file:
path: /opt/web/app
state: directory
owner: www-data
group: www-data
mode: 0644
recurse: yes
Créer un fichier
Pour créer un fichier, utilisez l’option état : touch.
---
- hosts: webservers
tasks:
- name: Create a new file
file:
path: /opt/web/index.html
state: touch
owner: www-data
group: www-data
mode: 0644
8. Gestion du stockage avec Ansible
Le module lvg est utilisé pour configurer les volumes et les groupes LVM.
Création d’un groupe de volumes LVM
Considérez le manuel ci-dessous :
---
- hosts: webservers
tasks:
• name: Create lVM volume group
lvg:
vg: vg1
pvs: /dev/sda1
pesize: 32
Cela crée un groupe de volumes au-dessus de la partition /dev/sda1 avec une taille d’extension physique de 32 Mo.
Une fois créé, utilisez le module lvol pour créer un volume logique comme indiqué
Création d’un volume logique
---
- hosts: webservers
tasks:
- name: Create lVM volume
lvol:
vg: vg1
lv: lvol1
pvs: /dev/sda1
9. Gestion des systèmes de fichiers avec Ansible
Pour créer un système de fichiers sur un périphérique en mode bloc, utilisez le module de système de fichiers.
Création d’un système de fichiers
Le playbook ci-dessous crée le type de système de fichiers xfs sur le volume de blocs.
---
- hosts: webservers
tasks:
- name: Create a filesystem
filesystem:
fstype: xfs
dev: /dev/vg1/lvol1
Monter un système de fichiers
Vous pouvez ensuite procéder au montage du volume de bloc à l’aide du module de montage, comme indiqué dans le playbook ci-dessous :
---
- hosts: webservers
tasks:
- name: Mount a filesystem
mount:
fstype: xfs
src: /dev/vg1/lvol1
path: /opt/web
state: mounted
Conclusion
Ceci conclut le sujet. Nous avons couvert diverses tâches d’administration système qui peuvent être accomplies par des modules intégrés spécifiques dans les Playbooks Ansible.




