需要从ansible playbook的stdout_lines中提取或捕获值

问题描述 投票:0回答:1

我正在寻求帮助,以从 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 值并将其分配给变量以在我的进一步游戏中使用。

最诚挚的问候, 普拉文

python regex ansible
1个回答
0
投票

仅回答问题的正则表达式部分。

表达方式是这样写的

\\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:"$

不确定在您的情况下是否应该以任何特定方式转义或编码。

© www.soinside.com 2019 - 2024. All rights reserved.