无源控制规格
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 (因此它需要在没有用户交互的情况下默默地完成)。
我能够使用windows安装程序成功地安装tomcat,如下所示:
- 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“参数
& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" -ServiceName="Tomcat8" /S运行上面的命令既不能手动运行,也不能通过ansible运行(相同的行为)。除了bin、conf、lib、logs和webapps之外,这两种方法都将从tomcat根目录中删除文件夹。另外,这两个选项都不会删除注册表项或tomcat服务,tomcat仍然列在“程序和功能”列表中。
在中间中添加"/S“参数
& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" /S -ServiceName="Tomcat8"手动运行上面的命令非常完美(它留下了conf、logs和webapps目录,但这是意料之中的-参见this post)。但是通过ansible运行只需从tomcat根目录中删除Uninstall.exe文件--仅此而已!它不会从tomcat根、注册表项和tomcat服务中删除任何其他内容。并且仍然列在“节目和功能”列表中。
下面是我使用的ansible语法:
- name: Uninstall Tomcat
win_shell: '& "C:\Program Files\Apache Software Foundation\Tomcat 8.0\Uninstall.exe" /S -ServiceName="Tomcat8"'为什么当'/S‘放在末尾时,手动命令和ansible命令的行为是相同的,而当'/S’放在中间时,行为却完全不同呢?
发布于 2020-08-16 23:35:42
最后,我使用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 发布于 2017-12-01 18:01:41
我了解了如何使用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发布于 2018-02-08 17:34:27
我知道你说你更喜欢win_package,但我想建议你吃巧克力吗?
- 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: Truemodule.html https://chocolatey.org/packages/Tomcat/8.5.12
https://stackoverflow.com/questions/47519421
复制相似问题