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

Output from PowerShell to Ansible for Use in Ansible Conditional / Controlling Play Execution

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

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

如果可能的话,我将如何从第一个播放的 PowerShell 脚本输出一个变量返回到 Ansible,该变量可以在第二个播放的时间使用以允许或阻止执行?

对于这种特定情况,您可能只想使用 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"