我有以下代码 -
- name: Create a repo
uri:
url: http://mystash.com/stash/rest/api/1.0/projects/PROJECT/repos/
method: POST
body: '{"name":"{{ somevar }}_settings"}'
force_basic_auth: yes
status_code: 201
headers:
Content-Type: "application/json"
Authorization: "Basic bm90bXlwYXNzd29yZA==="
Accept: "application/json"
我遇到的问题是当我尝试运行时,我收到此错误 -
An unknown error occurred: sendall() argument 1 must be string or buffer, not dict"
有没有办法将我传递给它的变量设置为ansible计划中的字符串?使用=而不是:在传递值时不会解决问题。
答案 0 :(得分:6)
如果您有基于JSON的API,那么从ansible 2.0开始,您可以在uri模块上使用body_format: json
参数,并实际提供YAML格式的主体,并让ansible将其转换为JSON。
这样做不仅更好,而且您更不容易出现替代问题:
- hosts: localhost
vars:
somevar: data
tasks:
- name: Create a repo
uri:
url: http://mystash.com/stash/rest/api/1.0/projects/PROJECT/repos/
method: POST
body_format: json
body:
name: "{{ somevar }}_settings"
force_basic_auth: yes
status_code: 201
headers:
Content-Type: "application/json"
Authorization: "Basic bm90bXlwYXNzd29yZA==="
Accept: "application/json"
这将例如发送
{"name":"data_settings"}
作为身体