martin_koh
@martin_koh

Почему ansible не может перезагрузить хост?

Имеется максимально простой playbook для WU.
- hosts: all
  gather_facts: false
  tasks:

  - name: Search and download Windows updates without installing them
    ansible.windows.win_updates:
      state: downloaded
      log_path: C:\wua.log

  - name: Install available updates and reboot if necessary during execution
    ansible.windows.win_updates:
      category_names: '*'
      state: installed
      reboot: true
    register: update_result
    become: true
    become_method: runas
    become_user: SYSTEM
    
  - name: Reboot if necessary
    win_reboot:
    when: update_result.reboot_required

При выполнении он крашится на моменте, когда необходимо сделать reboot для установки обновлений.
ansible_collections.ansible.windows.plugins.plugin_utils._reboot._ReturnResultException: ansible.windows.win_updates: Reboot command failed
fatal: [MY_HOST]: FAILED! => {
    "changed": false,
    "elapsed": 0,
    "failed_update_count": 0,
    "filtered_updates": {},
    "found_update_count": 0,
    "installed_update_count": 0,
    "invocation": {
        "module_args": {
            "accept_list": null,
            "category_names": [
                "*"
            ],
            "log_path": null,
            "reboot": true,
            "reboot_timeout": 1200,
            "reject_list": null,
            "server_selection": "default",
            "skip_optional": false,
            "state": "installed"
        }
    },
    "msg": "Failed to reboot host: ansible.windows.win_updates: Reboot command failed",
    "rc": 5,
    "reboot_required": false,
    "rebooted": false,
    "stderr": "Access is denied.(5)",
    "stdout": "",
    "unreachable": false,
    "updates": {}
}

Выполнение составлено в полном соответствии с официальной документацией ansible.
Возможность Remote shutdown на хосте включена.
win_reboot не хочет отрабатывать, жалуясь на "Access is denied.(5)" даже в таком виде (т.е. это не зависит от WU):
- name: Reboot
    win_reboot:

В чем может быть проблема?
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
martin_koh
@martin_koh Автор вопроса
В общем проблема оказалась в том, что не хватало SeRemoteShutdownPrivilege (при чем этих прав нет у SYSTEM, а при попытке запуска модуля через юзера Administrator, или Backup Operators - выполнение модуля не крашилось, но при этом и не выполнялось, просто зависало выполнение и ничего не происходило, тестил в ожидании по 24 часа).

В итоге достаточно было просто выдать SeRemoteShutdownPrivilege своему ansbile-user и запускать модуль через него:

- name: Add Tteam Privelege to Remote Shutdown
    win_security_policy:
      section: Privilege Rights
      key: SeRemoteShutdownPrivilege
      value: my-ansbile-user
    ignore_errors: true
    
  - name: Add Tteam Privelege to Remote Shutdown
    win_user_right:
      name: SeRemoteShutdownPrivilege
      users:
      - my-ansbile-user
      action: set
    ignore_errors: true
    register: task_result

  - name: Install all updates and reboot as many times as needed
    ansible.windows.win_updates:
      category_names: '*'
    become: true
    become_method: runas
    become_user: my-ansbile-user
   
  - name: Ensure we wait long enough for the updates to be applied during reboot
    ansible.windows.win_updates:
      reboot: true
      reboot_timeout: 3600
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@MaxKozlov
Просто remote shutdown может быть недостаточно
The connection user must have the SeRemoteShutdown...

Особенно сервер

с become: true пробовали ?
Ответ написан
opium
@opium
Просто люблю качественно работать
написано нет прав
- name: Install available updates and reboot if necessary during execution
ansible.windows.win_updates:
category_names: '*'
state: installed
reboot: true
register: update_result
become: true
become_method: runas
become_user: Administrator
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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