You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:06:56