python - 使用 ansible_facts 捕获大小
问题描述
我想滚动浏览这个 ansible_facts 变量的输出,直到找到磁盘大小值 C:\ 使用 ansible 属性选择,有人可以帮助我吗?
似乎字符串中的某些内容正在转义并在搜索中生成错误
退出 ansible_fact:
ok: [192.168.56.103] => {
"ansible_facts.disks": [
{
"bootable": true,
"bus_type": "SATA",
"clustered": false,
"firmware_version": "1.0",
"friendly_name": "VBOX HARDDISK",
"guid": null,
"location": "Integrated : Adapter 0 : Port 0",
"manufacturer": null,
"model": "VBOX HARDDISK",
"number": 0,
"operational_status": "Online",
"partition_count": 2,
"partition_style": "MBR",
"partitions": [
{
"access_paths": [
"C:\\",
"\\\\?\\Volume{e98535da-0000-0000-0000-501f00000000}\\"
],
"active": false,
"drive_letter": "C",
"guid": null,
"hidden": false,
"mbr_type": 7,
"number": 2,
"offset": 525336576,
"shadow_copy": false,
"size": 53160706048,
"transition_state": 1,
"type": "IFS"
}
]
}
我的尝试
test : '{{ ansible_facts.disks | selectattr("partitions.drive_letter", "search", "^C$")| map(attribute="size") | list }}'
输出
"VARIABLE IS NOT DEFINED!"
解决方案
我不知道selectattr
过滤器,但我用一个json_query
:
- set_fact:
c_size: "{{ ansible_facts.disks | json_query( partition_query ) }}"
vars:
partition_query: "[*].partitions[?drive_letter=='C'].size"
- debug:
var: c_size
- debug:
msg: "{{ c_size }}"
给出这个输出:
TASK [debug] *************************************************************
ok: [192.168.124.8] =>
c_size:
- - 53160706048
TASK [debug] *************************************************************
ok: [192.168.124.8] =>
msg: ':[[53160706048]]:'
看起来它仍然是原始列表中嵌入的几个级别,但它就在那里。c_size[0][0]
您可以使用or来摆脱它c_size.0.0
。当然,您可以使用 anotherset_fact
来分配c_size.0.0
给另一个变量。
推荐阅读
- python - 我可以在 Python 的临时工作库中导入/存储数据文件吗?
- c++ - 我尝试使用堆栈和队列解决字符串回文问题,但面临逻辑问题
- debugging - gdb 没有在 NASM 的所有断点处停止
- redirect - 如何将 domain1.com 请求重定向到 IIS 上的 domain1.com/app
- php - 循环数组foreach并为每组添加更多数组值?
- python - Django 无法扩展到另一个应用程序中的模板
- ruby-on-rails-4 - 在引擎上运行`rails generate`时如何修复`undefined method`railtie_namespace'`错误
- sql - 输入月份和年份并获得整个月份日期的输出
- makefile - Makefile 子目录中的几个源
- javascript - 存储用户生成的 HTML 表单和相关提交