Удаление Tomcat в Windows без вывода сообщений через Ansible

Ansible Control Specs

OS:              RHEL 6.8 (Santiago)
Ansible version: 2.3.2.0
Python version:  2.6.6

Спецификации целевой машины

OS:             Windows 2008 Server R2
Tomcat version: 8.0.41


Использование модуля win_package (предпочтительно)

Я пытаюсь использовать Ansible для автоматизации установки / удаления Tomcat (поэтому это должно быть сделано в автоматическом режиме, без взаимодействия с пользователем).

Я могу успешно установить Tomcat с помощью установщика Windows, как это:

- name: Install Tomcat
  win_package:
    path: "https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.41/bin/apache-tomcat-8.0.41.exe"
    product_id: "Apache Tomcat 8.0 Tomcat8"
    arguments: /S

Однако у меня возникли проблемы при удалении программного обеспечения. Я попытался использовать тот же подход, что и выше (и добавил опцию "состояние: отсутствует"), но безуспешно. Я попытался загрузить установщик и использовать локальный путь. А также попытался опустить параметр "аргументы".

Использование модуля win_shell

Я изучил ключ реестра по адресу: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Apache Tomcat 8.0 Tomcat8 и увидел, что свойство "UninstallString" содержит следующее: "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" -ServiceName="Tomcat8",

Конечно, выполнение этой точной команды вручную на целевой машине работает, но выполнение ее через ansible будет зависать (так как она не работает бесшумно).

Добавление аргумента "/S" в конец

& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" -ServiceName="Tomcat8" /S

Выполнение вышеуказанной команды не работает ни вручную, ни через ansible (точно такое же поведение). В обоих случаях удаляются папки из корня tomcat, КРОМЕ bin, conf, lib, logs, а также webapps, Также ни одна из этих опций не удалит элементы реестра или службу tomcat, а tomcat по-прежнему отображается в списке "Программы и компоненты".

Добавление аргумента "/S" к середине

& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" /S -ServiceName="Tomcat8"

Выполнение команды выше вручную работает отлично (она оставляет позади conf, logs, а также webapps каталоги, но это ожидается - см. этот пост). Но запуск через ansible просто удаляет файл Uninstall.exe из корня tomcat - и все! Он не удаляет ничего другого из корня tomcat, ни элементов реестра, ни службы tomcat. И все же перечислены в списке "Программы и компоненты".

Вот тот синтаксис, который я использую:

- name: Uninstall Tomcat
  win_shell: '& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" /S -ServiceName="Tomcat8"'

Почему команды "ручной" и "ANSIBLE" ведут себя одинаково, помещая "/S" в конце, а затем ведут себя совершенно иначе, когда "/S" ставят в середине?

2 ответа

В итоге я использовал win_shell для вызова деинсталлятора, но мне пришлось добавить сон в конце задачи. Без сна единственным изменением, которое произошло, было удаление Uninstall.exe:

- name: Uninstall Tomcat
  win_shell: |
    $CMD = 'C:\Program Files\Apache Software Foundation\Tomcat 7.0\Uninstall.exe'
    $arg1 = '/S'
    $arg2 = '-ServiceName="Tomcat7"'
    & $CMD $arg1 $arg2
    Start-Sleep -s 30 

Я понял, как успешно удалить с помощью модуля win_package. Вам нужно указать файл Uninstall.exe (внутри корня tomcat) вместо исходного файла установщика.

- name: Uninstall Tomcat
  win_package:
    path: 'C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe'
    product_id: 'Apache Tomcat 8.0 Tomcat8'
    arguments: '/S -ServiceName="Tomcat8"'
    state: absent

Я знаю, что вы сказали, что предпочитаете win_package, но я хочу предложить использовать choco?

- name: Install Tomcat with Chocolatey
  win_chocolatey:
    name: tomcat
    state: present
    version: '8.5.12'

- name: Uninstall Tomcat with Chocolatey
  win_chocolatey:
    name: tomcat
    state: absent
  no_log: True

http://docs.ansible.com/ansible/latest/win_chocolatey_module.html https://chocolatey.org/packages/Tomcat/8.5.12

Другие вопросы по тегам