9 Ansible Playbooks Eksempel til Windows-administration

Jeg vil vise dig flere handlinger, som en administrator kan udføre på et fjerntliggende Windows-system ved hjælp af ansible-playbook.

Ansible er et af de mest brugte DevOps-værktøjer på markedet i dag. Det giver en masse Windows-moduler, der bruges til at konfigurere og administrere Windows-serveren. Jeg antager, at du allerede har Ansible installeret på Windows, hvorfra du vil administrere Windows-serverne.

Følgende er nogle af de almindeligt anvendte opgaver, der udføres af Windows-administratorer på daglig basis. Du vil blive overrasket over at se, hvor nemt det er at administrere Windows ved hjælp af Ansible.

Min Ansible Windows-controller-maskines IP-adresse er 192.168.0.106, og mit eksterne Windows-systems IP-adresse er 192.168.0.102. Før du går i gang, skal du sørge for at køre et win_ping-modul for at kontrollere, om du er i stand til at oprette forbindelse til Windows-fjernserveren eller ej.

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

Min forbindelse til en fjernvært er vellykket.

Så lad os komme i gang med Ansible Playbooks…

Kopiering af filer

win_copy er et ansible modul, der kopierer en fil fra den lokale server til en ekstern Windows-vært. Jeg vil bruge dette modul til at kopiere en enkelt PDF.

Brug nedenstående YAML-kode, giv kilde- og destinationsstierne.

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

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

Kør ansible-playbook for 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

Filen er blevet kopieret til destinationsplaceringen på et fjerntliggende Windows-system.

Installer/afinstaller MSI

For at installere en applikation ved hjælp af MSI-filen, skal du bruge win_get_url til at nævne stien til MSI-filen, der skal downloades, og derefter bruge win_package-modulet til at installere den. Den nuværende tilstand betyder, at MSI’en vil blive installeret på maskinen, og applikationen er i den nuværende tilstand.

Her installerer jeg Apache.

YAML-kode, der skal bruges:

[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

Kør ansible-playbook for at installere ved hjælp af 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

Gå nu til Windows-systemet og kontroller, om apache-applikationen blev installeret med succes.

C:Userstoadmin.dk>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

Du kan også installere programmer ved hjælp af MSI med argumenter. Nedenfor er det samme eksempel som ovenfor, men i stedet for en tilstand, bruger vi et installeringsargument til at installere apache.

  Sådan Dual Boot Linux og Windows 10

YAML-kode, der skal bruges:

---

- 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

For at afinstallere et program ved hjælp af MSI-filen, skal du bruge win_package-modulet. Tilstanden fraværende betyder, at applikationen vil blive afinstalleret ved hjælp af MSI-filen.

Her er jeg ved at afinstallere 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

Kør ansible-playbook for at afinstallere ved hjælp af 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

Nu, hvis jeg tjekker apache-versionen, vil jeg få nedenstående output, da applikationen blev afinstalleret.

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.

Afinstaller software (.EXE)

Du kan også afinstallere software med .exe-fil ved hjælp af produkt-id’et for den pågældende 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

Kør ansible-playbook for at afinstallere 7-Zip.

[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/Genstart Windows Services

win_service ansible modul bruges til at starte, stoppe eller genstarte en tjeneste. Her vil jeg vise dig, hvordan du stopper tomcat-tjenesten.

Du skal nævne tjenestenavnet i YAML-filen og indstille tilstanden til at stoppe.

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

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Kør ansible-playbook for at stoppe Tomcat-tjenesten.

[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

Hvis du tjekker Tomcat-tjenesten på Windows-systemet, er den nu i standset status.

Du kan definere tilstand til startet eller genstartet eller sat på pause for at ændre status for tjenesten.

  5 bedste TFTP-servere til Windows

Indsamling af fakta

Ved at bruge win_disk_facts ansible modul kan du hente al diskinformationen fra målværten.

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

Kør ansible-playbook for at få diskoplysningerne.

[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

Ved at bruge win_command ansible-modulet kan du udføre kommandoer på fjernværten og få CPU-oplysninger, enhedsdetaljer og meget mere.

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

Kør ansible-playbook for at få fjernsystemoplysninger.

[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

Kørende kommandoer

Uanset hvilke kommandoer du kører på et vindue, kan de køres gennem det mulige win_command-modul. Du skal blot angive kommandoen i din YAML-fil. Her opretter jeg bare en mappe.

[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

Kør ansible-playbook for at udføre win_command operation.

[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

miljøvariabler

Et Windows-system har flere miljøvariabler, for eksempel JAVA_HOME. Ved at bruge win_environment ansible-modulet kan du tilføje eller ændre miljøvariabler på et Windows-system. I dette eksempel tilføjer jeg en ny variabel til listen over Windows-miljøvariabler.

[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

Kør ansible-playbook for at tilføje miljøvariablen på en ekstern Windows-maskine.

[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

Gå til vinduet med miljøvariabler; du vil se den nye variabel, du lige har tilføjet, er til stede her.

  Reparer Origin Overlay, der ikke virker i Windows 10

Tilføj/Rediger registreringsdatabasen

win_regedit ansible modul bruges til at tilføje eller redigere registreringsdatabasen detaljer på en ekstern Windows-maskine. Du skal angive stien til registreringsdatabasen og indholdet, der skal tilføjes/opdateres. Her opretter jeg en ny registreringspost toadmin.dk inde i HKLM:SOFTWARE-stien og tilføjer derefter navn og data til denne registreringsdatabase.

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

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREtoadmin.dk

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREtoadmin.dk

      name: Geek

      data: Flare

Kør ansible-playbook for at tilføje registreringsdatabasen.

[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

Hvis du går til registreringseditoren på fjernsystemet, kan du se, at dette register er blevet tilføjet med succes med navne- og dataparametre.

Slet log

win_eventlog ansible modul bruges til at tilføje, rydde eller fjerne Windows hændelseslogfiler fra Windows-systemet.

Gå til Windows Powershell, og skriv de EventLogs, der findes på den eksterne Windows-maskine.

PS C:Userstoadmin.dk> 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 vil jeg vise, hvordan du fjerner logfiler fra alle kilder til Internet Explorer.

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

Kør ansible-playbook for at fjerne Internet Explorer fra den eksterne Windows-maskine.

[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

Nu, hvis du viser EventLogs igen, vil du se, at Internet Explorer-logfiler er blevet fjernet.

PS C:Userstoadmin.dk> 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

Så det handlede om Ansible playbooks, som kan bruges til fjernadministration af Windows. Gå videre og prøv disse spillebøger. Du kan også prøve andre Ansible Windows-moduler ledig.