Перевести команду PUT curl в ANSIBLE URI
Я хочу взаимодействовать с сервером seafile с его REST API.
До сих пор у меня не было проблем с переводом запросов POST или GET в модуль ansible uri. Однако у меня проблема с получением запроса PUT.
Следующие работы с curl:
curl -X PUT -d "share_type=group&group_id=<groupid>&permission=rw" -H 'Authorization: Token <mysecrettoken>' -H 'Accept: application/json; charset=utf-8; indent=4' https://<myserverurl>/api2/repos/<mylibraryid>/dir/shared_items/?p=/
Когда я перевожу это в следующее задание, оно терпит неудачу:
- name: mytask
uri:
url: "https://<myserverurl>/api2/repos/<mylibraryid>/dir/shared_items/?p=/"
method: PUT
headers: '{ "Authorization": "Token <mysecrettoken>" }'
body: '{ "share_type": "group", "group_id": "<groupid>", "permission": "rw"}'
body_format: json
return_content: yes
Я получаю ошибку:
HTTP Error 500: INTERNAL SERVER ERROR", "redirected": false, "server": "nginx", "set_cookie": "SERVERID=<serverid>; path=/", "status": 500, "transfer_encoding": "chunked", "url": "https://<myserverurl>/api2/repos/<mylibraryid>/dir/shared_items/?p=/", "vary": "Accept-Language, Cookie"}
В сценарии Python, использующем библиотеку запросов, я должен был предоставить окончательный вариант ?p=/
как params={'p': '/'}
, Это причина неудачи? Как мне правильно передать параметр тогда?
1 ответ
Вы должны пройти headers
как хеш YAML, а не как строка JSON:
- name: mytask
uri:
url: "https://<myserverurl>/api2/repos/<mylibraryid>/dir/shared_items/?p=/"
method: PUT
headers:
Authorization: "Token <mysecrettoken>"
body: '{ "share_type": "group", "group_id": "<groupid>", "permission": "rw"}'
body_format: json
return_content: yes
Для справки см. Документы, особенно предпоследний пример:
- uri:
url: https://your.form.based.auth.example.com/dashboard.php
method: GET
return_content: yes
headers:
Cookie: "{{ login.set_cookie }}"