Ansible winrm программа не удаляется на Windows 10

Всем привет! Стоит задача, сделать deploy программы на Windows 10. Сама программа собирается на linux + wine, поэтому решил выбрать в качестве аркестрации инструмент ansible. Удалось выполнить следующее:

  1. подключиться при помощи winrm к Windows
    Далее выполняется таска по удалению ПО на Windows

Playbool

---

- name: Windows install roschat client
  hosts: windows
  tasks:
     - name: Uninstall roschat
       win_package:
         path: C:\Program Files\roschat\Uninstall РосЧат.exe
         productid: "56e2ec90-1579-5edf-8225-77cb72eed1a1"
         arguments: /allusers
         state: absent

В реестре Windows пути и аргументы похожи

Сценарий выполняется без ошибок, но сама программа не удаляется

Результат выполнения Ansible

pbezpal@devops:/etc/ansible/windows/playbooks$ sudo ansible-playbook -i /etc/ansible/windows/hosts /etc/ansible/windows/playbooks/windows.yml

PLAY [Example] **************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [10.10.225.189]

TASK [Uninstall roschat] ****************************************************************************************************************************************************
changed: [10.10.225.189]

PLAY RECAP ******************************************************************************************************************************************************************
10.10.225.189              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Делал по официальной документации Ansible. Может кто сталкивался с такой проблемой?

Путь с пробелом, попробуйте в кавычки его взять.

1 лайк

