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

Ansible操作IBM i获取JOB_NAME失败,报dict对象无元素0求助

问题分析与解决

问题根源

报错dict object has no element 0的核心原因是变量引用路径错误:你注册的job_info是一个字典对象,实际作业列表数据嵌套在该字典的job_info字段(数组类型)中,直接使用job_info[0]会试图从外层字典中取索引为0的元素,完全不符合实际数据结构。

从你提供的第三个任务输出可以明确数据层级:

"job_info": {
    // 任务执行元数据(如执行时间、返回码等)
    "job_info": [
        {"JOB_NAME": "927529/MSRXS/ISYSJOBD"},
        // 其他作业对象
    ]
}

修正方案

方案1:获取第一个作业的名称

修改变量引用路径,先定位到内层的job_info数组,再取第一个元素的JOB_NAME:

- name: Print the first job name
  debug:
     msg: "{{ job_info.job_info[0]['JOB_NAME'] }}"

方案2:批量输出所有作业名称

如果需要输出所有作业的名称,可结合loop循环遍历内层数组:

- name: Print all job names
  debug:
     msg: "{{ item['JOB_NAME'] }}"
  loop: "{{ job_info.job_info }}"

完整修正后的Playbook

---
- hosts: as053a
  gather_facts: false
  collections:
    - ibm.power_ibmi
  vars:
    job_info: ""
  tasks:
    - name: Submit a batch job and run CALL QGPL/PGM1
      ibm.power_ibmi.ibmi_submit_job:
        cmd: DSPPTF OUTPUT(*PRINT)
    - name: Get status of a list of jobs
      ibm.power_ibmi.ibmi_job:
        user: MSRXS
        type: "*BATCH"
      register: job_info
    - name: Debug job info
      debug:
        var: job_info
    # 选择以下其中一种方案即可
    - name: Print the first job name
      debug:
         msg: "{{ job_info.job_info[0]['JOB_NAME'] }}"
    # - name: Print all job names
    #   debug:
    #      msg: "{{ item['JOB_NAME'] }}"
    #   loop: "{{ job_info.job_info }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:14