Ansible使用正则从配置文件提取账号密码时遇到的问题
问题原因
报错是YAML转义规则导致的:YAML双引号包裹的字符串会优先解析反斜杠转义序列,而正则用到的\s不属于YAML支持的转义序列,所以直接抛出未知转义字符错误。
另外你最初的正则DB_USER(.+)会匹配DB_USER后的全部剩余内容,所以提取结果存在冗余字符。
解决方法
优先选择用YAML单引号包裹正则表达式,单引号内仅连续两个单引号会被解析为单个单引号,其余字符原样保留,不会额外处理转义,可避免转义冲突。
正确的提取配置写法如下:
- set_fact: # 提取用户名 dbuser: "{{ wpconfig.stdout | regex_search('DB_USER[^'']+''([^'']+)''', '\\1') | first }}" # 提取密码 dbpass: "{{ wpconfig.stdout | regex_search('DB_PASSWORD[^'']+''([^'']+)''', '\\1') | first }}"
如果习惯用双引号包裹正则,所有正则里的反斜杠都需要双重转义,比如正则里的\s需要写为\\\\s才能被正则引擎正确识别。
内容的提问来源于stack exchange,提问作者Roberto Jobet
相关产品推荐
相关产品推荐

