我通过调用PowerShell脚本在Windows主机上使用Ansible。它工作得很好,但是我的Playbook中有一个要求只根据条件运行播放(使用Ansible When)。
我面临的挑战是如何从PowerShell输出到Ansible。作为一个用例,让我们假设我有两个游戏。第一个播放调用脚本来检查PowerShell版本号,第二个播放只应在PowerShell版本为5.0时运行。
如果可能的话,我怎么能从第一个播放的PowerShell脚本输出一个变量回到Ansible,它可以在第二次播放时用于允许或阻止执行?
答案 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"