>我正在尝试编写一个 Ansible 任务,该任务执行 Powershell 命令以检索 Windows 7 Remote 机器上 C 驱动器的磁盘可用空间,然后执行简单的输出到打印屏幕。我未能提取必要的信息。
我试图通过rawcsize元素将rawcsize.stdout[0]替换为rawcsize.stdout[1]或rawcsize.stdout[2]
剧本按以下方式组成:
- name: Retrieve Disk Usage
win_shell: 'Get-PSDrive C | Select-Object Free'
register: rawcsize
# # Convert disk size in Gigabytes
- name: Convert system disk into various formats and export
vars:
disk_out_free: '{{ rawcsize.stdout[0] }}'
disk_int: '{{ rawcsize.stdout | int }}'
disk_gb: '{{ disk_int | int}}'
debug:
msg: 'rawcsize.stdout: {{(rawcsize.stdout)}} disk_out_free: {{(disk_out_free)}} disk_int: {{(disk_int)}} disk_gb: {{(disk_gb)}}'
输出如下:
确定: [192.168.122.3] => {}
.MSG:
rawcsize.stdout: 自由 ---- 35229712384
disk_int:0 disk_gb:0
因此,变量"disk_out_free"是不可见的。为什么会这样?如何仅从Powershell输出中提取必要的信息?
使用ConvertTo-Json
cmdlet,可以从 PowerShell 输出 json,然后使用from_json
Jinja2 筛选器读取它。
- name: get disk free space
win_shell: Get-PsDrive c | ConvertTo-Json
register: output
- name: extract free space
set_fact:
free_json: "{{ output.stdout|from_json}}"
- name:
debug:
var: free_json.Free
生产:
TASK [Gathering Facts] **************************************************************************************
ok: [host.example.com]
TASK [get disk free space] **************************************************************************************
changed: [host.example.com]
TASK [extract free space] **************************************************************************************
ok: [host.example.com]
TASK [debug] **************************************************************************************
ok: [host.example.com] => {
"free_json.Free": "18444869632"
}
PLAY RECAP *************************************************************************************
host.example.com : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0