在Ansible任务中使用正则从JSON提取token值失败如何解决?
错误原因
- 错误1:直接对列表类型的
token.stdout_lines使用regex_search过滤器,该过滤器默认只会尝试匹配列表的第一个元素(第一个元素是{,不可能命中你写的正则规则),自然返回null - 错误2:
regex_search参数写死了字符串'regexp',没有引用你定义的regexp变量,相当于用字符串regexp去匹配内容,不可能匹配成功 - 错误3:正则表达式规则逻辑错误,对双引号、转义符的捕获规则不符合你拿到的输出结构,无法正确匹配token字段
最优解决方案(推荐,比正则更稳定)
你拿到的token.stdout_lines本质是拼接后可以直接解析的JSON字符串,先拼接再转成JSON对象直接取字段即可,不需要写正则:
- set_fact: myvalue: "{{ (token.stdout_lines | join('') | from_json).token }}" - debug: var: myvalue
正则实现方案(如果你一定要用正则的场景)
先把列表合并为字符串,再用正确的正则捕获:
- set_fact: myvalue: "{{ token.stdout_lines | join('') | regex_search(regexp, '\\1') | first }}" vars: regexp: '"token"\s*:\s*"([^"]+)"' - debug: var: myvalue
内容的提问来源于stack exchange,提问作者Mamoona A
相关产品推荐
相关产品推荐

