从Chef调用api(curl works)

时间:2016-09-16 11:42:01

标签: chef

我一直试图从Chef内部调用api然后解析结果,但此刻我甚至无法调用api

这有效

curl -X PUT -H "X-API-KEY:The Key secret"  -d "va1=a@var2-b" https://example.com/v1/endpointl1/endpointl2

我尝试过各种各样的事情,到目前为止,我最好的尝试是

Chef::HTTP.new('https://example.com').put('/v1/endpointl1/endpointl2', 'va1=a@var2-b',"X-API-KEY:The Key secret")

但是我得到了错误:无法将String转换为Hash

我认为是因为标题(X-API-KEY位)格式不正确

任何人都可以指出我正确的方向如何正确地调用api

由于

捐赠

3 个答案:

答案 0 :(得分:0)

您也可以execute command使用curl ...

execute "curl-to-api" do command "curl -m 5 -i -X POST -d ... etc ... #{chat_url}" ignore_failure true end

我自己的代码示例:

onTouch()

答案 1 :(得分:0)

感谢回复,它帮助我集中注意力。我对这一点感到有些困惑,因为我稍微调整了一下并收到了406消息,结果发现我甚至用curl得到了它,但它也给了我一个带有详细信息的服务器消息(json)

这就是我最后所做的

response=Chef::HTTP.new('https://api.pagely.com').put('/v1/domains/single', 'var1=abc&var2=def', ({'X-API-KEY' => 'mysecret'}))
print response
json = JSON.parse response
pgsiteid = json['id']
print pgsiteid

看起来很有效。如果Chef \ Ruby没有对406错误抱怨,那本来会很好,但我想这更像api的问题

最后一点是我从响应中获取值

由于

捐赠

答案 2 :(得分:0)

不要重写,请查看https://coderanger.net/chef-tips/#4。我知道所以不喜欢只是链接文档,但如果有人想要转录,那就去吧。基本上你想使用Chef::HTTP。它有一些简单请求的访问器,并返回Net::HTTP个响应对象。你唯一的变化应该是将标题数据作为哈希而不是我认为的字符串。