9 Beispiel für Ansible Playbooks für die Windows-Verwaltung

Ich zeige Ihnen mehrere Operationen, die ein Administrator mit Ansible-Playbook auf einem Remote-Windows-System ausführen kann.

Ansible ist heute eines der am häufigsten verwendeten DevOps-Tools auf dem Markt. Es bietet eine Reihe von Windows-Modulen, die zum Konfigurieren und Verwalten des Windows-Servers verwendet werden. Ich gehe davon aus, dass Sie Ansible bereits unter Windows installiert haben, von wo aus Sie die Windows-Server verwalten möchten.

Im Folgenden sind einige der häufig verwendeten Aufgaben aufgeführt, die von Windows-Administratoren täglich ausgeführt werden. Sie werden staunen, wie einfach sich Windows mit Ansible administrieren lässt.

Die IP-Adresse meines Ansible-Windows-Controller-Computers lautet 192.168.0.106, und die IP-Adresse meines Remote-Windows-Systems lautet 192.168.0.102. Bevor Sie beginnen, stellen Sie sicher, dass Sie ein win_ping-Modul ausführen, um zu prüfen, ob Sie eine Verbindung zum Windows-Remoteserver herstellen können oder nicht.

[email protected] ~
$ ansible win -m win_ping
192.168.0.102 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Meine Verbindung zu einem Remote-Host ist erfolgreich.

Fangen wir also mit Ansible Playbooks an…

Kopieren von Dateien

win_copy ist ein Ansible-Modul, das eine Datei vom lokalen Server auf einen entfernten Windows-Host kopiert. Ich werde dieses Modul verwenden, um ein einzelnes PDF zu kopieren.

Verwenden Sie den folgenden YAML-Code und geben Sie die Quell- und Zielpfade an.

[email protected] ~
$ vi copy.yml
---

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

Führen Sie das Ansible-Playbook für win_copy aus.

[email protected] ~
$ ansible-playbook copy.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Copy File] *****************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Die Datei wurde erfolgreich an den Zielspeicherort auf einem entfernten Windows-System kopiert.

MSI installieren/deinstallieren

Um eine Anwendung mithilfe der MSI-Datei zu installieren, müssen Sie win_get_url verwenden, um den Pfad der herunterzuladenden MSI-Datei anzugeben, und dann das Modul win_package verwenden, um sie zu installieren. Der Status „Vorhanden“ bedeutet, dass die MSI auf dem Computer installiert wird und sich die Anwendung im aktuellen Status befindet.

Hier installiere ich Apache.

Zu verwendender YAML-Code:

[email protected] ~
$ vi msi.yml
---
- name: Installing Apache MSI 
  hosts: win 
 
  tasks:
    - name: Download the Apache installer
      win_get_url:
        url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi
        dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

    - name: Install MSI
      win_package: 
        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi
        state: present

Führen Sie das Ansible-Playbook aus, um es mit MSI zu installieren.

[email protected] ~
$ ansible-playbook msi.yml

PLAY [Installing Apache MSI] *****************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Download the Apache installer] *********************************************************************************************************
changed: [192.168.0.102]

TASK [Install MSI] ***************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Gehen Sie nun zum Windows-System und prüfen Sie, ob die Apache-Anwendung erfolgreich installiert wurde.

C:Userswdzwdz>cd C:Program Files (x86)Apache Software FoundationApache2.2bin
C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v
Server version: Apache/2.2.25 (Win32)
Server built: Jul 10 2013 01:52:12

Sie können Anwendungen auch mithilfe von MSI mit Argumenten installieren. Unten ist das gleiche Beispiel wie oben, aber anstelle eines Zustands verwenden wir ein Installationsargument, um Apache zu installieren.

Zu verwendender YAML-Code:

---

- name: Installing Apache MSI 

  hosts: win 

  tasks:

    - name: Download the Apache installer

      win_get_url:

        url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi

        dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi


    - name: Install MSI

      win_package: 

        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

        arguments:

          - /install

          - /passive

          - /norestart

Um eine Anwendung mithilfe der MSI-Datei zu deinstallieren, müssen Sie das win_package-Modul verwenden. Der Status nicht vorhanden bedeutet, dass die Anwendung mithilfe der MSI-Datei deinstalliert wird.

Hier deinstalliere ich Apache.

[email protected] ~
$ vi uninstall_msi.yml

---

- name: UnInstalling Apache MSI 

  hosts: win 

  tasks:

    - name: UnInstall MSI

      win_package: 

        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

        state: absent

Führen Sie das Ansible-Playbook aus, um es mit MSI zu deinstallieren.

[email protected] ~
$ ansible-playbook uninstall_msi.yml

