Даже если Ansible известен как инструмент управления узлами Linux с использованием SSH, знали ли вы, что Ansible на Windows также работает отлично? Используя Windows Remote Management (WinRM), Ansible на Windows может эффективно управлять всеми вашими узлами с Windows!
С Ansible на Windows вы можете выполнять задачи, такие как развертывание патчей, управление серверами Windows, выполнение сценариев PowerShell и многое другое.
В этом учебнике вы узнаете, как настроить свой первый узел Windows для управления с помощью Ansible и как выполнять команды и сценарии против него.
Предварительные требования
Если вы хотите следовать этому учебнику, убедитесь, что у вас есть следующее перед началом:
- Управляющий хост Ansible – В этом учебнике будет использоваться Ansible v2.9.18 на машине с Ubuntu 18.04.5 LTS с IP-адресом 10.111.4.53. Обратите внимание, что Windows не поддерживается в качестве управляющего узла, только в качестве управляемого узла.
- Python, установленный на вашем управляющем хосте Ansible – В этом учебнике будет использоваться Python v2, но v3 тоже должен работать.
- Пакет pip установленный на контроллере Ansible.
- A Windows 2012 R2 or greater computer for Ansible to manage – This tutorial will use two Windows Server 2012 R2 Standard machines as remote nodes with IP addresses of 52.242.251.213 and 10.111.4.106.
- A Windows workstation – This tutorial will perform some basic pre-configuration to the node that Windows will manage with Ansible and will require you to sitting at a Windows workstation.
- У сервера с Windows, который вы собираетесь управлять, должен быть включен PowerShell Remoting
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
Настройка прослушивателя WinRM на Windows
Перед тем как Ansible сможет взаимодействовать с удаленным узлом Windows, он должен установить с ним соединение. Это делается через протокол Microsoft WinRM. WinRM – это тот же протокол, который используется PowerShell Remoting для выполнения удаленных команд из PowerShell.
На момент написания этого текста, Ansible поддерживает SSH в качестве протокола управления, но это экспериментальная функция на данный момент.
Для того чтобы Ansible мог использовать WinRM для взаимодействия с узлом Windows, необходимо настроить WinRM. Для этого Ansible предоставляет скрипт PowerShell, который устанавливает различные параметры WinRM.
Хотя скрипт PowerShell, предоставленный Red Hat для настройки WinRM, был протестирован и безопасен, вам следует ознакомиться с ним и понять, на высоком уровне, что он делает.
Вашей первоочередной задачей будет скачать скрипт конфигурации и запустить Ansible на узле Windows. Для этого, предполагая, что у вас уже включено PowerShell Remoting на вашем целевом компьютере под управлением Windows, и вы находитесь на рабочей станции с Windows:
Загрузите сценарий PowerShell ConfigureRemotingForAnsible.ps1 на свой локальный компьютер под управлением Windows. В этом руководстве предполагается, что он сохранен в ~\Downloads.
Запустите сценарий конфигурации на узле Windows, который будет управляться Ansible, используя команду Invoke-Command
. Ниже приведена команда, которая выполнит команду на двух демонстрационных машинах учебника и запросит пароль для локальной учетной записи adminuser на узлах Windows.
По умолчанию сценарий конфигурации настроит WinRM для базовой аутентификации HTTP. Если вы хотите, чтобы Ansible использовал более безопасное соединение, изучите Как настроить WinRM через HTTPS для Ansible.
Настройка контроллера Ansible на Windows
Теперь, когда узел Windows готов к работе с Ansible, давайте настроим контроллер Ansible, чтобы показать ему, как с ним общаться.
1. Подключитесь к хосту контроллера Ansible по SSH с помощью вашего любимого SSH-клиента.
2. Установите модуль Python pywinrm. Модуль Python pywinrm необходим для того, чтобы Ansible на Windows мог связываться с хостами по протоколу WinRM.
3. Определите удаленные узлы Windows в файле инвентаря Ansible. Инвентарь Ansible – это коллекция удаленных хостов, определенных в файле по их имени хоста или IP-адресу. После определения вы можете использовать команды и плейбуки для работы с инвентарями Ansible, как вы скоро увидите.
Файл инвентаря Ansible по умолчанию находится в каталоге /etc/ansible/hosts.
Приведенный ниже образец файла инвентаря создает группу хостов windows
, в которой содержатся все узлы Windows. Здесь в учебнике используется группа хостов для удобства одновременного нацеливания на все узлы Windows (если их несколько).
4. Затем определите несколько необходимых переменных, которые Ansible будет использовать при подключении к хостам Windows в файле инвентаря в качестве группы windows:vars
.
5. Теперь используйте модуль Ansible win_ping для выполнения простого теста подключения к хостам внутри группы хостов windows
, определенной на шаге №3.
После выполнения вы увидите ниже, что Ansible возвращает зеленый текст с сообщением SUCCESS, указывающим на успешную попытку пинга.

