Ansible任务when条件配置报错:正则语法错误及需求实现求助
问题解决:Ansible条件判断正则语法错误
报错原因
你写的regex_search("*app02")存在正则语法错误:正则表达式中*是重复量词,必须跟在具体字符/表达式后面(比如a*表示匹配0个或多个a),直接以*开头会让正则引擎无法解析,导致"nothing to repeat"错误。
两种可行解决方案
你的需求是判断字符串是否包含"app02",可以用以下两种方式实现:
方案1:修复正则表达式
直接用目标子串作为正则匹配项(regex_search默认会查找字符串中任意位置的子串),也可以明确写出通配符(.匹配任意字符,*表示匹配0次或多次):
- name: Performing managed server shell: "cd {{ dest }}; {{ dest }}/script_app.sh {{ src_pwd }} {{ src_wls }}" when: - target_clone in ['003', '004'] # 简化写法,功能与原条件一致 - tgt_secondary_servers | regex_search("app02") # 直接匹配子串 # 或者写成更明确的通配形式: # - tgt_secondary_servers | regex_search(".*app02.*")
方案2:用字符串包含判断(更直观)
不需要正则,直接用Ansible的in操作符判断字符串包含关系,代码更易读:
- name: Performing managed server shell: "cd {{ dest }}; {{ dest }}/script_app.sh {{ src_pwd }} {{ src_wls }}" when: - target_clone in ['003', '004'] - 'app02' in tgt_secondary_servers
补充说明
- 你的变量定义部分无需修改,保持原样即可:
vars: src_wls: "{{ source_database.src_wls_password }}" src_pwd: "{{ source_database.src_password }}" tgt_secondary_servers: "{{ inventory_hostname }}"
内容的提问来源于stack exchange,提问作者AUser
相关产品推荐
相关产品推荐

