如何解析Ansible URI模块GET请求结果?Gerrit API数据过滤
解决Gerrit API返回数据在Ansible中的解析问题
问题根源
Gerrit的REST API为防止JSON劫持,返回内容开头会带有特定前缀)]}'\n,你当前获取的data.content是包含该前缀的字符串,并非解析后的JSON数组,因此无法直接用data.content[0].comment访问元素。
解决步骤
需先清理内容前缀,再将字符串解析为JSON格式,具体操作如下:
1. 处理返回数据
添加set_fact任务完成前缀清理与JSON解析:
- name: Get all the SSH public key from gerrit server ansible.builtin.uri: url: 'https://git.test.com/r/a/accounts/self/sshkeys' user: <username> password: <password> method: GET return_content: true force_basic_auth: yes # 确保基本认证生效 register: data - name: Process Gerrit SSH keys data set_fact: ssh_keys: "{{ data.content | regex_replace('^\\)]}\'\\n', '') | from_json }}"
2. 访问过滤数据
处理后ssh_keys为标准JSON数组,可直接通过索引或循环访问元素:
- name: Print first SSH key's comment debug: var: ssh_keys[0].comment - name: Loop through all SSH keys and print comments debug: msg: "Key {{ item.seq }} comment: {{ item.comment }}" loop: "{{ ssh_keys }}"
说明
regex_replace('^\\)]}\'\\n', ''):精确匹配并移除Gerrit返回开头的防劫持前缀from_json:将清理后的字符串转换为Ansible可识别的JSON数组/对象force_basic_auth: yes:确保Ansible向Gerrit发送正确的基本认证请求,避免权限或认证问题
内容的提问来源于stack exchange,提问作者user_dev
相关产品推荐
相关产品推荐

