首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Ansible悄悄卸载Windows上的Tomcat

通过Ansible悄悄卸载Windows上的Tomcat
EN

Stack Overflow用户
提问于 2017-11-27 20:38:37
回答 3查看 3.4K关注 0票数 1

无源控制规格

代码语言:javascript
复制
OS:              RHEL 6.8 (Santiago)
Ansible version: 2.3.2.0
Python version:  2.6.6

靶机规格

代码语言:javascript
复制
OS:             Windows 2008 Server R2
Tomcat version: 8.0.41

使用win_package模块(首选)

我正在尝试使用Ansible来自动安装/卸载tomcat (因此它需要在没有用户交互的情况下默默地完成)。

我能够使用windows安装程序成功地安装tomcat,如下所示:

代码语言:javascript
复制
- 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

然而,我有问题卸载软件。我尝试使用类似的方法(并添加"state:旷日持久“选项),但没有成功。我尝试下载安装程序,并使用本地路径。并尝试省略“论点”选项。

使用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“参数

代码语言:javascript
复制
& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" -ServiceName="Tomcat8" /S

运行上面的命令既不能手动运行,也不能通过ansible运行(相同的行为)。除了binconfliblogswebapps之外,这两种方法都将从tomcat根目录中删除文件夹。另外,这两个选项都不会删除注册表项或tomcat服务,tomcat仍然列在“程序和功能”列表中。

在中间中添加"/S“参数

代码语言:javascript
复制
& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" /S -ServiceName="Tomcat8"

手动运行上面的命令非常完美(它留下了conflogswebapps目录,但这是意料之中的-参见this post)。但是通过ansible运行只需从tomcat根目录中删除Uninstall.exe文件--仅此而已!它不会从tomcat根、注册表项和tomcat服务中删除任何其他内容。并且仍然列在“节目和功能”列表中。

下面是我使用的ansible语法:

代码语言:javascript
复制
- name: Uninstall Tomcat
  win_shell: '& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" /S -ServiceName="Tomcat8"'

为什么当'/S‘放在末尾时,手动命令和ansible命令的行为是相同的,而当'/S’放在中间时,行为却完全不同呢?

EN

回答 3

Stack Overflow用户

发布于 2020-08-16 23:35:42

最后,我使用win_shell调用卸载程序,但在任务结束时我不得不添加一个睡眠。如果没有睡眠,唯一发生的更改是删除Uninstall.exe:

代码语言:javascript
复制
- 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 
票数 2
EN

Stack Overflow用户

发布于 2017-12-01 18:01:41

我了解了如何使用win_package模块成功卸载。您需要指定Uninstall.exe文件(在tomcat根内),而不是原始安装程序文件。

代码语言:javascript
复制
- 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
票数 0
EN

Stack Overflow用户

发布于 2018-02-08 17:34:27

我知道你说你更喜欢win_package,但我想建议你吃巧克力吗?

代码语言:javascript
复制
- 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

module.html https://chocolatey.org/packages/Tomcat/8.5.12

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47519421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档