You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:12:48