Вывод подтверждает, что контроллер хоста Ansible может успешно общаться с удаленным хостом Windows по протоколу WinRM.
Запуск Ad-hoc-команд на хостах Windows
На этом этапе вы готовы использовать Ansible для управления вашими узлами Windows. Давайте теперь протестируем это, выполнив Ad-hoc-команду на узлах Windows для их изменения. Ad-hoc-команды отлично подходят, когда вам нужно выполнить простую команду на узлах без предварительного создания плейбука.
Демонстрируем Ad-hoc-команды, устанавливая функцию Windows на узлы Windows, определенные в файле инвентаря в группе хостов windows
. Для этого, предполагая, что вы все еще находитесь в своем контроллере Ansible через SSH:
1. Вместо модуля win_ping на этот раз вызовите модуль win_feature (-m
), передав ему два аргумента (-a
) с указанием имени функции Windows и требуемого состояния – name
и state
.
При выполнении вышеуказанной команды Ansible должен подключиться ко всем узлам в группе хостов windows
и выполнить команду win_feature на каждом из них, проверяя и, если отсутствует, устанавливая функцию Windows Telnet-Client
.

2. Ansible сообщает об успехе, но для уверенности подключитесь к узлам Windows вручную с помощью PowerShell и проверьте, установлена ли теперь функция Telnet Client Windows. На вашем локальном компьютере с Windows выполните команду Invoke-Command
, чтобы выполнить команду PowerShell Get-WindowsFeature
на каждом компьютере с Windows.
На этом этапе вы можете выполнять любые модули Windows как ad-hoc команды!
Создание и выполнение сценариев Ansible на Windows
После того как вы освоили искусство выполнения ад-хок команд на управляемых узлах Windows, ваш следующий шаг – создание и запуск плейбуков. Плейбук Ansible объединяет команды в одном месте и позволяет вам писать сложную логику для выполнения различных сценариев автоматизации.
Запуск команд Windows на удаленных узлах с использованием модуля win_command
Предполагая, что вы все еще подключены к вашему хосту контроллера Ansible:
1. Создайте папку в вашем домашнем каталоге с именем ansible-windows-demo и перейдите в нее. Эта папка будет содержать ваш плейбук.
2. Откройте ваш любимый текстовый редактор и создайте файл с именем ansible-windows.yml в ~/ansible-windows-demo.
Плейбуки Ansible пишутся на YAML
3. Теперь скопируйте нижеуказанный плейбук в файл ansible-windows.yml, чтобы создать одну задачу. Этот плейбук выполнит команду netstat в Windows с использованием модуля Ansible для Windows win_command на всех хостах в группе хостов windows
.
Модуль win_command выполняет команды на удаленном хосте Windows. Он не позволяет использовать команды, включающие переменные, такие как специальные символы, разрыв строки, знак больше и т. д.
4. Вызовите плейбук ansible-windows.yml, который выполняет задачу на удаленном хосте, запустив следующую команду.
Если все прошло успешно, вы должны увидеть вывод, подобный ниже.

Запуск команд PowerShell на удаленном хосте с использованием модуля win_shell
В предыдущем примере вы создали плейбук для выполнения удаленной команды cmd.exe (netstat
) на управляемых узлах Windows
. Теперь давайте поднимем ставки и выполним команды PowerShell с использованием модуля win_shell.
По умолчанию модуль win_shell запускает PowerShell на хосте Windows
На вашем локальном рабочем месте Windows:
1. Сначала откройте ваш любимый текстовый редактор на вашей локальной рабочей станции под управлением Windows и создайте образец сценария PowerShell, скопируйте следующий код и сохраните его как one.ps1. Этот учебник сохранит сценарий в файле ~\one.ps1.
Ниже приведенный код создает пустой текстовый файл с именем test2.txt в каталоге C:\temp.
2. Скопируйте сценарий PowerShell one.ps1 на управляемые узлы Windows с помощью вашего предпочтительного метода. Этот учебник предполагает, что вы скопировали сценарий one.ps1 в папку C:\Temp на каждом узле Windows.
3. Как только образец сценария PowerShell будет на узле(ах) Windows, подключитесь к контроллеру Ansible и снова откройте ваш любимый текстовый редактор. На этот раз создайте и сохраните еще один плейбук с именем ansible-windows-shell.yml в том же каталоге ~/ansible-windows-demo.
4. Скопируйте и вставьте следующий плейбук в файл ansible-windows-shell.yml. Этот плейбук выполнит две задачи, чтобы продемонстрировать модуль win_shell. Он вызывает сценарий PowerShell, только что скопированный со шага #2, и вставляет код PowerShell прямо в плейбук, чтобы продемонстрировать, что сценарий не требуется вовсе.
Для передачи нескольких строк PowerShell кода модулю win_shell используйте символ
|
(вертикальная черта).
5. Теперь вызовите второй плейбук ansible-windows-shell.yml, который выполняется на удаленном хосте, но с использованием PowerShell.

6. При необходимости на своей локальной рабочей станции с Windows проверьте, выполнился ли плейбук существующий сценарий и код PowerShell в плейбуке.
Если плейбук Ansible успешно выполнился, PowerShell должен вернуть два утверждения True
, указывающих на то, что файлы теперь существуют.
Заключение
В этом руководстве вы узнали, как настроить свой первый управляемый узел Windows в Ansible. Несмотря на то, что Ansible традиционно известен как инструмент для Linux, его легко можно использовать и для Windows!
Какие плейбуки и модули Windows вы начнете использовать для управления Windows с помощью Ansible?