Aller au contenu principal

Les rôles Ansible avec Ansible galaxy

Introduction

Ansible galaxy est un paquage qui nous permet de créer des "rôles" Ansible. Un rôle ansible est composé de tâches dont le but est de pouvoir les utiliser dans les playbook sans se fatiguer a les réécrire.

Dans ce wiki nous allons faire un exemple avec un rôle qui nous permettra de mettre à jour des serveur RedHat selon leur version

Ajout d'un fichier requirements.txt

On peut noter que par défaut notre installation ansible n'a pas les modules nécessaires pour faire fonctionner les playbook.

Pour corriger cela, on peut rajouter à notre repository un dossier collections qui contiendra ensuite un fichier requirements.txt

Capture_ecran_2024-11-12_082540.png

sous cette forme là

collections:
- name: community.general
- name: lucasheld.uptime_kuma
- name: community.mysql
- name: community.windows

Initialisation du rôle galaxy

ansible-galaxy init check_update

Installation des requirements

ansible-galaxy install -r requirements.yml

Modification du fichier role/task/main.yml

---
# tasks file for check_update
- name: Check update YUM
ansible.builtin.yum:
list: updates
register: packages
when: ansible_distribution_file_variety == "RedHat" and ansible_distribution_major_version < '9'

- name: Affichage résultat YUM
debug:
msg: >-
{%- set output=[] -%}
{%- for p in packages.results -%}
{{ output.append('%-40s' % (p.name ~ '-' ~ p.version) ~ ' | repo: ' ~ p.repo) }}
{%- endfor -%}
{{ output }}
when: ansible_distribution_file_variety == "RedHat" and ansible_distribution_major_version < '9'

- name: Check update DNF
ansible.builtin.dnf:
list: updates
register: packages
when: ansible_distribution_file_variety == "RedHat" and ansible_distribution_major_version >= '9'

- name: Affichage résultat DNF
debug:
msg: >-
{%- set output=[] -%}
{%- for p in packages.results -%}
{{ output.append('%-40s' % (p.name ~ '-' ~ p.version) ~ ' | repo: ' ~ p.repo) }}
{%- endfor -%}
{{ output }}
when: ansible_distribution_file_variety == "RedHat" and ansible_distribution_major_version >= '9'

Création du playbook check_update.yml

# Playbook Ansible
- hosts: all
gather_facts: true
become: true
remote_user: ansible
roles:
- { role: check_update }