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

如何使用Ansible assert模块遍历嵌套字典校验所有变量是否已定义

Ansible多类型仓库必填变量校验方案

完全可以实现,你只需要先定义好每种仓库类型对应的必填字段映射,再遍历所有仓库匹配对应规则校验即可,具体实现如下:

步骤1:定义各类型仓库必填字段映射

先在变量中声明不同类型仓库需要校验的字段,嵌套字段用点分隔:

repo_required_fields:
  hosted:
    - name
    - online
    - storage.blobStoreName
    - storage.strictContentTypeValidation
    - storage.writePolicy
  proxy:
    - name
    - online
    - storage.blobStoreName
    - storage.strictContentTypeValidation
    - storage.writePolicy
    - proxy.remoteUrl
    - proxy.contentMaxAge
    - proxy.metadataMaxAge
    - negativeCache.enabled
    - negativeCache.timeToLive
    - httpClient.blocked
    - httpClient.autoBlock
  group:
    - name
    - online
    - storage.blobStoreName
    - storage.strictContentTypeValidation
    - storage.writePolicy
    - group.groupMembers

步骤2:编写校验任务

先把所有待校验的仓库和对应必填字段组合展开,再逐一校验:

# 先生成校验清单
- name: 生成仓库字段校验清单
  set_fact:
    check_list: "{{ check_list | default([]) + [
      'repo_type': repo_item.0.key,
      'repo_name': repo_item.1.name,
      'repo_config': repo_item.1,
      'required_field': field
    ] }}"
  loop: "{{ repo_type | dict2items | subelements('value.data') }}"
  loop_control:
    loop_var: repo_item
  vars:
    current_type_fields: "{{ repo_required_fields[repo_item.0.key] }}"
  loop: "{{ current_type_fields }}"
  loop_control:
    loop_var: field

# 执行校验
- name: 校验所有仓库必填字段已定义
  assert:
    that:
      - item.repo_config | json_query(item.required_field) is defined
    fail_msg: "校验失败:{{ item.repo_type }}类型仓库{{ item.repo_name }}缺少必填字段{{ item.required_field }}"
    success_msg: "校验通过:{{ item.repo_type }}类型仓库{{ item.repo_name }}字段{{ item.required_field }}已定义"
  loop: "{{ check_list }}"

注意事项

  • 你给出的示例变量中,proxy类型仓库的timeToLive”用了中文右双引号,实际使用时要改成英文双引号,避免YAML解析报错
  • 如果需要同时校验字段不为空,可以在assert的that数组里新增判断:item.repo_config | json_query(item.required_field) | length > 0
  • 若Ansible版本较低不支持json_query,可将判断条件替换为lookup('vars', 'item.repo_config.' ~ item.required_field) is defined,效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:21:03