Post Json 到 API 通过 Ansible
Post Json to API via Ansible
我想通过 Ansible 向 API 端点发出 POST 请求,其中 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
你不能在 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 }}"
我在下面发布了我最终用于我的用例 (Ansible 2.0) 的内容。如果您的 json 负载是内联声明的(而不是在文件中),这将很有用。
此任务期望 204 作为其成功return 代码。
并且由于 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":".*"}'
我想通过 Ansible 向 API 端点发出 POST 请求,其中 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
你不能在 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 }}"
我在下面发布了我最终用于我的用例 (Ansible 2.0) 的内容。如果您的 json 负载是内联声明的(而不是在文件中),这将很有用。
此任务期望 204 作为其成功return 代码。
并且由于 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":".*"}'