Ansible如何在条件语句中检查变量内容存在于另一变量且无Jinja告警
问题原因
触发如下告警的核心原因是Ansible的when条件语句本身默认处于Jinja2解析上下文环境,不需要额外嵌套{{ }}这类模板分隔符来引用变量,嵌套使用属于不符合语法规范的写法。
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}.
正确实现方案
直接将变量B作为参数传入search过滤器即可,不需要加{{ }}、也不需要用引号包裹,即可实现动态子串匹配(不需要全匹配),同时消除告警:
vars: B: 'test-cert' tasks: - name: Collect bigip facts bigip_device_facts: provider: '{{ provider }}' gather_subset: ssl-certs register: ssl_certs - name: debug SSL cert exists debug: msg: "cert-test already exists" when: ssl_certs is search(B)
优化补充
如果变量B的内容可能包含.、*这类正则特殊字符,为了避免被search当成正则规则解析,可以加regex_escape过滤器做转义,匹配结果会更准确:
when: ssl_certs is search(B | regex_escape)
内容的提问来源于stack exchange,提问作者stefan-engel
相关产品推荐
相关产品推荐

