我有以下代码 -
- 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"
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是当我尝试运行它时,我收到此错误 -
An unknown error occurred: sendall() argument 1 must be string or buffer, not dict"
Run Code Online (Sandbox Code Playgroud)
有没有办法将我传递给它的变量设置为ansible计划中的字符串?使用=而不是:传递值时不会解决问题.
如果您有基于JSON的API,那么从ansible 2.0开始,您可以body_format: json在uri模块上使用参数,并实际提供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"
Run Code Online (Sandbox Code Playgroud)
这将例如发送
{"name":"data_settings"}
Run Code Online (Sandbox Code Playgroud)
作为身体
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |