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
相关产品推荐
相关产品推荐

