Ansible v2.10.8中如何检查变量是否包含指定字符串?
Ansible 2.10.8 变量包含字符串判断及取值错误解决
错误1:'development' is undefined 解析错误
你的第一个示例中,报错核心不在when条件,而是set_fact里的字典取值逻辑:
nodejs_version: "{{ nodejs_versions[development] }}"
这里的development未加引号,Ansible会将其当作变量名解析,但你并未定义名为development的变量,因此触发未定义错误。
修复方案:给字典的字符串键添加引号,或者使用点语法取值:
nodejs_version: "{{ nodejs_versions['development'] }}" # 或者更简洁的点语法 nodejs_version: "{{ nodejs_versions.development }}"
此时when: '"development" in branch_name'的写法是正确的,只要branch_name变量存在且包含目标字符串,任务就会执行。
错误2:no filter named 'search' 过滤器不存在
Ansible 2.10.8对应的Jinja2版本没有search过滤器,你需要替换为兼容的写法:
- 若只需简单判断字符串包含,推荐继续使用
in运算符(和错误1的正确条件一致) - 若需要正则匹配,使用
regex_search过滤器:
when: branch_name | regex_search('development')
完整正确示例
- name: Set NodeJS version for development branch set_fact: nodejs_version: "{{ nodejs_versions['development'] }}" when: '"development" in branch_name'
额外注意:确保branch_name变量已正确传入(比如通过ansible-playbook --extra-vars "branch_name=development"或在playbook中定义),否则条件判断会因变量未定义失败。
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

