9 Ansible Playbooks-voorbeeld voor Windows-beheer

Ik zal u verschillende bewerkingen laten zien die een beheerder kan uitvoeren op een extern Windows-systeem met behulp van ansible-playbook.

Ansible is momenteel een van de meest gebruikte DevOps-tools op de markt. Het biedt een aantal Windows-modules die worden gebruikt om de Windows-server te configureren en te beheren. Ik neem aan dat je Ansible al op Windows hebt geïnstalleerd van waaruit je de Windows-servers wilt beheren.

Hieronder volgen enkele veelgebruikte taken die dagelijks door Windows-beheerders worden uitgevoerd. U zult versteld staan ​​hoe gemakkelijk het is om Windows te beheren met Ansible.

Het IP-adres van mijn Ansible Windows-controller is 192.168.0.106 en het IP-adres van mijn externe Windows-systeem is 192.168.0.102. Voordat u begint, moet u ervoor zorgen dat u een win_ping-module uitvoert om te controleren of u verbinding kunt maken met de externe Windows-server of niet.

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

Mijn verbinding met een externe host is gelukt.

Laten we dus aan de slag gaan met Ansible Playbooks…

Bestanden kopiëren

win_copy is een ansible-module die een bestand kopieert van de lokale server naar een externe Windows-host. Ik zal deze module gebruiken om een ​​enkele PDF te kopiëren.

Gebruik de onderstaande YAML-code, geef de bron- en bestemmingspaden op.

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

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

Voer het ansible-playbook uit voor win_copy.

[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

Het bestand is met succes gekopieerd op de bestemmingslocatie op een extern Windows-systeem.

MSI installeren/verwijderen

Om een ​​applicatie te installeren met behulp van het MSI-bestand, moet u win_get_url gebruiken om het pad van het te downloaden MSI-bestand te vermelden en vervolgens de win_package-module gebruiken om het te installeren. De huidige staat betekent dat de MSI op de machine wordt geïnstalleerd en dat de toepassing zich in de huidige staat bevindt.

Hier installeer ik Apache.

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

Voer het ansible-playbook uit om te installeren met MSI.

[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

Ga nu naar het Windows-systeem en controleer of de apache-toepassing met succes is geïnstalleerd.

C:Usersepcdream.nl>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

U kunt ook toepassingen installeren met MSI met argumenten. Hieronder ziet u hetzelfde voorbeeld als hierboven, maar in plaats van een status gebruiken we een installatie-argument om apache te installeren.

  Een programma geforceerd afsluiten op Windows 11

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

Om een ​​applicatie te verwijderen met behulp van het MSI-bestand, moet u de win_package-module gebruiken. De status afwezig betekent dat de toepassing wordt verwijderd met behulp van het MSI-bestand.

Hier verwijder ik 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

Voer het ansible-playbook uit om de installatie ongedaan te maken met MSI.

[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

Als ik nu de apache-versie controleer, krijg ik de onderstaande uitvoer wanneer de toepassing is verwijderd.

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 verwijderen (.EXE)

U kunt ook software verwijderen met het .exe-bestand met behulp van de product-id van die software.

[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

Voer het ansible-playbook uit om 7-Zip te verwijderen.

[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

Stop/Start/Herstart Windows Services

win_service ansible module wordt gebruikt om een ​​service te starten, stoppen of herstarten. Hier laat ik je zien hoe je de Tomcat-service kunt stoppen.

U moet de servicenaam in het YAML-bestand vermelden en de status op stoppen zetten.

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

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Voer het ansible-playbook uit om de Tomcat-service te 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

Als u de Tomcat-service op het Windows-systeem controleert, heeft deze nu de status gestopt.

U kunt de status definiëren als gestart of opnieuw gestart of gepauzeerd om de status van de service te wijzigen.

Feiten verzamelen

Met behulp van de win_disk_facts ansible-module kunt u alle schijfinformatie van de doelhost ophalen.

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

Voer het ansible-playbook uit om de schijfinformatie op te halen.

[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

Met behulp van de win_command ansible-module kunt u opdrachten uitvoeren op de externe host en CPU-informatie, apparaatdetails en nog veel meer krijgen.

[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 }}"

Voer het ansible-playbook uit om systeeminformatie op afstand te krijgen.

[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

Opdrachten uitvoeren

Welke opdrachten u ook uitvoert in een venster, ze kunnen worden uitgevoerd via de ansible win_command-module. U hoeft alleen de opdracht in uw YAML-bestand op te geven. Hier ben ik gewoon een map aan het maken.

[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

Voer het ansible-playbook uit om de win_command-bewerking uit te voeren.

[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

Omgevingsvariabelen

Een Windows-systeem heeft meerdere omgevingsvariabelen, bijvoorbeeld JAVA_HOME. Met behulp van de win_environment ansible-module kunt u omgevingsvariabelen toevoegen of wijzigen op een Windows-systeem. In dit voorbeeld voeg ik een nieuwe variabele toe aan de lijst met omgevingsvariabelen van Windows.

[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

Voer het ansible-playbook uit om de omgevingsvariabele toe te voegen op een externe Windows-computer.

[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

Ga naar het venster met omgevingsvariabelen; je zult zien dat de nieuwe variabele die je zojuist hebt toegevoegd hier aanwezig is.

  Vastgemaakte items op de taakbalk-jumplijsten herschikken in Windows 10

Register toevoegen/bewerken

win_regedit ansible-module wordt gebruikt om registerdetails op een externe Windows-machine toe te voegen of te bewerken. U moet het pad van het register en de inhoud die moet worden toegevoegd/bijgewerkt, opgeven. Hier maak ik een nieuwe registervermelding epcdream.nl binnen HKLM:SOFTWARE-pad en voeg vervolgens naam en gegevens toe aan dit register.

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

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREepcdream.nl

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREepcdream.nl

      name: Geek

      data: Flare

Voer het ansible-playbook uit om het register toe te voegen.

[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

Als u naar de Register-editor op het externe systeem gaat, kunt u zien dat dit register met succes is toegevoegd met de parameters Naam en Gegevens.

  Zoomfoutcode 2008 repareren in Windows 10

Logboek verwijderen

win_eventlog ansible-module wordt gebruikt om Windows-gebeurtenislogboeken toe te voegen, te wissen of te verwijderen van het Windows-systeem.

Ga naar Windows Powershell en vermeld de EventLogs die aanwezig zijn op de externe Windows-machine.

PS C:Usersepcdream.nl> 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

Nu zal ik laten zien hoe logboeken van alle bronnen voor Internet Explorer kunnen worden verwijderd.

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

Voer het ansible-playbook uit om Internet Explorer van de externe Windows-machine te verwijderen.

[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

Als u nu de EventLogs opnieuw vermeldt, ziet u dat de logboeken van Internet Explorer zijn verwijderd.

PS C:Usersepcdream.nl> 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

Dat ging dus allemaal over Ansible-playbooks, die kunnen worden gebruikt voor extern Windows-beheer. Ga je gang en probeer deze playbooks uit. Je kunt ook andere proberen Ansible Windows-modules verkrijgbaar.

gerelateerde berichten