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:

  1. Ansible installieren und konfigurieren: Stelle sicher, dass Ansible auf Deinem Steuerrechner installiert ist. Konfiguriere die hosts-Datei, um Deine Windows-Rechner einzubeziehen.
  2. 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!

🤞 1x pro Monat unsere News, Tipps und Tutorials gebündelt direkt in dein Postfach!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.