我正在寻求帮助,以从 ansible playbook 执行的 stdout_lines 中提取或捕获空闲 MB 值,并使用该值作为在 playbook 中进一步进行的标准。
我的任务输出是:
ok: [Host1] => {
"changed": false,
"invocation": {
"module_args": {
"commands": [
"show file systems | inc flash:"
],
"interval": 1,
"match": "all",
"retries": 10,
"wait_for": null
}
},
"stdout": [
"* 1707192 (1.6 GB) 603744 (589.6 MB) flash rw flash:"
],
"stdout_lines": [
[
"* 1707192 (1.6 GB) 603744 (589.6 MB) flash rw flash:"
]
]
}
我尝试过使用
- set_fact:
my_var: "{{ disk_space.stdout_lines | regex_findall('\\b([0-9]{1,4}\\.\\d+)\\s+MB.*flash:$') }}"
但我总是得到一个空的输出:
ok: [Host1] => {
"ansible_facts": {
"my_var": []
},
"changed": false
}
我想从输出中捕获 589.6 值并将其分配给变量以在我的进一步游戏中使用。
最诚挚的问候, 普拉文
仅回答问题的正则表达式部分。
表达方式是这样写的
\\b([0-9]{1,4}\\.\\d+)\\s+MB.*flash:$
并解析为
\b([0-9]{1,4}\.\d+)\s+MB.*flash:$
表示“该行必须以
flash:
结尾,但其结尾类似于 flash:"
”
解决方案很简单 - 在美元符号之前添加字符
\b([0-9]{1,4}\.\d+)\s+MB.*flash:"$
不确定在您的情况下是否应该以任何特定方式转义或编码。