我需要使用curl解析名为keys_base64的JSON属性。我只能选择使用Ansible的原始模块完成此操作。这是因为网络相关的问题。我尝试了很多不同的方法,但我迷失了。我怎样才能让它发挥作用?
更新:找到答案
原帖
** JSON Keys示例对象**
-3
** unseal.json **
ggplot()+ geom_line(data = samplemelt, aes(Month, value, colour=Methods), size=1)+
geom_point(data = SampleData, aes(day, data))
** Playbook **
{"keys":["tony_01","tony_02","tony_03"],"keys_base64":
["dG9ueV8wMQ==","dG9ueV8wMg==","dG9ueV8wMw=="],"root_token":"6c03bbce-eb8a-0af0-4e37-77e3a647d41d"}
playbook变量" vault_ocs_unseal_keys"包含JSON对象。
** Playbook Output **
{ "key": {{ item }} }
}
- name: "Unseal Vault OCS"
remote_user: Tony
raw: curl -k -d@"{{ lookup('template','templates/unseal.json') }} https://{{ vault_ocs_pod_ip }}:8200/v1/sys/unseal"
delegate_to: 10.x.x.10
with_items: "{{ (vault_ocs_unseal_keys.stdout | from_json)['keys_base64'] }}"
register: vault_ocs_unseal_result
答案 0 :(得分:0)
我在这项任务中发现了两个问题:
在curl中,@用于读取文件。当您在Ansible中使用查找功能时,您将在该命令中插入内容,而无需读取文件。
双引号应限制JSON数据,不包括URL
这是适合我的代码。对我来说可能不一样,因为我对JSON数据进行了硬编码:
- name: "Unseal Vault OCS"
raw: curl -k -d "{{ lookup('template','unseal.json') }}" https://10.x.x.10/v1/sys/unseal
with_items:
- {"keys":["tony_01","tony_02","tony_03"],"keys_base64": ["dG9ueV8wMQ==","dG9ueV8wMg==","dG9ueV8wMw=="],"root_token":"6c03bbce-eb8a-0af0-4e37-77e3a647d41d"}
register: vault_ocs_unseal_result
答案 1 :(得分:0)
这对我有用。使用不带@的curl命令,如上所述它用于读取文件。我使用了run_once。查找插件执行循环。它需要keys_base64属性中的键才能应用API调用的每个键。太好了!
****工作代码****
- name: "Unseal Vault OCS"
remote_user: tony
raw: "curl -k -d '{{ lookup('template','unseal.json') | to_json }}' https://10.x.x.1:8200/v1/sys/unseal"
with_items: "{{ (vault_ocs_unseal_keys.stdout | from_json)['keys_base64'] | list }}"
delegate_to: 10.x.x.2
run_once: true
register: vault_ocs_unseal_keys_result