In diesem Blogbeitrag zeige ich Dir, wie Du ein Ansible Playbook erstellst, um Windows-Updates auf Deinen Systemen anzuwenden. Dieses Playbook ermöglicht es Dir, automatisiert Sicherheits- und Systemupdates auf allen Windows Windows Clients und Servern zu installieren.
Einführung
Ansible ist ein mächtiges Tool zur Automatisierung von IT-Prozessen, und mit diesem Playbook kannst Du sicherstellen, dass Deine Windows-Systeme stets auf dem neuesten Stand sind. Das Playbook sorgt dafür, dass notwendige Updates installiert und erforderliche Neustarts durchgeführt werden.
Aufbau des Playbooks
Allgemeine Struktur
Das Playbook ist so aufgebaut, dass es auf allen angegebenen Hosts (in diesem Fall Windows-Rechner) ausgeführt wird. Es sammelt zunächst Fakten über die Systeme und überprüft dann, ob ein Neustart erforderlich ist, bevor es mit der Installation der Updates fortfährt.
Variablen und Aufgaben
Variable für Neustart-Bedarf:
vars:
initial_reboot: |-
{{ 86400 <
(( ((ansible_date_time.date+" "+ansible_date_time.time)|to_datetime('%Y-%m-%d %H:%M:%S')) -
ansible_facts.lastboot|to_datetime('%Y-%m-%d %H:%M:%SZ')).total_seconds())|abs }}
Diese Variable überprüft, ob die Systemlaufzeit länger als ein Tag ist. Wenn ja, wird ein Neustart vor der Update-Installation empfohlen.
Systeme neu starten bei hoher Betriebszeit:
- name: Neustart, wenn das System eine hohe Betriebszeit hat
win_reboot:
when: initial_reboot and not ansible_check_mode
tags:
- never
- reboot
Hier wird das System neu gestartet, falls es eine hohe Betriebszeit hat, um sicherzustellen, dass das System frisch ist, bevor Updates angewendet werden.
Updates suchen und installieren:
- block:
- name: >
{{ 'Install' if 'install' in ansible_run_tags else 'Search' }} updates
{{ 'will automatically reboot' if 'reboot' in ansible_run_tags else 'no reboot' }}
win_updates:
category_names:
- SecurityUpdates
- CriticalUpdates
- UpdateRollups
- DefinitionUpdates
- Updates
reboot: "{{ 'yes' if 'reboot' in ansible_run_tags else 'no' }}"
state: "{{ 'installed' if 'install' in ansible_run_tags else 'searched' }}"
become: yes
become_method: runas
become_user: SYSTEM
register: update_results
tags:
- never
- install
- check
Diese Aufgabe sucht nach den angegebenen Updates und installiert sie, falls erforderlich. Der Parameter reboot
bestimmt, ob das System nach der Installation automatisch neu gestartet wird.
Fehlerbehandlung bei fehlgeschlagenen Updates:
rescue:
- name: Windows-Update fehlgeschlagen?
debug:
msg: "Fehler: {{ update_results.msg }}"
when: update_results is failed and update_results.msg is defined
tags:
- always
Falls die Updates fehlschlagen, wird hier eine Fehlermeldung ausgegeben.
Erneuter Neustart bei ausstehenden Updates:
- name: Server hatte ausstehende Neustarts?
win_reboot:
when: not ansible_check_mode and
update_results is failed and
update_results.msg is search('A reboot is required')
tags:
- never
- reboot
Wenn ein Neustart erforderlich ist, wird dieser hier ausgeführt.
Ergebnisse melden:
always:
- name: Ergebnisse melden
debug:
var: update_results
tags:
- never
- install
- check
Am Ende werden die Ergebnisse der Update-Installation gemeldet.
Das gesamte Playbook
---
# BESCHREIBUNG
# Windows-Updates anwenden
- name: Windows-Updates anwenden
hosts: all
gather_facts: yes
vars:
initial_reboot: |-
{{ 86400 <
(( ((ansible_date_time.date+" "+ansible_date_time.time)|to_datetime('%Y-%m-%d %H:%M:%S')) -
ansible_facts.lastboot|to_datetime('%Y-%m-%d %H:%M:%SZ')).total_seconds())|abs }}
tasks:
# Systeme neu starten, wenn die Betriebszeit länger als ein Tag ist
# auf diese Weise wissen wir, dass das System wieder hochgefahren ist
# bevor Updates angewendet wurden
- name: Neustart, wenn das System eine hohe Betriebszeit hat
win_reboot:
when: initial_reboot and not ansible_check_mode
tags:
- never
- reboot
- block:
- name: >
{{ 'Install' if 'install' in ansible_run_tags else 'Search' }} updates
{{ 'will automatically reboot' if 'reboot' in ansible_run_tags else 'no reboot' }}
win_updates:
category_names:
- SecurityUpdates
- CriticalUpdates
- UpdateRollups
- DefinitionUpdates
- Updates
reboot: "{{ 'yes' if 'reboot' in ansible_run_tags else 'no' }}"
state: "{{ 'installed' if 'install' in ansible_run_tags else 'searched' }}"
become: yes
become_method: runas
become_user: SYSTEM
register: update_results
tags:
- never
- install
- check
rescue:
- name: Windows-Update fehlgeschlagen?
debug:
msg: "Fehler: {{ update_results.msg }}"
when: update_results is failed and update_results.msg is defined
tags:
- always
- name: Server hatte ausstehende Neustarts?
win_reboot:
when: not ansible_check_mode and
update_results is failed and
update_results.msg is search('A reboot is required')
tags:
- never
- reboot
always:
- name: Ergebnisse melden
debug:
var: update_results
tags:
- never
- install
- check
Nutzung und Beispielbefehle
Um dieses Ansible Playbook für die Installation von Windows-Updates zu nutzen, musst Du sicherstellen, dass Du Ansible korrekt konfiguriert hast und dass Deine Windows-Hosts erreichbar sind. Hier sind die Schritte und Befehle, um das Playbook auszuführen:
- Ansible installieren und konfigurieren: Stelle sicher, dass Ansible auf Deinem Steuerrechner installiert ist. Konfiguriere die
hosts
-Datei, um Deine Windows-Rechner einzubeziehen. - Playbook ausführen: Du kannst das Playbook mit verschiedenen Tags ausführen, um spezifische Aufgaben zu erledigen. Hier sind einige Beispielbefehle:
- Überprüfen, welche Updates verfügbar sind:
ansible-playbook -i hosts windows_updates.yml --tags check
Dieser Befehl durchsucht die Windows-Rechner nach verfügbaren Updates, ohne sie zu installieren.
Updates installieren, ohne Neustart:
ansible-playbook -i hosts windows_updates.yml --tags install
Dieser Befehl installiert die gefundenen Updates, ohne das System automatisch neu zu starten.
Updates installieren und bei Bedarf neu starten:
ansible-playbook -i hosts windows_updates.yml --tags install,reboot
Dieser Befehl installiert die Updates und startet das System neu, falls dies notwendig ist.
Nur Systeme mit hoher Betriebszeit neu starten:
ansible-playbook -i hosts windows_updates.yml --tags reboot
Dieser Befehl startet nur die Systeme neu, die eine Betriebszeit von mehr als einem Tag haben.
Durch die Nutzung dieser Befehle kannst Du gezielt steuern, wie und wann Updates auf Deinen Windows-Systemen angewendet werden. So hast Du die volle Kontrolle über den Update-Prozess und kannst sicherstellen, dass Deine Systeme stets aktuell und sicher sind.
Fazit
Mit diesem Ansible Playbook kannst Du sicherstellen, dass Deine Windows-Systeme immer die neuesten Sicherheits- und Systemupdates erhalten. Es automatisiert den Prozess der Überprüfung, Installation und des Neustarts, was Dir viel Zeit und Mühe spart. Setze das Playbook in Deiner Umgebung ein und halte Deine Systeme auf dem neuesten Stand und sicher!
Schreibe einen Kommentar