мне нужно отправить .json файла на сервер с REST API с рецептом шеф-повара, после Chef's documentation я придумал этот код:Создание запроса POST с шеф-
http_request '/tmp/bpp.json' do
url 'http://localhost:8080/api/v1/blueprints/bpp'
headers ({
'AUTHORIZATION' => "BasiC#{Base64.encode64(user)}",
'CONTENT-TYPE' => 'aplication/json'
})
action :post
end
Для жетоном авторизации, user
это переменная, которая содержит 'user:password'
Когда я запускаю этот рецепт шеф-я получить следующий ответ:
Error executing action `post` on resource 'http_request[POST /tmp/bpp.json]'
Net::HTTPServerException
------------------------
400 "Bad Request"
до этого я ж как только выполнение вызова curl
, и он работал нормально, но мне нужно перейти на ресурс http_request
. Это был старый (рабочий) curl
запрос:
curl --user user:password -H 'X-Requested-By:My-cookbook' --data @/tmp/bpp.json localhost:8080/api/v1/blueprints/bpp
Я не очень привык с REST APIs и походит на неизведанную территорию для меня.
О, я вижу это ясно теперь, вместо файла в пути '/ TMP/bpp.json', что я послал это строка'/TMP/bpp.json' Есть ли элегантный/простой способ передать файл как сообщение здесь? Должен ли он (каким-либо образом) загружаться во время работы шеф-повара в память? – Navarro
Это зависит, вы можете попробовать прочитать файл во время выполнения chef (File.read). но помните, что чистый код ruby [выполнен на этапе компиляции] (https://coderanger.net/two-pass/). Поэтому, если вы хотите разместить этот файл на сервере с помощью шеф-повара, вам придется использовать ленивый блок. Вы также можете поместить этот файл в пакет данных. –
Я сделал пример более конкретным. – coderanger