Ansible新手求助:如何从postgresql_query注册结果提取query_result?
解决Ansible提取postgresql_query结果时的变量未定义错误
问题核心
报错'list object' has no attribute 'query_result'说明你注册的query_X_results是列表类型,而非你预期的字典。你看到的query_result字段是列表中元素的属性,不是列表本身的属性,直接用query_X_results.query_result自然会触发错误。
常见原因
注册变量变成列表的典型场景:
- 任务在多台目标主机上执行,Ansible会收集所有主机的执行结果合并为列表
- 任务使用了
loop/with_*循环,注册变量会收集每次循环的结果形成列表
解决方案
针对单主机/单循环的场景,直接取列表的第一个元素(索引[0]),再提取query_result即可:
方法1:使用点语法
- name: 提取并保存query_result为fact set_fact: query_X_results: "{{ query_X_results[0].query_result }}"
方法2:使用键索引语法
- name: 提取并保存query_result为fact set_fact: query_X_results: "{{ query_X_results[0]['query_result'] }}"
验证建议
如果不确定变量结构,先执行debug任务确认层级:
- name: 查看query_X_results的完整结构 debug: var: query_X_results
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

