Сообщение Json в API через Ansible
Я хочу сделать запрос POST к конечной точке API через Ansible, где некоторые элементы внутри данных post являются динамическими, вот что я пытаюсь и терплю неудачу:
мой body_content.в JSON:
{
apiKey: '{{ KEY_FROM_VARS }}',
data1: 'foo',
data2: 'bar'
}
и вот моя задача:
# 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 }}"
к сожалению, это не работает:
failed: [localhost] => {"failed": true}
msg: this module requires key=value arguments
....
FATAL: all hosts have already failed -- aborting
моя версия ansible 1.9.1
2 ответов
вы не можете использовать новые строки, как это в yaml. Попробуйте вместо этого (">"указывает, что следующие строки должны быть объединены):
# 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 }}"
но я нахожу это гораздо лучше:
# 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 }}"
я публикую ниже того, что я использовал для своего usecase (Ansible 2.0). Это полезно, если ваша полезная нагрузка json указана встроенной (а не в файле).
эта задача ждет 204 как код возврата успеха.
и поскольку body_format является json, заголовок выводится автоматически
- 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
это в принципе эквивалентно:
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":".*"}'