9 Ансибле Плаибоокс Пример за Виндовс администрацију

Prikazaću vam nekoliko operacija koje administrator može da obavi na udaljenom Windows sistemu koristeći Ansible playbook.

Ansible je jedan od najpopularnijih DevOps alata na tržištu danas. Pruža brojne Windows module koji se koriste za konfiguraciju i upravljanje Windows serverima. Pretpostavljam da već imate instaliran Ansible na Windows-u sa kojeg želite da upravljate Windows serverima.

Sledi nekoliko uobičajenih zadataka koje Windows administratori obavljaju svakodnevno. Bićete zadivljeni kada vidite koliko je lako upravljati Windows-om pomoću Ansible-a.

IP adresa mog Ansible Windows kontrolera je 192.168.0.106, a IP adresa mog udaljenog Windows sistema je 192.168.0.102. Pre nego što počnete, proverite da li ste pokrenuli `win_ping` modul kako biste potvrdili da li ste u mogućnosti da se povežete sa udaljenim serverom operativnog sistema Windows.

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

Moja konekcija sa udaljenim hostom je uspešna.

Dakle, počnimo sa Ansible Playbook-ovima…

Kopiranje datoteka

`win_copy` je Ansible modul koji kopira datoteku sa lokalnog servera na udaljeni Windows host. Koristiću ovaj modul za kopiranje jednog PDF dokumenta.

Koristite YAML kod ispod, navedite izvornu i odredišnu putanju.

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

- hosts: win
  tasks:
    - name: Copy File
      win_copy:
        src: C:output.pdf
        dest: C:ansible_examples
        remote_src: yes

Pokrenite Ansible playbook za `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

Datoteka je uspešno kopirana na odredišnu lokaciju na udaljenom Windows sistemu.

Instaliranje/deinstaliranje MSI paketa

Da biste instalirali aplikaciju koristeći MSI datoteku, potrebno je da koristite `win_get_url` da navedete putanju MSI datoteke za preuzimanje, a zatim koristite modul `win_package` da biste je instalirali. Stanje `present` znači da će MSI biti instaliran na mašini, i da je aplikacija u sadašnjem stanju.

Ovde, instaliram Apache.

YAML kod koji će se koristiti:

[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

Pokrenite Ansible playbook da biste instalirali koristeći 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

Sada idite na Windows sistem i proverite da li je Apache aplikacija uspešno instalirana.

C:Userstechblog.co.rs>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

Takođe možete instalirati aplikacije koristeći MSI sa argumentima. Ispod je isti primer kao gore, ali umesto stanja, koristimo argument za instaliranje da instaliramo Apache.

YAML kod koji će se koristiti:

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

Da biste deinstalirali aplikaciju pomoću MSI datoteke, potrebno je da koristite modul `win_package`. Stanje `absent` znači da će aplikacija biti deinstalirana pomoću MSI datoteke.

Evo, deinstaliram 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

Pokrenite Ansible playbook da biste deinstalirali koristeći 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

Sada, ako proverim Apache verziju, dobiću donji izlaz pošto je aplikacija deinstalirana.

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.

Deinstaliranje softvera (.exe)

Takođe možete da deinstalirate softver sa .exe datotekom koristeći ID proizvoda tog softvera.

[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

Pokrenite Ansible playbook da deinstalirate 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

Zaustavljanje/pokretanje/ponovno pokretanje Windows servisa

`win_service` Ansible modul se koristi za pokretanje, zaustavljanje ili ponovno pokretanje servisa. Ovde ću vam pokazati kako da zaustavite Tomcat servis.

Morate da navedete ime servisa u YAML datoteci i podesite stanje da se zaustavi.

[email protected] ~
$ vi service.yml
---
- hosts: win 
  tasks: 
   - name: Stop service Tomcat
     win_service:
       name: Tomcat8
       state: stopped

Pokrenite Ansible playbook da zaustavite Tomcat servis.

[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

Ako proverite Tomcat servis na Windows sistemu, on je sada u zaustavljenom statusu.

Možete definisati stanje kao `started`, `restarted` ili `paused` da biste promenili status servisa.

Prikupljanje činjenica

Koristeći `win_disk_facts` Ansible modul, možete preuzeti sve informacije o disku ciljnog hosta.

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

Pokrenite Ansible playbook da biste dobili informacije o disku.

[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

Koristeći `win_command` Ansible modul, možete izvršiti komande na udaljenom hostu i dobiti informacije o procesoru, detalje o uređaju i još mnogo toga.

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

Pokrenite Ansible playbook da biste dobili informacije o udaljenom sistemu.

[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

Pokretanje komandi

Koje god komande da pokrenete na Windowsu, one se mogu pokrenuti kroz Ansible `win_command` modul. Samo treba da navedete komandu u vašoj YAML datoteci. Ovde, samo pravim direktorijum.

[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

Pokrenite Ansible playbook da biste izvršili operaciju `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

Promenljive okruženja

Windows sistem ima više promenljivih okruženja, na primer, `JAVA_HOME`. Koristeći Ansible modul `win_environment`, možete dodati ili modifikovati promenljive okruženja na Windows sistemu. U ovom primeru, dodajem novu promenljivu na listu promenljivih Windows okruženja.

[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

Pokrenite Ansible playbook da dodate promenljivu okruženja na udaljenoj Windows mašini.

[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

Idite na prozor promenljivih okruženja; videćete da je nova promenljiva koju ste upravo dodali prisutna ovde.

Dodavanje/Izmena registra

`win_regedit` Ansible modul se koristi za dodavanje ili uređivanje detalja registra na udaljenoj Windows mašini. Morate da navedete putanju registra i sadržaj koji se dodaje/ažurira. Ovde pravim novi unos u registru `techblog.co.rs` unutar putanje `HKLM:SOFTWARE`, a zatim dodajem ime i podatke u ovaj registar.

[email protected] ~
$ vi registry.yml
---
- hosts: win 
  tasks:
   - name: Creating a registry
     win_regedit:
      path: HKLM:SOFTWAREtechblog.co.rs
   - name: Modifying a registry, adding name and data
     win_regedit:
      path: HKLM:SOFTWAREtechblog.co.rs
      name: Geek
      data: Flare

Pokrenite Ansible playbook da biste dodali registar.

[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

Ako odete u uređivač registra na udaljenom sistemu, možete videti da je ovaj registar uspešno dodat sa parametrima imena i podataka.

Brisanje logova

`win_eventlog` Ansible modul se koristi za dodavanje, brisanje ili uklanjanje logova Windows događaja iz Windows sistema.

Idite na Windows PowerShell i navedite EventLogs prisutne na udaljenoj Windows mašini.

PS C:Userstechblog.co.rs> 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

Sada ću pokazati kako da uklonite logove iz svih izvora za Internet Explorer.

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

Pokrenite Ansible playbook da biste uklonili Internet Explorer logove sa udaljene Windows mašine.

[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

Sada, ako ponovo navedete EventLogs, videćete da su logovi Internet Explorer-a uklonjeni.

PS C:Userstechblog.co.rs> 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

Dakle, to je bilo sve o Ansible playbook-ovima, koji se mogu koristiti za udaljenu administraciju Windows-a. Samo napred i isprobajte ove knjige. Možete probati i druge Ansible Windows module koji su dostupni.