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
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 }