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

Ansible断言需求:实现script.dest为cron.job的子串匹配

Ansible断言:验证脚本路径是定时任务路径的子串

场景变量

假设我们有以下Ansible变量:

cron_d:
  script:
    - src: xfa.sh.j2
      dest: /opt/xfb_abc.sh
    - src: xfa.sh.j2
      dest: /opt/xfa_abc.sh
  cron:
    - name: agbcc
      job: /opt/xfa_abc.sh
    - name: aaaagbcc
      job: /opt/me.sh

需求

需要确保每个cron_d.script.dest的值至少是一个cron_d.cron.job的子串(即job路径可以包含dest路径内容,dest是job的一部分)。

原有问题

之前的代码仅支持字符串完全匹配,无法实现子串包含的判断:

- name: assert that each script name matches at least once with a job name
  assert:
    that: 
      - "'{{ item.dest }}' in job_list"
  vars:
    job_list: "{{ cron_d.cron | map(attribute='job') | list }}"
  loop: "{{ cron_d.script }}"

解决方案

改用Jinja2的any()过滤器结合子串判断,直接检查每个dest是否被至少一个job路径包含:

- name: Assert each script dest is a substring of at least one cron job
  assert:
    that:
      - "{{ item.dest }} in job for job in cron_d.cron | map(attribute='job') | any"
  loop: "{{ cron_d.script }}"

逻辑说明

  • cron_d.cron | map(attribute='job')先提取所有定时任务的job路径列表
  • {{ item.dest }} in job判断当前遍历的script的dest是否是某个job路径的子串
  • any()会检查列表中是否存在至少一个满足上述条件的job,只要有一个符合就返回True

比如在给定的变量中:

  • /opt/xfa_abc.sh这个dest能匹配到对应job,断言通过
  • /opt/xfb_abc.sh找不到包含它的job,断言会失败,符合校验要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:27:34