如何在win_chocolatey安装后重启

时间:2017-05-05 16:00:24

标签: windows ansible

我正在自动配置一些Windows构建代理。我想安装软件包,但是在重启机器之前,命令行上没有一些命令(githg)(奇怪的是,如果我这样做,它们可用于命令行“运行作为管理员“)。我想只在安装特定软件包的情况下重新启动。

我看到我可以有条件地执行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相对较新,所以任何建议都会受到赞赏。

3 个答案:

答案 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