You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正Ansible正则提取vault_sealed布尔值为正确true?

问题原因及修复方案

问题根源

你的正则匹配返回的是列表类型(例如['true']),但你直接将其与字符串'true'做相等比较,两者类型不匹配,因此判断结果为False。另外,表达式末尾多余的空格会导致最终结果带空格(比如"False "),这也是需要修正的细节。

修复方案

方案一:修正正则匹配结果的类型判断

调整set_fact的表达式,从匹配到的列表中取出第一个元素再做比较,同时去掉末尾空格:

- ansible.builtin.set_fact:
    vault_sealed: "{{ (vault_status.stdout | regex_search(regexp, '\\1') | first) == 'true' }}"
  vars:
    regexp: "Sealed\\s+(.+)\\n"

或者直接通过索引取值:

- ansible.builtin.set_fact:
    vault_sealed: "{{ (vault_status.stdout | regex_search(regexp, '\\1'))[0] == 'true' }}"
  vars:
    regexp: "Sealed\\s+(.+)\\n"

方案二:简化正则匹配逻辑

不用捕获组,直接匹配Sealed行并提取值:

- ansible.builtin.set_fact:
    vault_sealed: "{{ vault_status.stdout | regex_search('Sealed\\s+(true|false)') | split() | last == 'true' }}"

方案三:直接解析键值行(推荐)

利用stdout_lines筛选Sealed开头的行,拆分后取对应值,这种方式更稳定,不受换行或空格数量影响:

- ansible.builtin.set_fact:
    vault_sealed: "{{ (vault_status.stdout_lines | select('match', '^Sealed') | first).split() | last == 'true' }}"

验证效果

修改后,当stdout中Sealed的值为true时,vault_sealed会被正确设置为布尔值True;反之则为False,且不会带有多余空格。

内容的提问来源于stack exchange,提问作者Wurzelseppi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:50:23