Ansible中set_fact配合json_query赋值结果异常问题咨询
问题根因
- 核心冲突:你使用了Ansible的内置保留变量名
groups,该变量是Ansible默认用来存储Inventory中所有主机组信息的,自定义赋值会和内置变量冲突,所以最终输出的是内置的主机组内容,而非你预期的ConfigMap数据。 - 笔误问题:你通过
k8s_info注册的变量名为groupsvalue,但后续json_query调用时错误使用了不存在的变量vals,需要同步修正。 - 结构问题:
resources[*].data返回的是列表结构,你需要的内容在列表第一个元素中,需要额外取出。
解决方案
修改变量名为非保留名,同时调整取值逻辑即可,修改后的playbook参考:
--- - hosts: localhost vars: ansible_python_interpreter: /usr/bin/python3 tasks: - name: Fetch groups k8s_info: api_version: v1 kind: ConfigMap name: groups namespace: default verify_ssl: no register: groupsvalue - debug: msg: "{{ groupsvalue | json_query('resources[*].data') }}" # 替换变量名,同时取出列表中第一个元素的data值 - set_fact: ldap_groups: "{{ groupsvalue | json_query('resources[0].data') }}" - debug: msg: "{{ ldap_groups }}"
输出效果
运行后最后一个debug的输出就是你期望的结果:
{ "msg": { "groups.txt": "CN=foo1,OU=Groups,OU=.Common,DC=local\nCN=bar1,OU=Groups,OU=.Common,DC=local\n" } }
内容的提问来源于stack exchange,提问作者smc
相关产品推荐
相关产品推荐

