Ansible Windows Update - Fails Unless Interactive Login Performed

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 для Ansible:
$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
  • Включить RDP:
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, все в порядке.

Но, очевидно, мы не хотим этого делать;)

Еще раз, для ясности:

  • Развертываем Instance (с настройками "user_data" - что включает перезагрузку), запускаем Ansible playbook, который запускает задачу Windows Update:
Failed to search for updates: Exception from HRESULT: 0x80240438
  • Развернуть Instance (С твиками "user_data" - что включает перезагрузку), войти в систему интерактивно (используя RDP), запустить сборник Ansible, который запускает задачу Windows Update:
Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.329.1737.0)

ПРИМЕЧАНИЕ: Это только текущий ответ, поскольку в AMI отсутствует только это обновление. ...Поэтому в будущем все может/должно измениться

Кроме того, это не включает присоединение к домену или что-то еще... Хотя я заметил похожую картину. Если я использовал полный учебник, до тех пор, пока я входил в систему интерактивно, используя пользователя домена до запуска задачи Windows Update, все работало.

Следует отметить, что когда я вхожу в систему интерактивно, я не делаю абсолютно ничего... Просто вхожу через RDP, а затем не принимаю никаких приглашений и ничего не нажимаю.

Очевидно, что цель состоит в том, чтобы сделать так, чтобы не было необходимости в ручном входе, поскольку это противоречит основной цели этого проекта. Итак, мои вопросы:

  • Кто-нибудь знает, что происходит?!? Есть ли способ смоделировать/воспроизвести все изменения, которые происходят при интерактивном входе? Я просмотрел журналы, но не вижу ничего очевидного.
  • Если предположить, что я не могу исправить это "правильным" способом, есть идеи, как использовать Ansible для выполнения интерактивного входа? Я думаю, есть задача, которая интерактивно входит в систему, затем другая задача, которая выводит ее из системы... Грязно, но я не могу продолжать тратить на это время. Твик "user_data" тоже сработает.

На данный момент я готов попробовать все, что угодно, единственное, что я могу сказать, это то, что мы не можем изменить используемый AMI (кроме обновления до последней версии), и конечный результат процесса "user_data" должен быть достигнут (но может быть достигнут другими способами, если в этом проблема). Здесь задействован прокси-сервер, но я не вижу, как это может быть фактором, поскольку источником проблемы, похоже, является интерактивный вход в систему.

2
задан 6 January 2021 в 18:29
2 ответа

кстати, я открыл отчет об ошибке по этому поводу:

https://github.com/ansible-collections/ansible.windows/issues/193

0
ответ дан 7 May 2021 в 18:35

У меня уже была эта проблема. Не уверен в исправлении, но работа заключалась в настройке автоматического входа в систему для доступного пользователя. Перезагрузите экземпляр. Запустите обновление, затем удалите автоматический вход.

Очень плохая работа, моя была частью создания образа Packer, поэтому я мог просто добавить автоматический вход, а затем удалить его после обновлений.

1
ответ дан 7 May 2021 в 18:35

Теги

Похожие вопросы