json - Jinja 通过 Ansible URI 模块模板化 Json GraphQL 查询
问题描述
我正在尝试使用 ansible uri 模块通过他们的API查询 AuditLog Github 提供的内容,并且难以在 ansible 中围绕 JSON 格式进行思考。
所以我有这个工作的 GraphQL 查询,但我想将“created:”查询转换为我可以每天/每小时更改的变量。
organization(login: "my_org_here") {
auditLog(last: 100, query: "created:>=2019-07-22") {
edges {
node {
... on AuditEntry {
action
actorLogin
}
}
}
}
}
}
但我无法理解如何以 ansible yaml 格式编写它。这是我尝试过的:
uri:
url: https://api.github.com/graphql
headers:
Authorization: 'Bearer MY_TOKEN_HERE'
Accept: 'application/vnd.github.audit-log-preview+json'
method: POST
body: " {{ lookup('template','files/auditlog.json.j2') }}"
body_format: json
auditlog.json.j2 的内容:
query:
organization:
login: my_org_here
auditlog:
last: 100
query: {{ query_variable }}
本质上,我希望能够真正逐项拆分整个 GraphQL 查询并参数化每个组件。但我一直试图通过 ansible 重新创建 GraphQL JSON。这是一个有效的 JSON 示例(在我希望获得的详细信息中包含更多字段):
"query": "{\n organization(login: \"my_org_here\") {\n auditLog(last: 100, query: \"created:>=2019-07-20\") {\n edges {\n node {\n ... on AuditEntry {\n action\n actorLogin\n \n createdAt\n actorIp\n userLogin\n user {\n name\n email\n }\n }\n }\n }\n }\n }\n}\n"
解决方案
GitHub GraphQL 查询请求的主体是一个带有query
键的 JSON 对象,其值为字符串形式的 GraphQL 查询。query
在您的示例中,您缺少的是body
. 以这个任务为例:
- name: Get data from Github
uri:
url: https://api.github.com/graphql
method: POST
headers:
Authorization: 'bearer {{ github_token }}'
body_format: json
body:
query: '{{ lookup("template", "./templates/github_query.graphql") }}'
./templates/github_query.graphql
我的文件在哪里:
query {
repository(owner:"{{ owner }}", name:"{{ repository_name }}") {
issues(last:{{ last_issues }}, states:{{ states }}) {
edges {
node {
title
url
labels(first:{{ labels_count }}) {
edges {
node {
name
}
}
}
}
}
}
}
}
我可以通过修改 、 和 变量来修改查询owner
的repository_name
工作方式last_issues
。labels_count
推荐阅读
- python - 在 FastAPI 应用程序中处理有条件要求的参数的最佳方法是什么?
- xml - 通过 XPATH 读取 XML 路径的动态条件
- here-api - 如果仅使用边界,ViewModel.setLookAtData() 不会动画
- vim - ideavim如何结合两个动作
- python-3.x - 定期从 Arduino 读取变量到 python
- javascript - v-list-item-group 一次全选/取消全选
- laravel - Laravel Blade 使用 VueJS 在表格内渲染表格
- git - 如果我从一个分支中删除一个文件并对具有该文件的目标分支进行 PR,它是否也会从目标分支中删除该文件?
- javascript - 为什么anime.js在vuejs中点击不起作用?
- javascript - 如何在javascript中将未定义的数组转换为数组字符串