2017-02-17 44 views
0

我有下面的代碼 -誤差Ansible 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

如果你有一個基於JSON的API,那麼因爲ansible 2.0你可以在uri模塊上使用body_format: json參數,並且實際以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"} 

因爲身體