В этой статье мы настроим playbook Ansible таким образом, чтобы c его помощью мы могли удаленно автоматизировать Windows Server 2019 платформа x64, с Linux Ubuntu.

Для этого нужно подготовить Ubuntu и Ansible, а также Windows Server 2019 платформа x64.

Предварительная настройка

  • Установим pip;

  • Установим pywinrm;

  • Установим ansible;

Package Installer for Python (pip) — система управления пакетами в Unix\Linux системами. Установим данный пакет следующей командой:

sudo apt-get install python-pip python-dev build-essential  

Модуль pywinrm нужен для того, чтобы взаимодействовать с WinRM. Используем команду:

sudo pip install pywinrm

Ansible установим командой:

sudo pip install ansible

Настройка playbook

Для начала нам нужно настроить конфигурационный файл ansible.cfg

mkdir ~/ansible
cd ~/ansible

Создаем папку для хранения логов:

mkdir ~/ansible/modules
mkdir ~/ansible/logs

Редактируем файл следующим образом:

hostfile = ~/ansible/inventory
sudo_user = root
log_path = ~/ansible/logs/ansible.log

В host указываем ip адреса подключаемых удаленных компьютеров на базе Windows.
Для экспериментов ранее мы создали пару серверов, которые и будем настраивать:

ip_первой_машины

ip_второй_машины

Пакет для использования модуля winrm

Устанавливаем пакет для использования модуля winrm следующими командами:  

zorchik@srv-bionic:~$ sudo pi install 
http://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm
ekzorchik@srv-bionic:~$ sudo find / -name "winrm"
/usr/local/lib/python3.6/dist-packages/winrm
/usr/local/lib/python2.7/dist-packages/winrm

Чтобы подключить Windows делаем команду:

PS C:\Windows\system32> set-executionpolicy remotesigned
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y

После этого нужно запустить скрипт для создания правила в Firewall: Allow 5986/TCP.

Скачиваем и распаковываем скрипт PowerShell ConfigureRemotingForAnsible.

PS C:\Windows\system32> cd c:\1
PS C:\1> .\ConfigureRemotingForAnsible.ps1
После чего подключаем Ubuntu к Windows 
ekzorchik@srv-bionic:~$ sudo mkdir -p /etc/ansible/windows/group_vars

ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/hosts

[windows]

10.90.90.2

ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/group_vars/windows.yml

file: group_vars/windows.yml

ansible_user: ekzorchik@POLYGON.LOCAL

ansible_password: 712mbddr@

ansible_winrm_transport: basic

#Если получила эта системе kerberos билет

#ansible_winrm_transport: kerberos

ansible_connection: winrm

ansible_winrm_server_cert_validation: ignore

validate_certs: false

ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m win_ping

10.90.90.2 | SUCCESS => {

"changed": false,

"ping": "pong"

}

Автоматизированное управление Windows через Ansible

В качестве управляющего сервером Ansible используем сервер Ubuntu 16.04. Управляющий сервер – это место, с которого с помощью Ansible мы будем запускать наши модули, сценарии, задачи и т.п. В нашем стенде это сервер с Ansible Tower. Для использования Ansible и работы с этой системой из командной строки нам просто потребуется установить несколько небольших утилит. Поскольку в нашем случае используется сервер с Tower, то нам не требуется устанавливать Ansible, так как он входит в состав установки Tower. Однако пройдем по всем простым шагам, нужным для установки Ansible

Для этого настроим PIP в Ubuntu. Выполним следующие команды:

sudo pip install ansible 

После этого мы готовы взаимодействовать с сервером Windows.

Настройка WinRM для Ansible

Для конфигурации используем конфигурационный скрипт, который лежит на Githab по ссылке: https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1   

Для проверки соединения из Ansible, вы можете использовать команду win_ping, которая использует соединение с WinRM для подключения к серверу. Она проверяет, все ли в соединении с WinRM работает так, как ожидается.

Создайте файл inventory.yml, в котором перечислены хосты, которые вы хотите проверить. Файл inventory.yml имеет только один хост для проверки. 

Для проверки соединения с хостами, указанными в инвентаризационном файле, используйте приведенную ниже команду, которая выполняет проверку WinRM соединения.

Ansible test -i inventory.yml -m win_ping

Если вы все верно настроили, то увидите сообщение SUCCESS. Теперь мы можем использовать автоматизацию Ansible для управления Windows Server.

Запуск команд из Ansible на Windows Server

Для начала работы мы можем использовать несколько основных команд. Мы можем взаимодействовать с нашим сервером, как если мы работали бы с ним с консоли. Ниже приводится команда для получения IP конфигурации на нашем Windows Server.

Ansible test -i inventory.yml -m raw -a "ipconfig"

Мы также можем остановить, запустить и перезапустить любые службы:

ansible test -m win_service -a "name=Spooler state=stopped"
Как научиться писать playbook

Если вы хотите повысить экспертизу и начать писать собственные плейбуки, приходите курс «Ansible: Infrastructure as Code», который пройдет с 23 января по 19 февраля.

Когда у вас один сервер, им можно управлять вручную: набирать команды, что-то править, настраивать. Если их десять — это всё ещё реально. Но, представим, что у вас сотни серверов, которые разбросаны по разным городам. Тут уже ручным управлением не обойтись. Ansible – один из самых популярных инструментов управления конфигурациями.

Курс полезен для администраторов, инженеров и желающих подняться вверх по карьерной лестнице в качестве девопса. Учиться будет интересно не только тем, кто недавно начал свое знакомство с инструментом, но и тем, кто хочет освежить имеющиеся знания и закрепить их на практике и выстроить структуру.

На курсе вы:

✅ Узнаете как работать с переменными, как писать плейбуки и роли;

✅ Развернете LEMP стек, PostgreSQL и Mongo кластеры,

✅ Задеплоите Flask приложение;

✅ Напишите свой модуль для Ansible;

✅ Настроите IaC в Gitlab;

✅ Разберетесь с работой с облаками и enterprise решениями.

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

Купите курс до 28 декабря и участвуйте в розыгрыше сертификата на 500 000Р на курсы Слёрма. 

Посмотреть программу курса и записаться.

Комментарии (4)


  1. Tomatos
    13.12.2022 08:49

    Чаще всего при автоматизации enterprise-инфраструктуры приходится использовать:

    1. Авторизацию в AD

    2. Модули ansible написанные на powershell

    Очень редко получается обойтись тем набором модулей, которые можно запустить на linux.

    Один из самых удобных механизмов автоматизации windows через ansible - использование win_dsc


  1. aytugan
    13.12.2022 17:17
    +1

    Пожалуйста, обновите курс.
    Убунта 16.04 уже сильно устарела, и для Windows Server 2019 winrm не нужен - ансибл прекрасно работает через штатный ssh сервер.


    1. DonAlPAtino
      14.12.2022 21:45

      Предполагается PowerShell через ssh дергать или как-то по другому? Есть хорошие и краткие статьи на эту тему? Очень почитать хочется...


      1. aytugan
        15.12.2022 12:43
        +1

        Через повершелл

        Включаешь повершелл шеллом для ssh:

        Set-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name "DefaultShell" -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
        

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

              vars:
                ansible_shell_type: powershell
        

        Похоже действительно статью надо писать