k8s_facts模块无输出及变量未定义问题求助
解决Ansible k8s_facts模块返回“VARIABLE IS NOT DEFINED!”的问题
嗨,我一眼就发现问题所在啦!你遇到的「VARIABLE IS NOT DEFINED!」错误,是因为你用错了k8s_facts模块的返回字段。
问题根源
stdout_lines 是执行命令类模块(比如 command、shell)才会返回的属性,用来存储命令输出的行内容。但 k8s_facts 是专门用于查询Kubernetes资源的模块,它的返回结构完全不同——获取到的Pod/Node数据会存在你注册变量的 resources 列表里,根本没有 stdout_lines 这个字段,自然会提示变量未定义。
修正后的剧本片段
把你的debug任务改成调用 resources 字段就行:
- name: "Get a list of all pods from any namespace" k8s_facts: kind: Pod kubeconfig: $WORKSPACE verify_ssl: no register: pod_list - debug: var: pod_list.resources # 替换为正确的返回字段 - name: "Search for nodeType=gpu" k8s_facts: kubeconfig: $WORKSPACE kind: Node label_selectors: - nodeType=gpu verify_ssl: no register: node_list - debug: var: node_list.resources # 替换为正确的返回字段
优化输出(可选)
如果觉得直接输出resources太冗长,你可以用json_query或者循环提取关键信息,比如只显示Pod名称和命名空间:
- debug: msg: "Pod: {{ item.metadata.name }} | Namespace: {{ item.metadata.namespace }}" loop: "{{ pod_list.resources }}"
这样就能得到和手动执行kubectl get pods -A类似的清晰输出啦。
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

