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

Ansible regex_search在raw模块执行失败,core关联exe归档任务报错

问题原因
  • 引号转义规则冲突:你在raw模块的命令字符串中使用了\"对正则表达式的双引号做转义,但Ansible解析YAML和Jinja2模板的过程中,这种未被外层引号包裹的转义符会被Jinja2识别为非法字符,直接触发语法错误。debug任务能正常执行是因为debug的msg参数值整体被双引号包裹,YAML会先处理掉转义符再交给Jinja2解析,而raw模块的命令没有外层统一引号包裹,转义符直接暴露给了Jinja2解析器。
  • 额外隐患:你find命令的-name参数后直接跟变量,没有加引号包裹,后续如果匹配到带空格的进程名会直接执行失败。
解决方案

修改Adding the exe to the archive...任务的写法,用嵌套引号避免转义,同时补全命令的引号规则,两种可选写法:

写法1:直接修改原正则的引号嵌套

- name: Adding the exe to the archive...
  raw: find /home/user/test -name '{{ item | regex_search(''(?<='')(.*?)(?='')'') }}' -type f -mtime -{{days}} -exec tar -rvf /tmp/{{ inventory_hostname }}.logs.tar "{}" \;
  loop: "{{ ExeFileList.results[0]['stdout_lines'] }}"

说明:正则外层用单引号包裹,正则内的单引号用两个单引号做YAML的单引号转义,同时-name后的匹配值用单引号包裹,避免空格问题。

写法2(更推荐,可读性更高):提前提取进程名到变量

- name: Adding the exe to the archive...
  raw: find /home/user/test -name '{{ exe_name }}' -type f -mtime -{{days}} -exec tar -rvf /tmp/{{ inventory_hostname }}.logs.tar "{}" \;
  loop: "{{ ExeFileList.results[0]['stdout_lines'] }}"
  vars:
    exe_name: "{{ item | regex_search(\"(?<=')(.*?)(?=')\") }}"

说明:把正则提取逻辑放到任务级vars里,规避了命令行内嵌套复杂Jinja2逻辑的转义问题,后续排查也更方便。

内容的提问来源于stack exchange,提问作者Fra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:02