[Skripte]

Ansible Windows Update Playbook

/ansible-windows-update-playbook

Windows-Updates mit Ansible automatisieren

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

```yaml
- 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 Ansible korrekt konfiguriert ist und Deine Windows-Hosts erreichbar sind.

Updates nur prüfen (kein Installieren)

ansible-playbook -i hosts windows_updates.yml --tags check

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

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

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

Startet nur die Systeme neu, die eine Betriebszeit von mehr als einem Tag haben.


Fazit

Mit diesem Ansible Playbook stellst Du sicher, dass Deine Windows-Systeme immer die neuesten Sicherheits- und Systemupdates erhalten. Der komplette Prozess – Prüfen, Installieren und Neustarten – ist automatisiert und spart Zeit sowie manuellen Aufwand. Setze das Playbook ein, um Deine Systeme zuverlässig aktuell und sicher zu halten.

Anzeige

/comments0 Einträge

Kommentare

> NO_COMMENTS_FOUND

> INITIATE_COMMENT_PROTOCOL

MARKDOWN_SUPPORT: ENABLED
CHARS: 0