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

    Если обновляем сервисы, и чтобы не получилось, что кто-то с ними работает

    Планируется отключение электричества, электрики буду заменять оборудование в щитке, дабы ИБП на рабочих местах не подохли от разряда.

    и по многим другим причинам

Здесь и далее используется система Ubuntu 22.04 Server на которую установлен пакет Ansible опираясь на заметку: "Через Ansible с доменными Windows системами на Ubuntu 22.04 Server". В ней задокумментировано все что нужно дабы начать работать с Windows системами в домене.

Шаг №1: Предопределяю для каких Windows систем буду применять написаемые Playbook(и) с учетом своих задач:

ekzorchik@srv-ansible:~$ cat /etc/ansible/windows/hosts

[windows]

wrkst0003.polygon.local

wrkst0002.polygon.local

Шаг №2: Создаем Playbook ответственный за выключение компьютеров в домене:

ekzorchik@srv-ansible:~$ sudo nano /etc/ansible/playbook/poweroff.yml

- hosts: windows

  gather_facts: no

  tasks:

  - name: Turn off computers

    raw: shutdown /s /hybrid /t 15 /c "Выключаем все компьютеры перед тех обслуживанием серверов"

Шаг №3: Запускаю созданный в предыдущем шаге Playbook применительно к группе Windows, см. Шаг №1:

ekzorchik@srv-ansible:~$ sudo ansible-playbook -i /etc/ansible/windows/hosts /etc/ansible/playbook/poweroff.yml

PLAY [windows] *********************************************************************************************************

TASK [Turn off computers] **********************************************************************************************

changed: [wrkst0003.polygon.local]

changed: [wrkst0002.polygon.local]

PLAY RECAP *************************************************************************************************************

wrkst0002.polygon.local    : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

wrkst0003.polygon.local    : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ekzorchik@srv-ansible:~$

Шаг №4: После проверяю, что узлы не доступны через модуль win_ping:

ekzorchik@srv-ansible:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m win_ping

wrkst0003.polygon.local | UNREACHABLE! => {

    "changed": false,

    "msg": "kerberos: HTTPConnectionPool(host='wrkst0003.polygon.local', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7ff68ecb9d50>: Failed to establish a new connection: [Errno 113] No route to host'))",

    "unreachable": true

}

wrkst0002.polygon.local | UNREACHABLE! => {

    "changed": false,

    "msg": "kerberos: HTTPConnectionPool(host='wrkst0002.polygon.local', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7ff68ecb9960>: Failed to establish a new connection: [Errno 113] No route to host'))",

    "unreachable": true

}

ekzorchik@srv-ansible:~$

из вывода выше видно, что модуль не смог отправить ICMP запрос до узлов тем самым по этому признаку можно судить о правильной отработке созданного Playbook на выключение систем.

Отлично, playbook по выключению Windows систем готов и успешно отработал.

От этой заметки и будем в дальнейшем отталкиваться если что при возобновлении изучения Ansible.

На этом пока у меня все, с уважением автор блога Олло Александр aka ekzorchik.