Long time/first time... Используя официальный AWS Windows 2019 AMI ("ami-0229f7666f517b31e" на "us-east-1"), мы создаем новый экземпляр и выполняем несколько основных задач (используя опцию "user_data") с помощью PowerShell:
Start-Transcript -Path "c:\user-data.txt"
$admin = [adsi]("WinNT://./administrator, user")
$admin.PSBase.Invoke("SetPassword", "${password}")
$WinRM = Invoke-WebRequest -Proxy http://"${proxy}" -UseBasicParsing https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 | Select-Object -ExpandProperty Content
Invoke-Expression $WinRM
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -name "fDenyTSConnections" -value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Rename-Computer -NewName "${name}" -Force
Stop-Transcript
Restart-Computer
Довольно базовые вещи на самом деле, ничего, что мы можем видеть как проблему здесь и проверили, что каждая задача работает как ожидалось.
На этом этапе мы запускаем сборник Ansible, который делает несколько вещей (настройка служб, присоединение к домену, установка chocolatey и т.д.), но задача, которая всегда терпит неудачу - это часть Windows Update.
В процессе устранения неполадок мы удалили из сборника Ansible все, кроме вызова Windows Update с помощью коллекции ansible.windows. Итак, на данном этапе экземпляр развернут, основные задачи PowerShell запущены через "user_data", а затем Ansible подключается и пытается запустить Windows Update.
Сама задача Ansible также довольно проста:
- name: os - perform windows updates
win_updates:
state: installed
category_names:
- Application
- Connectors
- CriticalUpdates
- DefinitionUpdates
- DeveloperKits
- FeaturePacks
- Guidance
- SecurityUpdates
- ServicePacks
- Tools
- UpdateRollups
log_path: c:\wu-install.log
reboot: yes
reboot_timeout: 600
И вот здесь все становится странным/раздражающим... Когда мы запускаем эту задачу, мы видим такой ответ:
Failed to search for updates: Exception from HRESULT: 0x80240438
Это происходит КАЖДЫЙ раз, когда мы пробуем это, используя наш желаемый рабочий процесс... Однако мы обнаружили, что если мы один раз взаимодействуем до выполнения задачи Windows Update, она работает! КАЖДЫЙ раз!!!
Моя последняя работа была на 99,9% связана с linux, так что я немного поднаторел в этом, но я знаю, что есть сумасшедшие/недокументированные вещи, которые происходят при первом (интерактивном) входе в систему. Я перепробовал кучу разных вещей (отключил IPv6, запустил wsreset.exe, удалил записи реестра Windows Store, перезапустил службы Windows Updates и т.д.), основываясь на исследовании этого кода ошибки... Но единственное, что я вижу, это то, что пока я вхожу в систему в интерактивном режиме один раз ДО того, как запускается попытка обновления Windows, все в порядке.
Но, очевидно, мы не хотим этого делать;)
Еще раз, для ясности:
Failed to search for updates: Exception from HRESULT: 0x80240438
Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.329.1737.0)
ПРИМЕЧАНИЕ: Это только текущий ответ, поскольку в AMI отсутствует только это обновление. ...Поэтому в будущем все может/должно измениться
Кроме того, это не включает присоединение к домену или что-то еще... Хотя я заметил похожую картину. Если я использовал полный учебник, до тех пор, пока я входил в систему интерактивно, используя пользователя домена до запуска задачи Windows Update, все работало.
Следует отметить, что когда я вхожу в систему интерактивно, я не делаю абсолютно ничего... Просто вхожу через RDP, а затем не принимаю никаких приглашений и ничего не нажимаю.
Очевидно, что цель состоит в том, чтобы сделать так, чтобы не было необходимости в ручном входе, поскольку это противоречит основной цели этого проекта. Итак, мои вопросы:
На данный момент я готов попробовать все, что угодно, единственное, что я могу сказать, это то, что мы не можем изменить используемый AMI (кроме обновления до последней версии), и конечный результат процесса "user_data" должен быть достигнут (но может быть достигнут другими способами, если в этом проблема). Здесь задействован прокси-сервер, но я не вижу, как это может быть фактором, поскольку источником проблемы, похоже, является интерактивный вход в систему.
кстати, я открыл отчет об ошибке по этому поводу:
https://github.com/ansible-collections/ansible.windows/issues/193
У меня уже была эта проблема. Не уверен в исправлении, но работа заключалась в настройке автоматического входа в систему для доступного пользователя. Перезагрузите экземпляр. Запустите обновление, затем удалите автоматический вход.
Очень плохая работа, моя была частью создания образа Packer, поэтому я мог просто добавить автоматический вход, а затем удалить его после обновлений.