PLAY [UnInstalling Apache MSI] *****************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [UnInstall MSI] *************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Wenn ich jetzt die Apache-Version überprüfe, erhalte ich die folgende Ausgabe, wenn die Anwendung deinstalliert wurde.

C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v 'httpd' is not recognized as an internal or external command,
operable program or batch file.

Software deinstallieren (.EXE)

Sie können Software auch mit einer .exe-Datei deinstallieren, indem Sie die Produkt-ID dieser Software verwenden.

[email protected] ~
$ vi uninstall.yml 
---

- hosts: win 

  tasks:

   - name: Uninstall 7-Zip from the exe

     win_package:

       path: C:Program Files7-ZipUninstall.exe

       product_id: 7-Zip

       arguments: /S

       state: absent

Führen Sie das Ansible-Playbook aus, um 7-Zip zu deinstallieren.

[email protected] ~
$ ansible-playbook uninstall.yml

PLAY [win] *************************************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]

TASK [Uninstall 7-Zip from the exe] ***********************************************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP *************************************************************************************************************************************************************************************
192.168.0.102              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Windows-Dienste stoppen/starten/neu starten

Das ansible Modul win_service wird verwendet, um einen Dienst zu starten, zu stoppen oder neu zu starten. Hier zeige ich Ihnen, wie Sie den Tomcat-Dienst stoppen können.

Sie müssen den Dienstnamen in der YAML-Datei erwähnen und den Status auf Stopp setzen.

[email protected] ~
$ vi service.yml
---
- hosts: win 

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Führen Sie das Ansible-Playbook aus, um den Tomcat-Dienst zu stoppen.

[email protected] ~
$ ansible-playbook service.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Stop service Tomcat] ****************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Wenn Sie den Tomcat-Dienst auf dem Windows-System überprüfen, befindet er sich jetzt im gestoppten Status.

Sie können den Status als gestartet, neu gestartet oder angehalten definieren, um den Status des Dienstes zu ändern.

Fakten sammeln

Mit dem ansiblen Modul win_disk_facts können Sie alle Festplatteninformationen des Zielhosts abrufen.

[email protected] ~
$ vi disk.yml
---
- hosts: win 
  tasks: 
  - name: Get disk facts
    win_disk_facts:

  - name: Output first disk size
    debug:
      var: ansible_facts.disks[0].size

  - name: Convert first system disk into various formats
    debug:
      msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}'
    vars:
      # Get first system disk
      disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}'

      # Show disk size in Gibibytes
      disksize_gib_human: '{{ disk.size|filesizeformat(true) }}' 
      disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB'

Führen Sie das Ansible-Playbook aus, um die Datenträgerinformationen abzurufen.

[email protected] ~
$ ansible-playbook disk.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Get disk facts] ************************************************************************************************************************
ok: [192.168.0.102]

TASK [Output first disk size] ****************************************************************************************************************
ok: [192.168.0.102] => {

"ansible_facts.disks[0].size": "1000204886016"
}

TASK [Convert first system disk into various formats] ****************************************************************************************
ok: [192.168.0.102] => {
"msg": "932 GiB vs 931.5 GiB"
}

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=4 changed=0 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Mit dem Ansible-Modul win_command können Sie Befehle auf dem Remote-Host ausführen und CPU-Informationen, Gerätedetails und vieles mehr abrufen.

[email protected] ~
$ vi check.yml
---
- hosts: win 
  tasks:
   - name: Get disk facts
     win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status
     register: usage

   - debug: msg="{{ usage.stdout }}"

Führen Sie das Ansible-Playbook aus, um Remote-Systeminformationen abzurufen.

[email protected] ~
$ ansible-playbook check.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Get facts] ************************************************************************************************************************
changed: [192.168.0.102]

TASK [debug] *********************************************************************************************************************************
ok: [192.168.0.102] => {
"msg": "Caption DeviceID MaxClockSpeed
Name
NumberOfCores Status rrnIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK rrnrrn"
}

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
skipped=0 rescued=0
ignored=0

Ausführen von Befehlen

Welche Befehle Sie auch immer in einem Fenster ausführen, sie können über das ansible win_command-Modul ausgeführt werden. Sie müssen nur den Befehl in Ihrer YAML-Datei angeben. Hier erstelle ich nur ein Verzeichnis.

[email protected] ~
$ vi commands.yml
---

- hosts: win 

  tasks:

   - name: run an executable using win_command

     win_command: whoami.exe


   - name: run a cmd command

      win_command: cmd.exe /c mkdir C:test

Führen Sie das Ansible-Playbook aus, um die win_command-Operation auszuführen.

