2017-02-17 3 views
0

У меня есть следующий код -Ошибка с модулем анзибль URI и переменные

- 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" 

ли есть способ установить переменную, которую я передаю ей как строку внутри допустимого плана? Использование = вместо: при передаче значения в не устраняет проблему.

+1

добавить нулевое значение ваш к вашему JSON, так что Ansible не ошибочно вернет JSON обратно в эту попытку. http://johndstein-blog.logdown.com/posts/277489-ansible-uri-body-bug –

ответ

5

Если у вас есть API на основе JSON, то после использования 2.0 вы можете использовать параметр body_format: json на модуле uri и на самом деле поставлять тело в формате YAML и разрешать его преобразовывать в 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"} 

как тело

Смежные вопросы