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

Ansible循环检查AWS快照状态时JSON结构查询失败求助

问题:Ansible循环检查AWS快照状态失败

问题场景

编写了Ansible任务循环检查多个AWS快照是否完成,但执行时触发条件判断错误。

任务代码

- name: Volume Snapshot Statuses
  ec2_snapshot_info:
    aws_access_key: "{{ aws_access_key_id }}"
    aws_secret_key: "{{ aws_secret_key_id }}"
    security_token: "{{ aws_security_token }}"
    region: "{{ aws_region }}"
    snapshot_ids: "{{ item.snapshot_id }}"
  register: snapshots
  loop_control: 
    index_var: loopidx
  until: snapshots.results[loopidx].snapshots[0].state == "completed"
  with_items: "{{ volumesnapshots.results }}"

错误信息

{
  "msg": "The conditional check 'snapshots.results[loopidx].snapshots[0].state == \"completed\"' failed. The error was: error while evaluating conditional (snapshots.results[loopidx].snapshots[0].state == \"completed\"): 'dict object' has no attribute 'results'",
  "_ansible_no_log": false
}

用户观察

查看任务返回的JSON结构,发现snapshots包含results属性,截取内容如下:

{
  "snapshots": {
    "results": [
      {
        "snapshots": [
          {

问题原因

核心错误是对循环中register变量的结构理解偏差:

  • 当使用loop/with_items并搭配register时,results属性是整个循环执行完成后才会生成的数组,用于存储所有迭代的结果。
  • 而until条件是在每次循环迭代的重试过程中执行判断,此时register的snapshots仅存储当前单轮ec2_snapshot_info任务的执行结果(单个字典结构),还未生成results数组。

解决方法

修改until条件,直接引用当前迭代的任务结果,同时添加重试次数和间隔参数避免无限循环:

- name: Volume Snapshot Statuses
  ec2_snapshot_info:
    aws_access_key: "{{ aws_access_key_id }}"
    aws_secret_key: "{{ aws_secret_key_id }}"
    security_token: "{{ aws_security_token }}"
    region: "{{ aws_region }}"
    snapshot_ids: "{{ item.snapshot_id }}"
  register: snapshots
  loop_control: 
    index_var: loopidx
  until: snapshots.snapshots[0].state == "completed"
  retries: 10  # 根据快照创建速度调整重试次数
  delay: 30     # 每次重试间隔30秒
  with_items: "{{ volumesnapshots.results }}"

说明

每次until重试时,snapshots存储的是当前单次ec2_snapshot_info的返回结果,直接访问snapshots.snapshots[0].state即可获取目标快照的实时状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:20:32