Das Automatisieren des Patch-Deployments auf Windows mit Ansible / AWX, Teil 6: Patch-Deployment

Teil 6 der Artikelserie über die Automatisierung mit Ansible.

Vorwort

In Teil 6 der Artikelserie über die Automatisierung mit Ansible anhand des Beispiels “Patch Deployment auf Windows” deployen wir patches auf unsere Windows-Server.

Nachtrag zu Teil 5

Unterdessen habe ich herausgefunden, warum der WSUS-Server im Lab keine Patches ausliefert: Ich habe einfach vergessen, den WSUS zu synchronisieren und Patches freizugeben… So sieht es aus, wenn auch tatsächlich patches gefunden werden:

Für die Installation der Patches erstellen wir ein neues Playbook. Erstelle bitte im Arbeitsverzeichnis eine neue Datei namens “windows-updates-deploy.yml” und editiere diese:

cd ~/git/ansible
nano -w windows-updates-deploy.yml

Bitte fülle die Datei mit folgendem Inhalt:

---
- hosts: windows
  tasks:
    - name: install windows updates
      win_updates:
        category_names:
        - CriticalUpdates
        - SecurityUpdates
        - UpdateRollups
        reboot: no
        state: installed
      register: win_updates
    - name: reboot if needed
      win_reboot:
        connect_timeout: 15
        pre_reboot_delay: 60
        reboot_timeout: 3600
      when: win_updates.reboot_required
    - name: print installed updates
      debug:
        msg: '{{ win_updates.updates }}'

Mit diesem Playbook installieren wir die Patches der Kategorien “CriticalUpdates”, “SecurityUpdates”, “UpdateRollups”, starten den Computer neu, wenn der Rückgabewert “reboot_required” des 1. Tasks, welchen wir in die Variable “win_updates” registriert haben, wahr ist und geben die installierten Updates in der Konsole aus.

Beachte bitte, dass Variablen in einer Entscheidung (when: win_updates.reboot_required) nicht in geschweifte Klammern eingeschlossen werden. Die Parameter der einzelnen Module findest Du wie immer in der Dokumentation. Ich habe die Timeouts explizit teilweise massiv erhöht, da ich im Lab teilweise über 100 Patches pro Maschine installiere und die Neustarts dementsprechend lange dauern.

Lass es uns testen. Setze bitte das folgende Kommando ab:

ansible-playbook -i inventory -u {{ windows_upn }} \
  -l windows_wsus -k windows-updates-deploy.yml

Die Parameter dieses Befehls sind:

  • -i inventory: Diese Inventar-Datei wird verwendet.
  • -u {{ windows_upn }}: Benutze diesen Benutzernamen, muss mit dem Kerberos-Anmeldenahmen übereinstimmen.
  • -l windows_wsus: Limitiere die Ausführung auf die Hostgruppe windows_wsus. So kannst Du die Wirkung des Playbooks, welches ja auf die Hostgruppe windows abzielt, weiter einschränken.
  • -k: Frage nach dem Kennwort.
  • windows-updates-deploy.yml: Führe dieses Playbook aus.

Nun kannst Du die Server, die Du möchtest, via Ansible aktualisieren!

Es ist empfohlen, nach jedem Deployment nochmals nach weiteren Patches suchen zu lassen und diese auch wieder zu deployen. Auch ein Blick in den WSUS kann nicht schaden, da wir ja nur drei Kategorien an Updates für die Installation zugelassen haben.

Wie Du siehst, hatte ich in meinem Lab eine weitere Runde zu machen:

Auf meinem WSUS habe ich noch Patches der Klassifikation “Updates” und “Feature Packs” freigegeben:

Daher habe ich mein Playbook dementsprechend angepasst:

Zufällig habe ich einen Screenshot einer Windows-Büchse erstellen können, welche durch Ansible gleich neu gestartet wird:

Bitte vergiss nicht, die Änderungen am git-repo zu commiten und zu pushen:

git commit -a -m "Created the playbooks for searching and deploying windows patches"
git push

Nun fehlt nur noch Teil 7, in welchem wir AWX implementieren und bereitstellen. Ich möchte an dieser Stelle eine Pause einlegen, da es ein paar andere Sachen gibt, über welche ich gerne schreiben würde. Aber Teil 7 wird kommen – versprochen!

One thought on “Das Automatisieren des Patch-Deployments auf Windows mit Ansible / AWX, Teil 6: Patch-Deployment”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.