【发布时间】:2020-12-09 19:28:03
【问题描述】:
我正在尝试使用 ansible 解析 json,因此我可以使用 curl 命令将其发布回 API。我认为 with_together 可能是最好的方法,但我似乎无法为它找到正确的 json 路径,即使它是非常简单的 json。所以json就在这里-
{
"deploy-account": [{
"role": "roles/iam.serviceAccountTokenCreator",
"members": [
"group:group1@google.com",
"group:group2@google.com"
]
}
],
"data_account": [{
"role": "roles/iam.serviceAccountTokenCreator",
"members": [
"group:group1@google.com"
]
},
{
"role": "roles/iam.serviceAccountKeyAdmin",
"members": [
"group:group1@google.com"
]
}
],
"dataproc_account": [{
"role": "roles/iam.serviceAccountTokenCreator",
"members": [
"group:group1@google.com"
]
},
{
"role": "roles/iam.serviceAccountKeyAdmin",
"members": [
"group:group3@google.com"
]
}
]
}
想法是将账户名作为一项,然后将该账户名下的所有内容(无论有多少角色或组)添加到第二项中以推送到 API。但是当我循环它时,它只从每个帐户中获取一个角色并应用它,所以我的循环一定不正确,但我不知道如何。 yml是这样的
tasks:
- name: access fact
set_fact:
access_auths: "{{ lookup('file', 'stack.json') }}"
- name: Curl
uri:
url: "https://google.com/{{ item.0 }}"
body:
policy:
bindings: "{{ item.1 }}"
body_format: json
method: POST
headers:
Content-Type: "application/json"
with_together:
- "{{ access_auths }}"
- "{{ access_auths | json_query ('*') }}"
所以最终目标是会有许多 json 文件,具有不同数量的帐户,并且 json 将具有不同数量的子元素,它需要处理, 在这种情况下的想法是
item.0 - 部署帐户
item.1 - [{"role": "roles/iam.serviceAccountTokenCreator","members": [ "group:group1@google.com","group:group2@google.com"]
下一个循环
item.0 - 数据帐户
item.1 - [{"role": "roles/iam.serviceAccountTokenCreator","members": ["group:group1@google.com"]},{"role": "roles/iam.serviceAccountKeyAdmin","members ": ["group:group1@google.com"]
正如我上面所说,当我运行它时遇到的问题是,如果一个帐户分配了 2 个角色,它会循环那个角色两次并覆盖第一个角色,有没有更好的方法来访问 json 而不是我的查询? with_together 是最好的方法吗?
【问题讨论】: