从PowerShell输出到Ansible以在Ansible条件/控制播放执行中使用

时间:2016-08-12 17:26:22

标签: powershell ansible ansible-playbook

我通过调用PowerShell脚本在Windows主机上使用Ansible。它工作得很好,但是我的Playbook中有一个要求只根据条件运行播放(使用Ansible When)。

我面临的挑战是如何从PowerShell输出到Ansible。作为一个用例,让我们假设我有两个游戏。第一个播放调用脚本来检查PowerShell版本号,第二个播放只应在PowerShell版本为5.0时运行。

如果可能的话,我怎么能从第一个播放的PowerShell脚本输出一个变量回到Ansible,它可以在第二次播放时用于允许或阻止执行?

1 个答案:

答案 0 :(得分:3)

对于这种特定情况,您可能只想使用ansible_powershell_version事实,例如:

- name: do PS5-only thing
  raw: Run-SomePS5Thing
  when: ansible_powershell_version >= 5

但一般来说,要捕获var中的内容并在以后使用它,您可以在命令任务上使用register:关键字与下游任务的过滤器一起使用,以获取所需的值,例如:

  # Filters can deal with text too, but since it's Powershell, 
  # let's use structured data- ConvertTo-Json gives us something Ansible
  # can read with the from_json filter
  - raw: Get-NetRoute 0.0.0.0/0 | ConvertTo-Json -depth 1
    register: routeout

  # use from_json to read the stdout from raw and convert to a dictionary 
  # we can pull values from
  - debug: msg="Default gateway is {{ (routeout.stdout | from_json).NextHop }}"

  # or do something conditionally:
  - debug: msg="Default gateway isn't what we expected!"
    when: (routeout.stdout | from_json).NextHop != "192.168.1.1"