2015-05-28 19 views
6

Tôi muốn thực hiện một yêu cầu POST đến một endpoint API qua Ansible nơi một số mục trong bài dữ liệu là năng động, đây là những gì tôi cố gắng và thất bại:bài Json để API qua Ansible

body_content.json My :

{ 
    apiKey: '{{ KEY_FROM_VARS }}', 
    data1: 'foo', 
    data2: 'bar' 
} 

Và đây là nhiệm vụ Ansible tôi:


# Create an item via API 
- uri: url="http://www.myapi.com/create" 
     method=POST return_content=yes HEADER_Content-Type="application/json" 
     body="{{ lookup('file','create_body.json') | to_json }}" 

Thật đáng buồn này không hoạt động:

failed: [localhost] => {"failed": true} 
msg: this module requires key=value arguments 
.... 
FATAL: all hosts have already failed -- aborting 

phiên bản ansible tôi là 1.9.1

Trả lời

10

Bạn không thể sử dụng dòng mới như thế này trong yaml. Hãy thử điều này thay vì (các ">" chỉ ra rằng dòng tiếp theo là để được nối):

# Create an item via API 
- uri: > 
    url="http://www.myapi.com/create" 
    method=POST return_content=yes HEADER_Content-Type="application/json" 
    body="{{ lookup('file','create_body.json') | to_json }}" 

Nhưng tôi tìm thấy điều này tốt hơn nhiều:

# Create an item via API 
- uri: 
    url: "http://www.myapi.com/create" 
    method: POST 
    return_content: yes 
    HEADER_Content-Type: "application/json" 
    body: "{{ lookup('file','create_body.json') | to_json }}" 
+0

này không làm việc cho tôi. Tôi phải loại bỏ '| to_json' và thêm 'body_format: json' – dokaspar

1

tôi gửi bài dưới đây những gì tôi đã kết thúc bằng cho usecase của tôi (Ansible 2.0). Điều này rất hữu ích nếu tải trọng json của bạn được nêu nội tuyến (và không phải trong một tệp).

nhiệm vụ này hy vọng 204 là mã trả về thành công.

Và kể từ khi body_format là json, tiêu đề được suy ra tự động

- name: add user to virtual host 
    uri: 
    url: http://0.0.0.0:15672/api/permissions/{{ rabbit_virtualhost }}/{{ rabbit_username }} 
    method: PUT 
    user: "{{ rabbit_username }}" 
    password: "{{ rabbit_password }}" 
    return_content: yes 
    body: {"configure":".*","write":".*","read":".*"} 
    body_format: json 
    status_code: 204 

nó về cơ bản là tương đương với:

curl -i -u user:pass -H "content-type:application/json" -XPUT http://0.0.0.0:15672/api/permissions/my_vhost/my_user -d '{"configure":".*","write":".*","read":".*"}' 
Các vấn đề liên quan