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

Ansible如何解析循环注册的变量 提取Harbor接口返回的Docker镜像标签

提取方法说明

循环注册的images变量顶层的results字段存储了所有循环请求的返回结果,每个子元素对应一次repo_list的遍历执行结果,包含两个核心字段:

  • item:当前循环的仓库名(即你需要的myimage/myotherimage)
  • json:当前仓库的接口返回内容,包含镜像的tags数组

方案1:输出按仓库分组的标签列表(推荐)

直接使用json_query一步生成结构化数据,结构为[{仓库名: [标签1, 标签2...]}, ...],方便后续按仓库维度处理:

- name: 按仓库分组提取所有镜像标签
  set_fact:
    repo_image_tags: "{{ images.results | json_query('[].{repo: item, tags: json[].tags[].name}') }}"

执行后输出示例:

[
  {
    "repo": "myimage",
    "tags": ["MYTAG_ELASTICSEARCH", "v2.1.0"]
  },
  {
    "repo": "myotherimage",
    "tags": ["v1.0.0", "latest"]
  }
]

提示:如果执行json_query时报错,需要先在Ansible控制节点安装依赖:pip install jmespath


方案2:输出平铺的完整镜像路径列表

如果需要直接用于后续的docker pull操作,可以直接生成仓库:标签格式的平铺列表:

- name: 生成平铺的完整镜像列表
  set_fact:
    all_image_paths: >-
      {{
        all_image_paths | default([]) +
        [item.0.item ~ ':' ~ item.1]
      }}
  loop: "{{ images.results | subelements('json[].tags[].name', skip_missing=True) }}"
  loop_control:
    label: "{{ item.0.item }}"

执行后输出示例:

["myimage:MYTAG_ELASTICSEARCH", "myimage:v2.1.0", "myotherimage:v1.0.0", "myotherimage:latest"]

注意事项

  • 对于没有任何镜像或标签的空仓库,通过skip_missing=True参数可以自动跳过,避免任务执行报错
  • 如果需要生成完整的Harbor拉取地址,只需要在路径前拼接Harbor域名和项目名即可:{{ harbor_url }}/{{ harbor_project }}/{{ 镜像路径 }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:06:02