我正在寻求帮助,以从 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:"$
不确定在您的情况下是否应该以任何特定方式转义或编码。
以下最小示例手册中显示了另一种可能的方法
---
- name: Cisco 'show file systems'
hosts: localhost
become: false
gather_facts: false
vars:
disk_space:
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:"
tasks:
- name: Show stdout with data cleansing
debug:
msg: "{{ disk_space.stdout | regex_replace(' *', ' ') }}"
- name: Show value of 4th column in KB
debug:
msg: "{{ ( disk_space.stdout | regex_replace(' *', ' ') | split(' ') )[4] }} KB"
- name: Show value of 4th column in MB
debug:
msg: "{{ ( disk_space.stdout | regex_replace(' *', ' ') | split(' ') )[4] | int / 1024 }} MB"
产生
的输出TASK [Show stdout with data cleansing] **********************
ok: [localhost] =>
msg: '* 1707192 (1.6 GB) 603744 (589.6 MB) flash rw flash:'
TASK [Show value of 4th column in KB] ***********************
ok: [localhost] =>
msg: 603744 KB
TASK [Show value of 4th column in MB] ***********************
ok: [localhost] =>
msg: 589.59375 MB
甚至
- name: Show value of 5th column after cleansing
debug:
msg: "{{ ( result.stdout | regex_replace(' *', ' ') | replace('(', '') | replace(')', '') | split(' ') )[5] }}"
结果
TASK [Show value of 5th column] ****************************
ok: [localhost] =>
msg: '589.6'