#json #ansible
#json #ансибль
Вопрос:
Я пытаюсь проанализировать json с помощью ansible, чтобы затем отправить его обратно в API с помощью команды curl. Я думаю, что 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 будет разное количество подэлементов, и это необходимо обработать,
Идея в этом случае
элемент.0 — элемент deploy-account
.1 — [{«роль»: «роли /iam.serviceAccountTokenCreator»,»участники»: [ «group:group1@google.com «,»group:group2@google.com «]
следующий
элемент цикла.0 —
элемент data_account.1 — [{«роль»: «роли/iam.serviceAccountTokenCreator»,»участники»: [«group:group1@google.com «]},{«роль»: «роли/iam.serviceAccountKeyAdmin»,»участники»: [«group:group1@google.com «]
Однако, как я уже говорил выше, проблема, с которой я сталкиваюсь при запуске этого, заключается в том, что если учетной записи назначены 2 роли, она дважды выполняет цикл и перезаписывает первую роль, есть ли лучший способ доступа к json вместо моего запроса? И является ли with_together лучшим способом?
Ответ №1:
В итоге я использовал with_dict, поскольку ему просто нужны были ключи и значения, и он работал
loop: "{{ lookup('dict', access_auths) }}"