Часто задаваемые вопросы по Windows
Ниже приведены ответы на часто задаваемые вопросы по Ansible и Windows.
Примечание
Этот документ охватывает вопросы по управлению серверами Microsoft Windows с помощью Ansible. Для вопросов по Ansible Core, пожалуйста, обратитесь к общей странице FAQ.
Поддерживаются ли Windows XP или Server 2003 в Ansible?
Ansible не поддерживает хосты Windows XP или Server 2003. Ansible поддерживает следующие версии Windows:
- Windows Server 2008 1
- Windows Server 2008 R2 1
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2016
- Windows Server 2019
- Windows 7 1
- Windows 8.1
- Windows 10
1 - Для получения более подробной информации см. запись FAQ по Server 2008.
Ansible также имеет минимальные требования к версии PowerShell. Для получения последней информации см. Настройка хоста Windows.
Поддерживаются ли Server 2008, 2008 R2 и Windows 7?
Microsoft прекратил расширенную поддержку этих версий Windows 14 января 2020 года, а Ansible прекратил официальную поддержку в версии 2.10. Новое развитие функций для этих операционных систем не будет осуществляться, и автоматическое тестирование прекращено. Однако существующие модули и функции, вероятно, будут продолжать работать, и простые запросы на исправление проблем с этими версиями Windows могут быть приняты.
Можно ли управлять Windows Nano Server с помощью Ansible?
В настоящее время Ansible не поддерживает Windows Nano Server, так как у него нет доступа к полному .NET Framework, используемому большинством модулей и внутренних компонентов.
Можно ли запустить Ansible на Windows?
Нет, Ansible может только управлять хостами Windows. Ansible не может запускаться на хосте Windows напрямую, хотя он может запускаться в подсистеме Linux для Windows (WSL).
Примечание
Подсистема Linux для Windows не поддерживается Ansible и не должна использоваться в производственных системах.
Для установки Ansible в WSL можно выполнить следующие команды в терминале bash:
sudo apt-get update sudo apt-get install python-pip git libffi-dev libssl-dev -y pip install --user ansible pywinrm
Для запуска Ansible из исходного кода вместо релизной версии в WSL, просто удалите установленную версию pip, а затем клонируйте репозиторий git.
pip uninstall ansible -y git clone https://github.com/ansible/ansible.git source ansible/hacking/env-setup # To enable Ansible on login, run the following echo ". ~/ansible/hacking/env-setup -q' >> ~/.bashrc
Если при запуске Ansible в WSL возникают ошибки по таймауту, это может быть связано с проблемой с sleep возвращающим неправильно. Следующее решение может устранить проблему:
mv /usr/bin/sleep /usr/bin/sleep.orig ln -s /bin/true /usr/bin/sleep
Другой вариант — использовать WSL 2, если вы используете Windows 10 версии позже сборки 2004.
wsl --set-default-version 2
Можно ли использовать ключи SSH для аутентификации на хостах Windows?
Вы не можете использовать ключи SSH с плагинами подключения WinRM или PSRP. Эти плагины подключения используют сертификаты X509 для аутентификации вместо пар ключей SSH, которые использует SSH.
Способ генерации и сопоставления сертификатов X509 с пользователем отличается от реализации SSH; обратитесь к документации Windows Remote Management для получения дополнительной информации.
Ansible 2.8 добавил экспериментальную возможность использовать плагин подключения SSH, который использует ключи SSH для аутентификации для серверов Windows. Смотрите этот вопрос для получения дополнительной информации.
Почему команда, работающая локально, не работает в Ansible?
Ansible выполняет команды через WinRM. Эти процессы отличаются от запуска команды локально следующим образом:
- Если не используется такой метод аутентификации как CredSSP или Kerberos с делегированием учетных данных, процесс WinRM не имеет возможности делегировать учетные данные пользователя сетевому ресурсу, что приводит к ошибкам
Access is Denied. - Все процессы, выполняемые в рамках WinRM, находятся в неинтерактивной сессии. Приложения, которые требуют интерактивной сессии, не будут работать.
- При выполнении через WinRM Windows ограничивает доступ к внутренним API Windows, таким как API Windows Update и DPAPI, на которые полагаются некоторые установщики и программы.
Некоторые способы обойти эти ограничения:
- Используйте
become, который выполняет команду так, как если бы она выполнялась локально. Это обойдет большинство ограничений WinRM, так как Windows не осознает, что процесс выполняется в рамках WinRM при использованииbecome. См. документацию Понимание повышения привилегий: become для получения дополнительной информации. - Используйте запланированную задачу, которую можно создать с помощью
win_scheduled_task. Как иbecome, она обойдет все ограничения WinRM, но может использоваться только для выполнения команд, а не модулей. - Используйте
win_psexecдля выполнения команды на хосте. PSExec не использует WinRM и, таким образом, обойдет любые ограничения. - Для доступа к сетевым ресурсам без каких-либо из этих решений, можно использовать CredSSP или Kerberos с включенным делегированием учетных данных.
См. Понимание повышения привилегий: become для получения дополнительной информации о том, как использовать become. Раздел ограничений в Windows Remote Management содержит дополнительные сведения об ограничениях WinRM.
Программа не устанавливается на Windows с помощью Ansible
См. этот вопрос для получения дополнительной информации об ограничениях WinRM.
Какие модули Windows доступны?
Большинство модулей Ansible в Ansible Core разработаны для сочетания машин Linux/Unix и произвольных веб-служб. Эти модули написаны на Python, и большинство из них не работают в Windows.
Поэтому существуют специализированные модули Windows, написанные на PowerShell, которые предназначены для запуска на хостах Windows. Список этих модулей можно найти здесь.
Кроме того, следующие модули/плагины действий Ansible Core работают с Windows:
- add_host
- assert
- async_status
- debug
- fail
- fetch
- group_by
- include
- include_role
- include_vars
- meta
- pause
- raw
- script
- set_fact
- set_stats
- setup
- slurp
- template (также: win_template)
- wait_for_connection
Можно ли запускать модули Python на хостах Windows?
Нет, протокол подключения WinRM настроен на использование модулей PowerShell, поэтому модули Python не будут работать. Способ обойти эту проблему — использовать delegate_to: localhost для запуска модуля Python на контроллере Ansible. Это полезно, если во время выполнения книги сценариев необходимо обратиться к внешней службе, и нет эквивалентного модуля Windows.
Можно ли подключиться к хостам Windows через SSH?
Ansible 2.8 добавил экспериментальную возможность использования плагина подключения SSH для управления хостами Windows. Чтобы подключиться к хостам Windows через SSH, необходимо установить и настроить вилку Win32-OpenSSH, которая разрабатывается Microsoft на хостах Windows. Хотя большинство основных функций должно работать с SSH, Win32-OpenSSH быстро меняется, с добавлением новых функций и исправлением ошибок в каждой версии. Настоятельно рекомендуется установить последнюю версию Win32-OpenSSH с страницы GitHub Releases при использовании с Ansible на хостах Windows.
Для использования SSH в качестве подключения к хосту Windows, установите следующие переменные в инвентаре:
ansible_connection=ssh # Set either cmd or powershell not both ansible_shell_type=cmd # ansible_shell_type=powershell
Значение для ansible_shell_type должно быть cmd или powershell. Используйте cmd если DefaultShell не настроено в службе SSH, и powershell если оно задано как DefaultShell.
Почему подключение к хосту Windows через SSH терпит неудачу?
Если вы не используете Win32-OpenSSH как описано выше, вы должны подключаться к хостам Windows с помощью Windows Remote Management. Если ваш вывод Ansible указывает, что использовался SSH, либо вы неправильно настроили переменные подключения, либо хост их не наследует правильно.
Убедитесь, что ansible_connection: winrm задано в инвентаре для хостов Windows.
Почему мои учетные данные отклоняются?
Это может быть по многим причинам, не связанным с неверными учетными данными.
См. HTTP 401/Отклонение учетных данных в Настройка хоста Windows для более подробного руководства, что это может означать.
Почему я получаю ошибку SSL CERTIFICATE_VERIFY_FAILED?
Когда контроллер Ansible работает под Python 2.7.9+ или более старой версией Python с обратной совместимостью SSLContext (например, Python 2.7.5 в RHEL 7), контроллер попытается проверить сертификат, используемый WinRM для подключения HTTPS. Если сертификат не может быть проверен (например, в случае самоподписанного сертификата), проверка будет завершена неудачно.
Чтобы пропустить проверку сертификатов, добавьте ansible_winrm_server_cert_validation: ignore в инвентарь для хоста Windows.
См. также
- Руководства по Windows
-
Индекс документации по Windows
- Введение в playbook
-
Введение в playbook
- Советы и рекомендации
-
Советы и рекомендации по playbook
- Список рассылки пользователей
-
У вас есть вопросы? Заходите в группу Google!
- irc.freenode.net
-
Канал IRC #ansible
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/user_guide/windows_faq.html