Ansible RAW模块 - Curl和JSON文件(Kubernetes)

时间:2018-05-25 09:59:34

标签: json kubernetes ansible hashicorp-vault ansible-vault

我需要使用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

2 个答案:

答案 0 :(得分:0)

我在这项任务中发现了两个问题:

  1. 在curl中,@用于读取文件。当您在Ansible中使用查找功能时,您将在该命令中插入内容,而无需读取文件。

  2. 双引号应限制JSON数据,不包括URL

  3. 这是适合我的代码。对我来说可能不一样,因为我对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