Ansible URI模块和变量出错

J. *_*Doe 1 ansible

我有以下代码 -

- 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计划中的字符串?使用=而不是:传递值时不会解决问题.

Szt*_*upY 6

如果您有基于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)

作为身体