从 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"
我通过调用 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"