【问题标题】:Post Json to API via Ansible通过 Ansible 将 Json 发布到 API
【发布时间】:2015-05-28 14:10:40
【问题描述】:

我想通过 Ansible 向 API 端点发出 POST 请求,其中发布数据中的某些项目是动态的,这是我尝试但失败的方法:

我的 body_content.json:

{
  apiKey: '{{ KEY_FROM_VARS }}',
  data1: 'foo',
  data2: 'bar'
}

这是我的 Ansible 任务:


# Create an item via API
- uri: url="http://www.myapi.com/create"
       method=POST return_content=yes HEADER_Content-Type="application/json"
       body="{{ lookup('file','create_body.json') | to_json }}"

很遗憾这不起作用:

failed: [localhost] => {"failed": true}
msg: this module requires key=value arguments
....
FATAL: all hosts have already failed -- aborting

我的 ansible 版本是 1.9.1

【问题讨论】:

    标签: ansible ansible-playbook


    【解决方案1】:

    您不能在 yaml 中使用这样的换行符。试试这个(“>”表示要连接下一行):

    # Create an item via API
    - uri: >
        url="http://www.myapi.com/create"
        method=POST return_content=yes HEADER_Content-Type="application/json"
        body="{{ lookup('file','create_body.json') | to_json }}"
    

    但我觉得这样好多了:

    # Create an item via API
    - uri: 
        url: "http://www.myapi.com/create"
        method: POST
        return_content: yes
        HEADER_Content-Type: "application/json"
        body: "{{ lookup('file','create_body.json') | to_json }}"
    

    【讨论】:

    • 这对我不起作用。我不得不删除 | to_json 并添加 body_format: json 代替
    【解决方案2】:

    我在下面发布了我最终用于我的用例(Ansible 2.0)的内容。如果您的 json 有效负载是内联的(而不是在文件中),这很有用。

    此任务预计 204 作为其成功返回码。

    而且由于body_format是json,所以会自动推断header

    - name: add user to virtual host
      uri: 
        url: http://0.0.0.0:15672/api/permissions/{{ rabbit_virtualhost }}/{{ rabbit_username }}
        method: PUT
        user: "{{ rabbit_username }}"
        password: "{{ rabbit_password }}"
        return_content: yes
        body: {"configure":".*","write":".*","read":".*"}
        body_format: json
        status_code: 204
    

    基本上相当于:

    curl -i -u user:pass -H "content-type:application/json" -XPUT http://0.0.0.0:15672/api/permissions/my_vhost/my_user -d '{"configure":".*","write":".*","read":".*"}'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2021-10-01
      • 2015-09-06
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多