Ansible URI模块和变量出错

时间:2017-02-17 23:00:13

标签: 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"

我遇到的问题是当我尝试运行时,我收到此错误 -

 An unknown error occurred: sendall() argument 1 must be string or buffer, not dict"

有没有办法将我传递给它的变量设置为ansible计划中的字符串?使用=而不是:在传递值时不会解决问题。

1 个答案:

答案 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"}

作为身体