我正在自动配置一些Windows构建代理。我想安装软件包,但是在重启机器之前,命令行上没有一些命令(git
,hg
)(奇怪的是,如果我这样做,它们可用于命令行“运行作为管理员“)。我想只在安装特定软件包的情况下重新启动。
我看到我可以有条件地执行win_reboot模块(应用Windows更新后重启的示例):
# Apply updates and reboot if necessary
- win_updates:
register: update_result
- win_reboot:
when: update_result.reboot_required
但是,我想只在安装了特定的软件包时才这样做。理想情况下,它会是这样的:
- win_chocolatey: git
register: git_result
- win_reboot:
when: git_result.reboot_required
但是,我没有看到win_chocolatey返回任何值(并且它可能不知道它需要重新启动)。对于git,它适用于admin cmd,但不适用于标准cmd。重启后,它可以从标准cmd开始工作。
有什么建议吗?我对Ansible相对较新,所以任何建议都会受到赞赏。
答案 0 :(得分:1)
win_chocolatey返回一个代码。我将响应注册为install_response,并使用以下代码有条件地重新引导。 Command,rc和stdout是模块提供的返回值。
- name: Install a package
win_chocolatey:
name: "PackageName"
state: present
register: install_response
- win_reboot:
when: install_response.changed == true and install_response.rc == 3010
答案 1 :(得分:0)
不幸的是,win_chocolatey没有要检查的返回值。
您可以使用win_command模块并检查git.exe是否应该在何处。
像这样:
如果路径存在,Test-Path将返回“True”
-name: Check git install
win_command: Test-Path C:\git\location\git.exe
register: git_loc
-name: reboot if git installed
win_reboot:
when: git_loc.stdout == "True"
显然这有一个问题,一旦安装了git,每次运行playbook时,机器都会重启。您可以添加一些指示初始运行的其他监护变量。
-name: reboot if git installed
win_reboot:
when:
- git_loc.stdout == "True"
- inital_run == "yes"
答案 2 :(得分:0)
请尝试使用win_package,它的返回值为“ reboot_required”
- name: Install git
win_package:
path: C:\temp\git.exe
register: result
- win_reboot:
when: result.reboot_required