Приклад 9 Ansible Playbooks для адміністрування Windows

Я покажу вам кілька операцій, які адміністратор може виконувати у віддаленій системі Windows за допомогою ansible-playbook.

Ansible є одним із найбільш використовуваних інструментів DevOps на сьогоднішньому ринку. Він надає набір модулів Windows, які використовуються для налаштування та керування сервером Windows. Я припускаю, що у вас уже встановлено Ansible у Windows, звідки ви хочете керувати серверами Windows.

Нижче наведено деякі з поширених завдань, які щодня виконують адміністратори Windows. Ви будете вражені, побачивши, наскільки легко керувати Windows за допомогою Ansible.

IP-адреса моєї машини з контролером Ansible Windows – 192.168.0.106, а IP-адреса моєї віддаленої системи Windows – 192.168.0.102. Перш ніж почати, переконайтеся, що ви запустили модуль win_ping, щоб перевірити, чи можете ви підключитися до віддаленого сервера Windows.

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

Моє підключення до віддаленого хосту успішне.

Отже, почнемо з Ansible Playbooks…

Копіювання файлів

win_copy — це анзибльний модуль, який копіює файл із локального сервера на віддалений хост Windows. Я буду використовувати цей модуль для копіювання одного PDF-файлу.

Використовуйте наведений нижче код YAML, укажіть шляхи джерела та призначення.

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

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

Запустіть ansible-playbook для 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

Файл успішно скопійовано в цільове розташування у віддаленій системі Windows.

Встановити/Видалити MSI

Щоб установити програму за допомогою файлу MSI, вам потрібно використовувати win_get_url, щоб вказати шлях до файлу MSI для завантаження, а потім використовувати модуль win_package для його встановлення. Наявний стан означає, що MSI буде встановлено на машині, а програма перебуває в поточному стані.

Ось я встановлюю Apache.

Код YAML для використання:

[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

Запустіть ansible-playbook для встановлення за допомогою 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

Тепер перейдіть до системи Windows і перевірте, чи успішно встановлено програму apache.

C:Userstechukraine.net>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

Ви також можете інсталювати програми за допомогою MSI з аргументами. Нижче наведено той самий приклад, що й вище, але замість стану ми використовуємо аргумент встановлення для встановлення apache.

  Як пакетно перейменувати файли в Windows 10

Код YAML для використання:

---

- 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

Щоб видалити програму за допомогою файлу MSI, потрібно використовувати модуль win_package. Стан відсутній означає, що програму буде видалено за допомогою файлу MSI.

Ось, я видаляю 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

Запустіть ansible-playbook, щоб видалити за допомогою 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

Тепер, якщо я перевірю версію apache, я отримаю наведений нижче результат, оскільки програму було видалено.

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.

Видалення програмного забезпечення (.EXE)

Ви також можете видалити програмне забезпечення за допомогою файлу .exe, використовуючи ідентифікатор продукту цього програмного забезпечення.

[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

Запустіть ansible-playbook, щоб видалити 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

Зупинити/запустити/перезапустити служби Windows

Анзибний модуль win_service використовується для запуску, зупинки або перезапуску служби. Тут я покажу вам, як зупинити службу tomcat.

Вам потрібно вказати ім’я служби у файлі YAML і встановити стан на зупинку.

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

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Запустіть ansible-playbook, щоб зупинити службу 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

Якщо ви перевірите службу tomcat у системі Windows, вона зараз у стані зупинки.

Ви можете визначити стан: запущено, перезапущено або призупинено, щоб змінити статус служби.

Збір фактів

Використовуючи модуль win_disk_facts ansible, ви можете отримати всю інформацію про диск цільового хоста.

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

Запустіть ansible-playbook, щоб отримати інформацію про диск.

[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

Використовуючи модуль win_command ansible, ви можете виконувати команди на віддаленому хості та отримувати інформацію про ЦП, деталі пристрою та багато іншого.

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

Запустіть ansible-playbook, щоб отримати інформацію про віддалену систему.

[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

Виконання команд

Які б команди ви не запускали у вікні, їх можна запускати через модуль ansible win_command. Вам просто потрібно вказати команду у вашому файлі YAML. Тут я просто створюю каталог.

[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

Запустіть ansible-playbook, щоб виконати операцію 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

Змінні середовища

Система Windows має кілька змінних середовища, наприклад JAVA_HOME. За допомогою анзибльного модуля win_environment ви можете додавати або змінювати змінні середовища в системі Windows. У цьому прикладі я додаю нову змінну до списку змінних середовища 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

Запустіть ansible-playbook, щоб додати змінну середовища на віддалену машину Windows.

[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

Перейдіть до вікна змінних середовища; ви побачите, що тут присутня нова змінна, яку ви щойно додали.

  Як отримати доступ до голосових нотаток iOS у Windows 10

Додати/редагувати реєстр

Анзибний модуль win_regedit використовується для додавання або редагування деталей реєстру на віддаленій машині Windows. Потрібно вказати шлях до реєстру та вміст, який потрібно додати/оновити. Тут я створюю новий запис реєстру techukraine.net усередині шляху HKLM:SOFTWARE, а потім додаю назву та дані до цього реєстру.

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

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREtechukraine.net

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREtechukraine.net

      name: Geek

      data: Flare

Запустіть ansible-playbook, щоб додати реєстр.

[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

Якщо ви перейдете до редактора реєстру на віддаленій системі, ви побачите, що цей реєстр успішно додано з параметрами імені та даних.

  Виправити Photoshop Dynamiclink, недоступний у Windows 10

Видалити журнал

Анзибний модуль win_eventlog використовується для додавання, очищення або видалення журналів подій Windows із системи Windows.

Перейдіть до Windows Powershell і перелічіть журнали подій, наявні на віддаленій машині Windows.

PS C:Userstechukraine.net> 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

Зараз я покажу, як видалити журнали з усіх джерел для Internet Explorer.

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

Запустіть ansible-playbook, щоб видалити Internet Explorer із віддаленої машини Windows.

[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

Тепер, якщо ви знову перерахуєте журнали подій, ви побачите, що журнали Internet Explorer видалено.

PS C:Userstechukraine.net> 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

Отже, це все про підручники Ansible, які можна використовувати для віддаленого адміністрування Windows. Спробуйте ці підручники. Ви також можете спробувати інші Ansible модулі Windows доступний.