Взял путь в одинарные кавычки, но результат тот же(

А так?
"C:\\Program Files\\roschat\\Uninstall РосЧат.exe"
Обязательно двойные поставьте.

1 лайк

Не помогло. Но при запуске удаления программы вижу такой процесс

Снимок

Не знаю влияет ли это как-то на удаление

А в журнал событий винды не смотрели?
Если там ничего нет, попробуйте запускать плэйбук с ключами:
-v
-vv
-vvv
-vvvv

Наверняка там будет подробное описание что произошло и что не произошло и почему. Соответственно если -v недостаточно, то прибавляем ещё один и так до самого подробного лога.

1 лайк
TASK [Uninstall roschat] ****************************************************************************************************************************************************
task path: /etc/ansible/windows/playbooks/windows.yml:16
Using module file /usr/lib/python3/dist-packages/ansible/modules/windows/win_package.ps1
Pipelining is enabled.
<10.10.225.189> ESTABLISH WINRM CONNECTION FOR USER: bezpa on PORT 5986 TO 10.10.225.189
EXEC (via pipeline wrapper)
changed: [10.10.225.189] => {
    "changed": true,
    "rc": 0,
    "reboot_required": false
}
META: ran handlers
META: ran handlers

Похоже ничего не происходит((( Но почему, пока не понимаю

А какие-то команды ансиблом выполняются на этой машине вообще?

1 лайк

Только эта. Пробовал на другой, но результат такой же

Я бы проверил, что там вообще хоть какая-нибудь команда выполняется.
Ну например создание файла.
Может проблема глобальная.

1 лайк

Создание директории и копирование файла с ftp работают.

TASK [Create directory] *****************************************************************************************************************************************************
task path: /etc/ansible/windows/playbooks/windows.yml:6
Using module file /usr/lib/python3/dist-packages/ansible/modules/windows/win_file.ps1
Pipelining is enabled.
<10.10.225.189> ESTABLISH WINRM CONNECTION FOR USER: bezpa on PORT 5986 TO 10.10.225.189
EXEC (via pipeline wrapper)
ok: [10.10.225.189] => {
    "changed": false
}

TASK [Get exe file from ftp] ************************************************************************************************************************************************
task path: /etc/ansible/windows/playbooks/windows.yml:11
Using module file /usr/lib/python3/dist-packages/ansible/modules/windows/win_get_url.ps1
Pipelining is enabled.
<10.10.225.189> ESTABLISH WINRM CONNECTION FOR USER: bezpa on PORT 5986 TO 10.10.225.189
EXEC (via pipeline wrapper)
ok: [10.10.225.189] => {
    "changed": false,
    "checksum_dest": "9485bcd92f6d4105bae6be68f0d4ff783187829f",
    "checksum_src": "9485bcd92f6d4105bae6be68f0d4ff783187829f",
    "dest": "d:\\roschat\\roschat-0.1.1143.x64.exe",
    "elapsed": 20.4435522,
    "invocation": {
        "module_args": {
            "checksum": null,
            "checksum_algorithm": "sha1",
            "checksum_url": null,
            "dest": "d:\\roschat",
            "force": true,
            "force_basic_auth": false,
            "headers": {},
            "proxy_password": null,
            "proxy_url": null,
            "proxy_username": null,
            "timeout": 10,
            "url": "ftp://10.10.199.31/releases/RosChat/client/roschat-client/01.06.2020_10%3A27_0.1-1143/windows/x64/roschat-0.1.1143.x64.exe",
            "url_password": null,
            "url_username": null,
            "use_proxy": true,
            "validate_certs": true
        }
    },
    "msg": "226 Transfer complete.\r\n",
    "size": 62128920,
    "status_code": 226,
    "url": "ftp://10.10.199.31/releases/RosChat/client/roschat-client/01.06.2020_10%3A27_0.1-1143/windows/x64/roschat-0.1.1143.x64.exe"
}

Окей, попробуйте поменять ваш product_id на такой:
'{56e2ec90-1579-5edf-8225-77cb72eed1a1}' (с одинарными кавычками)

Хотя это вряд ли поможет, конечно. Но может хотя бы ошибка будет =)

1 лайк

Либо просто поменяйте в том, что у вас написано - двойные кавычки на одинарные. :slight_smile:

1 лайк

Ещё как вариант попробуйте вообще убрать product_id, раз у вас и так указан путь уже.

1 лайк

Без product_id ругается

TASK [Uninstall roschat] ****************************************************************************************************************************************************
task path: /etc/ansible/windows/playbooks/windows.yml:16
Using module file /usr/lib/python3/dist-packages/ansible/modules/windows/win_package.ps1
Pipelining is enabled.
<10.10.225.189> ESTABLISH WINRM CONNECTION FOR USER: bezpa on PORT 5986 TO 10.10.225.189
EXEC (via pipeline wrapper)
fatal: [10.10.225.189]: FAILED! => {
    "changed": false,
    "msg": "product_id is required when the path is not an MSI or the path is an MSI but not local",
    "reboot_required": false
}

Все предложенные варианты тоже не помогают(
Может через Ansible нельзя удалить софт, который установлен был установлен вручную?

Поменял playbook

     - name: Uninstall roschat
       win_package:
          productid: '56e2ec90-1579-5edf-8225-77cb72eed1a1'
          state: absent

Так ругается

TASK [Uninstall roschat] ****************************************************************************************************************************************************
task path: /etc/ansible/windows/playbooks/windows.yml:16
Using module file /usr/lib/python3/dist-packages/ansible/modules/windows/win_package.ps1
Pipelining is enabled.
<10.10.225.189> ESTABLISH WINRM CONNECTION FOR USER: bezpa on PORT 5986 TO 10.10.225.189
EXEC (via pipeline wrapper)
fatal: [10.10.225.189]: FAILED! => {
    "changed": false,
    "msg": "failed to run uninstall process (\"\\\"C:\\Program Files\\roschat\\Uninstall РосЧат.exe\\\" /allusers\"): Exception calling \"SearchPath\" with \"1\" argument(s): \"Could not find file '\\.exe'.\"",
    "reboot_required": false
}

может дело в кириллице?

1 лайк

Ну вы можете попробовать в реестре переименовать файл с кириллицей, чтобы он был без неё.
И поменять путь.
Вполне вероятно.

1 лайк

А какой версии ансибл-то? Вы же с линуксов его запускаете?
Я не в курсе, а на винде для него надо что-нить ставить?

1 лайк

Там PS скрипт есть, который всё что надо делает.

1 лайк