9 Ansible Playbooks Exemplu pentru administrarea Windows

Vă voi arăta câteva operațiuni pe care un administrator le poate efectua pe un sistem Windows la distanță folosind ansible-playbook.

Ansible este unul dintre cele mai utilizate instrumente DevOps de pe piață astăzi. Oferă o mulțime de module Windows care sunt utilizate pentru a configura și gestiona serverul Windows. Presupun că aveți deja instalat Ansible pe Windows de unde doriți să gestionați serverele Windows.

Următoarele sunt câteva dintre sarcinile frecvent utilizate efectuate de administratorii Windows în fiecare zi. Vei fi uimit să vezi cât de ușor este administrat Windows folosind Ansible.

Adresa IP a controlerului meu Ansible Windows este 192.168.0.106, iar adresa IP a sistemului meu Windows la distanță este 192.168.0.102. Înainte de a începe, asigurați-vă că rulați un modul win_ping pentru a verifica dacă vă puteți conecta la serverul de la distanță Windows sau nu.

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

Conexiunea mea la o gazdă la distanță a reușit.

Deci, să începem cu Ansible Playbooks…

Copiere fișiere

win_copy este un modul ansible care copiază un fișier de pe serverul local pe o gazdă Windows la distanță. Voi folosi acest modul pentru a copia un singur PDF.

Utilizați codul YAML de mai jos, oferiți căile sursă și destinație.

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

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

Rulați ansible-playbook pentru 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

Fișierul a fost copiat cu succes în locația de destinație pe un sistem Windows la distanță.

Instalați/dezinstalați MSI

Pentru a instala o aplicație folosind fișierul MSI, trebuie să utilizați win_get_url pentru a menționa calea fișierului MSI de descărcat și apoi să utilizați modulul win_package pentru a o instala. Starea prezentă înseamnă că MSI va fi instalat pe mașină, iar aplicația este în starea actuală.

Aici, instalez Apache.

Cod YAML care trebuie utilizat:

[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

Rulați ansible-playbook pentru a instala folosind 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

Acum, accesați sistemul Windows și verificați dacă aplicația Apache a fost instalată cu succes.

C:Userstipstrick.ro>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

De asemenea, puteți instala aplicații folosind MSI cu argumente. Mai jos este același exemplu ca mai sus, dar în loc de o stare, folosim un argument de instalare pentru a instala apache.

  Cum să dezinstalați actualizarea din mai 2020 pentru Windows 10

Cod YAML care trebuie utilizat:

---

- 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

Pentru a dezinstala o aplicație folosind fișierul MSI, trebuie să utilizați modulul win_package. Starea absentă înseamnă că aplicația va fi dezinstalată folosind fișierul MSI.

Aici, dezinstalez 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

Rulați ansible-playbook pentru a dezinstala folosind 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

Acum, dacă verific versiunea apache, voi obține rezultatul de mai jos pe măsură ce aplicația a fost dezinstalată.

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.

Dezinstalați software-ul (.EXE)

De asemenea, puteți dezinstala software-ul cu fișierul .exe utilizând ID-ul produsului respectiv.

[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

Rulați ansible-playbook pentru a dezinstala 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

Opriți/Porniți/Reporniți Serviciile Windows

Modulul win_service ansible este utilizat pentru a porni, opri sau reporni un serviciu. Aici, vă voi arăta cum să opriți serviciul tomcat.

Trebuie să menționați numele serviciului în fișierul YAML și să setați starea să se oprească.

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

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Rulați ansible-playbook pentru a opri serviciul tomcat.

[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

Dacă verificați serviciul tomcat pe sistemul Windows, acesta este acum în stare oprit.

Puteți defini starea de pornit sau repornit sau întrerupt pentru a schimba starea serviciului.

Adunarea faptelor

Folosind modulul win_disk_facts ansible, puteți prelua toate informațiile de pe disc ale gazdei țintă.

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

Rulați ansible-playbook pentru a obține informațiile despre disc.

[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

Folosind modulul win_command ansible, puteți executa comenzi pe gazda la distanță și puteți obține informații despre CPU, detalii despre dispozitiv și multe altele.

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

Rulați ansible-playbook pentru a obține informații despre sistem de la distanță.

[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

Rularea comenzilor

Indiferent de comenzile pe care le executați într-o fereastră, acestea pot fi executate prin modulul ansible win_command. Trebuie doar să specificați comanda în fișierul YAML. Aici, doar creez un director.

[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

Rulați ansible-playbook pentru a efectua operația win_command.

[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

variabile de mediu

Un sistem Windows are mai multe variabile de mediu, de exemplu, JAVA_HOME. Folosind modulul win_environment ansible, puteți adăuga sau modifica variabile de mediu pe un sistem Windows. În acest exemplu, adaug o nouă variabilă la lista de variabile de mediu 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

Rulați ansible-playbook pentru a adăuga variabila de mediu pe o mașină Windows la distanță.

[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

Accesați fereastra variabilelor de mediu; veți vedea că noua variabilă pe care tocmai ați adăugat-o este prezentă aici.

  Cum se remediază eroarea WDF_VIOLATION în Windows 10

Adăugați/Editați registrul

Modulul win_regedit ansible este utilizat pentru a adăuga sau edita detalii de registru pe o mașină Windows la distanță. Trebuie să indicați calea registrului și conținutul care urmează să fie adăugat/actualizat. Aici creez o nouă intrare în registry tipstrick.ro în calea HKLM:SOFTWARE și apoi adaug numele și datele la acest registru.

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

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREtipstrick.ro

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREtipstrick.ro

      name: Geek

      data: Flare

Rulați ansible-playbook pentru a adăuga registry.

[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

Dacă accesați Editorul de registru pe sistemul de la distanță, puteți vedea că acest registry a fost adăugat cu succes cu parametrii Nume și Date.

Ștergeți jurnalul

Modulul win_eventlog ansible este utilizat pentru a adăuga, șterge sau elimina jurnalele de evenimente Windows din sistemul Windows.

Accesați Windows Powershell și enumerați EventLog-urile prezente pe mașina Windows de la distanță.

PS C:Userstipstrick.ro> 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

Acum, voi arăta cum să eliminați jurnalele din toate sursele pentru Internet Explorer.

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

Rulați ansible-playbook pentru a elimina Internet Explorer din mașina Windows la distanță.

[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

Acum, dacă listați din nou EventLogs, veți vedea că jurnalele Internet Explorer au fost eliminate.

PS C:Userstipstrick.ro> 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

Deci, asta a fost totul despre manualele Ansible, care pot fi folosite pentru administrarea Windows de la distanță. Continuați și încercați aceste manuale. Puteți încerca și altele Module Ansible Windows disponibil.

  Ghid pas cu pas pentru Windows și Linux