📜 9 Ansible плейбуков примеров для администрирования Windows

by itisgood
Я покажу вам несколько операций, которые администратор может выполнять в удаленной системе Windows с помощью ansible плейбуков.
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 или нет.
$ ansible win -m win_ping
192.168.0.102 | SUCCESS => {
    "changed": false,
    "ping": "pong"

Мое соединение с удаленным хостом прошло успешно.

Итак, начнем!

Копирование файлов

win_copy – это модуль, который копирует файл с локального сервера на удаленный хост Windows.

Я буду использовать этот модуль для копирования одного PDF.

Используйте приведенный ниже код YAML, укажите исходный и целевой путь.

$ vi copy.yml
---

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:\output.pdf

      dest: C:\ansible_examples\

      remote_src: yes
Запустите плейбук с win_copy.
$ 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 для его установки.

state present означает, что MSI будет установлен на машине, и приложение будет находится в текущем состоянии.

Здесь я устанавливаю Apache.

Код YAML:

$ 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_examples\httpd-2.2.25-win32-x86-no_ssl.msi

    - name: Install MSI
      win_package:
        path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
        state: present
Запустите ansible плейбук для установки MSI
$ 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.

cd C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v
Server version: Apache/2.2.25 (Win32)
Server built: Jul 10 2013 01:52:12
Вы также можете устанавливать приложения, используя MSI с аргументами.

Ниже приведен тот же пример, что и выше, но вместо state мы используем аргумент install для установки apache.

Код 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_examples\httpd-2.2.25-win32-x86-no_ssl.msi


    - name: Install MSI

      win_package:

        path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi

        arguments:

          - /install

          - /passive

          - /norestart

Чтобы удалить приложение с помощью файла MSI, вам нужно использовать модуль win_package.

Отсутствие state absent, что приложение будет удалено с использованием файла MSI.

Здесь я удаляю Apache.

$ vi uninstall_msi.yml

---

- name: UnInstalling Apache MSI

  hosts: win

  tasks:

    - name: UnInstall MSI

      win_package:

        path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi

        state: absent

Запустите ansible плейбук для удаления MSI

$ 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, я получу следующий вывод, так как приложение было удалено.

httpd -v 'httpd' is not recognized as an internal or external command,
operable program or batch file.

Удалить программное обеспечение (.EXE)

Вы также можете удалить программное обеспечение с помощью файла .exe, используя идентификатор продукта этого программного обеспечения (product id).

$ vi uninstall.yml
---

- hosts: win

  tasks:

   - name: Uninstall 7-Zip from the exe

     win_package:

       path: C:\Program Files\7-Zip\Uninstall.exe

       product_id: 7-Zip

       arguments: /S

       state: absent
Запустите ansible плейбук, чтобы удалить 7-Zip.
$ 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 и установить состояние (state) на stopped.
$ vi service.yml
---
- hosts: win

  tasks:

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Запустите ansible плейбук, чтобы остановить службу Tomcat.

$ 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,то увидите, что она теперь находится в остановленном состоянии.
Вы можете определить состояние started или restarted или paused, чтобы изменить статус службы.

Сбор фактов

С помощью модуля ansible win_disk_facts вы можете получить всю информацию о диске целевого хоста.

$ 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 плейбук, чтобы получить информацию о диске.
$ 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

Используя ANSI-модуль win_command, вы можете выполнять команды на удаленном хосте, получать информацию о процессоре, сведения об устройстве и многое другое.

$ 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 плейьук, чтобы получить информацию об удаленной системе.
$ 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 \r\r\nIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK \r\r\n\r\r\n"
}

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
skipped=0 rescued=0
ignored=0

Запуск команд

Какие бы команды вы ни выполняли в Windows, они могут выполняться через модуль ansible win_command.

Вам просто нужно указать команду в вашем файле YAML.

На примере я просто создаю каталог.

$ 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 плейбук для выполнения операции win_command.
$ 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.

Используя ANSI-модуль win_environment, вы можете добавлять или изменять переменные среды в системе Windows.

В этом примере я добавляю новую переменную в список переменных среды Windows.

$ 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 плейбук, чтобы добавить переменную окружения на удаленном компьютере с Windows.
$ 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
Перейти в окно переменных среды; вы увидите, что новая переменная, которую вы только что добавили, присутствует!

Изменить реестр

Ansible модуль win_regedit используется для добавления или редактирования данных реестра на удаленной машине с Windows.

Вам необходимо указать путь к реестру и контент для добавления / обновления.

Здесь я создаю новую запись реестра Itisgood по пути HKLM:\SOFTWARE, а затем добавляю имя и данные в этот реестр.

$ vi registry.yml
---

- hosts: win

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:\SOFTWARE\Itisgood

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:\SOFTWARE\Itisgood

      name: Geek

      data: Flare

Запустите ansible плейбук, чтобы добавить именения в реестр.

$ 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
Если вы зайдете в редактор реестра на удаленной системе, вы увидите, что этот каталог был успешно добавлен с параметрами Name и Data.

Удаление логов

Модуль win_eventlog используется для добавления, очистки или удаления логов системы Windows.

Перейдите в Windows Powershell и перечислите EventLogs, присутствующие на удаленном компьютере с Windows.

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.
$ vi log.yml
---
- hosts: win
  tasks:
   - name: Remove Internet Explorer Logs
     win_eventlog:
      name: Internet Explorer
      state: absent
Запустите ansible плейбук, чтобы удалить логи Internet Explorer с удаленного компьютера с Windows.
$ 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 были удалены.

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

You may also like

Leave a Comment