与Chef发出POST请求

时间:2016-11-22 09:04:25

标签: ruby rest curl chef chef-recipe

我需要将一个.json文件发布到带有一个带有Chef配方的rest API的服务器上,Chef's documentation我想出了这段代码:

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,对我来说似乎是一个未知领域。

1 个答案:

答案 0 :(得分:2)

你忘了message。使用文件名作为资源名称不会将此文件作为数据发送。尝试添加:

...
message lazy { IO.read('/tmp/bpp.json') }
...

在您的情况下,只会发送资源名称 - /tmp/bpp.json。不是文件内容。如链接文档中所述:

The message that is sent by the HTTP request. Default value: the name of the resource block See “Syntax” section above for more information.