Ansible正则匹配变量前缀定义新变量及条件报错排查
报错根因
两个错误导致执行失败:
when条件处于Ansible原生Jinja2解析环境,不需要额外加{{ }}包裹表达式,添加后会触发模板解析错误。- 匹配关键字写错:需求是判断
database/前缀,代码里写的匹配值是release/,就算语法正确也无法命中目标分支。
正确配置
判断字符串前缀用原生startswith方法比正则更简洁高效,不会出现正则转义问题:
tasks: - name: Extract Version Number ansible.builtin.set_fact: version: "V{{ branch.split('/')[1] }}" when: branch.startswith('database/')
可选正则写法
如果需要用正则实现匹配,去掉when后的双大括号即可,建议在匹配规则前加^限定匹配字符串开头,避免分支名中间包含database/时误判:
when: branch | regex_search('^database/')
执行示例命令ansible-playbook ./test.yml -e "branch=database/1.3.4"时,最终version变量会被正确赋值为V1.3.4,符合预期。
内容的提问来源于stack exchange,提问作者ITnewbie
相关产品推荐
相关产品推荐