[email protected] ~
$ ansible-playbook commands.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [run an executable using win_command] ***************************************************************************************************
changed: [192.168.0.102]

TASK [run a cmd command] *********************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Umgebungsvariablen

Ein Windows-System hat mehrere Umgebungsvariablen, zum Beispiel JAVA_HOME. Mit dem ansiblen Modul win_environment können Sie Umgebungsvariablen auf einem Windows-System hinzufügen oder ändern. In diesem Beispiel füge ich der Liste der Windows-Umgebungsvariablen eine neue Variable hinzu.

[email protected] ~
$ vi env.yml
---
- hosts: win 
  tasks:
   - name: Set an environment variable for all users
     win_environment:
       state: present
       name: NewVariable
       value: New Value
       level: machine

Führen Sie das Ansible-Playbook aus, um die Umgebungsvariable auf einem Remote-Windows-Computer hinzuzufügen.

[email protected] ~
$ ansible-playbook env.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Set an environment variable for all users] *********************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Gehen Sie zum Fenster der Umgebungsvariablen; Sie werden sehen, dass die neue Variable, die Sie gerade hinzugefügt haben, hier vorhanden ist.

Registrierung hinzufügen/bearbeiten

Das ansible Modul win_regedit wird verwendet, um Registrierungsdetails auf einem entfernten Windows-Rechner hinzuzufügen oder zu bearbeiten. Sie müssen den Pfad der Registrierung und den Inhalt angeben, der hinzugefügt/aktualisiert werden soll. Hier erstelle ich einen neuen Registrierungseintrag wdzwdz im Pfad HKLM:SOFTWARE und füge dann Namen und Daten zu dieser Registrierung hinzu.

[email protected] ~
$ vi registry.yml
---

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREwdzwdz

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREwdzwdz

      name: Geek

      data: Flare

Führen Sie das Ansible-Playbook aus, um die Registrierung hinzuzufügen.

[email protected] ~
$ ansible-playbook registry.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Creating a registry] *******************************************************************************************************************
changed: [192.168.0.102]

TASK [Modifying a registry, adding name and data] ********************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Wenn Sie auf dem Remote-System zum Registrierungseditor wechseln, können Sie sehen, dass diese Registrierung erfolgreich mit Namens- und Datenparametern hinzugefügt wurde.

Protokoll löschen

Das ansible Modul win_eventlog wird zum Hinzufügen, Löschen oder Entfernen von Windows-Ereignisprotokollen aus dem Windows-System verwendet.

Gehen Sie zu Windows Powershell und listen Sie die EventLogs auf, die auf dem Remote-Windows-Computer vorhanden sind.

PS C:Userswdzwdz> Get-EventLog -List                                                                                 
  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  20,480      0 OverwriteAsNeeded      33,549 Application
  20,480      0 OverwriteAsNeeded           0 HardwareEvents
     512      7 OverwriteOlder             20 Internet Explorer
  20,480      0 OverwriteAsNeeded           0 Key Management Service
     128      0 OverwriteAsNeeded         190 OAlerts
                                              Security
  20,480      0 OverwriteAsNeeded      44,828 System
  15,360      0 OverwriteAsNeeded       3,662 Windows PowerShell

Jetzt werde ich zeigen, wie man Protokolle aus allen Quellen für Internet Explorer entfernt.

[email protected] ~
$ vi log.yml
---
- hosts: win 
  tasks:
   - name: Remove Internet Explorer Logs
     win_eventlog:
      name: Internet Explorer
      state: absent

Führen Sie das Ansible-Playbook aus, um den Internet Explorer vom Remote-Windows-Computer zu entfernen.

[email protected] ~
$ ansible-playbook log.yml

PLAY [win] *************************************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]

TASK [Remove Internet Explorer Logs] **********************************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP *************************************************************************************************************************************************************************************
192.168.0.102              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Wenn Sie die EventLogs jetzt erneut auflisten, sehen Sie, dass Internet Explorer-Protokolle entfernt wurden.

PS C:Userswdzwdz> Get-EventLog -List

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  20,480      0 OverwriteAsNeeded      33,549 Application
  20,480      0 OverwriteAsNeeded           0 HardwareEvents
  20,480      0 OverwriteAsNeeded           0 Key Management Service
     128      0 OverwriteAsNeeded         190 OAlerts
                                              Security
  20,480      0 OverwriteAsNeeded      44,835 System
  15,360      0 OverwriteAsNeeded          56 Windows PowerShell

Das war also alles über Ansible-Playbooks, die für die Remote-Windows-Verwaltung verwendet werden können. Probieren Sie diese Playbooks aus. Sie können auch andere ausprobieren Ansible Windows-Module verfügbar.