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 sujets précédents. 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 packages sur des systèmes Linux, différentes distributions sont livrées avec différents gestionnaires de packages. 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 packages correspondant du système hôte, facilitant ainsi le travail.
Installer des progiciels
Par exemple, pour installer htop dans un groupe de hôtes comprenant à la fois les distributions Debian et RedHat, utilisez le module package 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
REMARQUE : les noms des packages 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 Apache serveur Web. Par conséquent, des précautions supplémentaires doivent être prises lors du passage de ces colis. Il est généralement préférable d’utiliser des variables ou des instructions conditionnelles.
2. Gestion des services à l'aide d'Ansible
Ensuite, nous avons un module 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 que lorsqu'un système démarre, il démarre automatiquement le service.
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, transmettez l'attribut stopped.
---
- name: Stop httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: stopped
Redémarrer un service
Pour redémarrer le service httpd, transmettez 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 entreprise par les administrateurs système est la gestion du pare-feu. Dans les playbooks Ansible, cela a été rendu beaucoup plus facile grâce aux 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.
Allons-y et examinons quelques exemples :
Ouvrir/bloquer le port 80 dans pare-feu
---
- 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 : oui
applique la règle de pare-feu et la rend persistante lors des redémarrages. Toutefois, 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 immediate : yes
.
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 autorisés à 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/le blocage d'un port, vous pouvez également appliquer les mêmes règles à un service. Et c'est assez simple. Utilisez simplement le module service et ajoutez le service à ajouter et assurez-vous 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 state sur disabled.
- 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. Compresser un fichier est aussi simple que possible. Il suffit de spécifier le chemin source du fichier et la destination du fichier compressé.
Compresser un répertoire
Considérez un playbook 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 format
Le format de compression par défaut est .gz
, cependant, 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 playbook 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 un nœud distant
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. Planifiez des tâches avec Ansible
Le module cron aide à planifier les tâches dans Ansible Playbooks.
Créer une tâche planifiée
Considérez le playbook 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 playbook exécute le script de présence le 5 avril à 17h00.
Planifier un script à une date précise
Si vous souhaitez planifier l'exécution de ce script uniquement si le 5 avril est un lundi, utilisez l'attribut weekday: 1. 0 désigne dimanche et 6 désigne 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 n'importe quelle valeur.
Exécuter un travail à une date
Pour exécuter la tâche le 5 avril à 17h00, quel que soit le jour de la semaine, utilisez les paramètres d'heure comme indiqué.
month: 4
day: 5
hour: 17
minute: 00
weekday: *
Exécuter un travail un jour spécifique de chaque mois
Pour exécuter la tâche cron le 5ème jour de chaque mois à 17h00, utilisez les paramètres ci-dessous.
month: *
day: 5
hour: 17
minute: 00
weekday: *
Exécuter un travail quotidiennement
Pour exécuter la tâche cron quotidiennement à 17h00, définissez les paramètres d'heure 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 user 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 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 nouveau répertoire
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 state: 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éer un groupe de volumes LVM
Considérez le playbook 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éer 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 bloc, utilisez le module filesystem.
Créer un système de fichiers
Le playbook ci-dessous crée le type de système de fichiers xfs sur le volume de bloc.
---
- 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 mount 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 spécifiques intégrés dans Ansible Playbooks.