Le but ici est de patcher des serveurs Linux. Ces derniers peuvent être de différentes distributions.
Pour le détail je vous laisse déchiffrer le playbook
---
- hosts: all
pre_tasks:
tasks:
- name: "Verifier le système d'exploitation"
ansible.builtin.set_fact:
is_rhel: "{{ ansible_distribution in ['Rocky', 'AlmaLinux', 'Fedora'] }}"
is_debian: "{{ ansible_distribution in ['Debian', 'Ubuntu'] }}"
is_centos: "{{ ansible_distribution in ['CentOS', 'RedHat'] }}"
repo_path: "{{ '/etc/yum.repos.d/' if ansible_os_family == 'RedHat' else '/etc/apt/sources.list.d/' }}"
depot_filename: "{{ 'redhat.repo' if ansible_os_family == 'RedHat' else 'ubuntu.list' }}"
- name: "Créer le répertoire de sauvegarde"
ansible.builtin.file:
path: "{{ repo_path }}backup_repo"
state: directory
mode: '0755'
- name: "Lister les fichiers à déplacer (exclure redhat.repo)"
ansible.builtin.find:
paths: "{{ repo_path }}"
patterns: '*'
file_type: file
excludes:
- '{{ depot_filename }}'
- 'backup_repo'
register: files_to_move
- name: Déplacer les fichiers vers backup_repo
ansible.builtin.command:
cmd: "mv {{ item.path }} {{ repo_path }}backup_repo/"
loop: "{{ files_to_move.files }}"
when: files_to_move.files | length > 0
- name: "Mettre à jour uniquement les patchs de sécurité - RHEL"
ansible.builtin.dnf:
name: "*"
security: yes
bugfix: no
state: latest
when: is_rhel
- name: "Clean repo list Ubuntu"
ansible.builtin.apt:
clean: yes
when: is_debian
- name: "Update repo list Ubuntu"
ansible.builtin.apt:
update_cache: yes
when: is_debian
- name: "Resolve Unmet dependencies"
ansible.builtin.shell: apt install --fix-broken -y
when: is_debian
- name: "Remove dependencies that are no longer required"
ansible.builtin.shell: export TMPDIR=/root && apt-get -o DPkg::Options::=--force-confdef autoremove -y
when: is_debian
- name: "Remove old kernel modules that are no longer required"
ansible.builtin.shell: apt purge $(dpkg -l | grep "^rc\s*linux" | awk '{print $2}') -y -f
when: is_debian
- name: "Purge old kernel modules that are no longer required"
ansible.builtin.shell: for f in $(apt-mark showmanual | grep linux-); do apt-mark auto $f; done; apt-get -y autoremove --purge -f
when: is_debian
- name: "Remove package cloud-init"
ansible.builtin.apt:
name: cloud-init
state: absent
purge: true
when: is_debian
- name: "Exécuter uniquement les mises à jour de sécurité - Debian/Ubuntu"
ansible.builtin.shell: export TMPDIR=/root && apt-get -o DPkg::Options::=--force-confdef -s dist-upgrade | grep "^Inst" | grep -i securi | awk -F " " {'print $2'} | xargs apt-get install -y --fix-broken
when: is_debian
- name: "Remontée des informations système"
ansible.builtin.shell: subscription-manager facts --update && subscription-manager refresh
- name: "Planifier le redémarrage"
ansible.builtin.reboot:
msg: "Redémarrage programmé suite au patching de sécurité"
pre_reboot_delay: 120
reboot_timeout: 420
test_command: subscription-manager facts --update
Lien vers le fichier : cliquez ici
Article(s) en relation(s)