Recherche de site Web

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:
  1. Gestion des progiciels et des référentiels dans Ansible
  2. Gestion des services à l'aide d'Ansible
  3. Gestion du pare-feu avec Ansible
  4. Archivage de fichiers ou de dossiers avec Ansible
  5. Planifier des tâches avec Ansible
  6. Gérer les utilisateurs et les groupes avec Ansible
  7. Créer des fichiers et des répertoires avec Ansible
  8. Gestion du stockage avec Ansible
  9. 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.