我需要在模块中包含res-client才能使用RestClient :: Resource。
我在Chef食谱(ruby_block资源)的模块中使用该方法。
当我的ruby_block资源尝试在模块中运行该方法时,它会输出以下错误:
错误:无法加载此类文件-rest-client
以下是我位于库文件夹中的模块:
module SecretServer
def fetch_token
payload = { :username => "***", :password => "***", :grant_type => "****"}
uri = ***
request = RestClient::Resource.new(uri, :verify_ssl => false)
post_request = request.post payload, :content_type => 'application/x-www-form-urlencoded'
token = JSON.parse(post_request)["access_token"]
return token
end
end
require 'rest-client'
Chef::Recipe.include(SecretServer)
Chef::Resource.include(SecretServer)
以下是调用模块中函数的资源:
ruby_block 'parse data' do
block do
res = fetch_token
puts res
end
end
这只是我食谱中的几种食谱之一。在目标节点几乎准备就绪并且已在目标节点上运行“捆绑安装”之后,将运行此配方。
我还将在目标节点上安装rest-client。我在ruby_block资源之前尝试了以下每个资源:
chef_gem 'rest-client' do
action :install
end
gem_package 'rest-client' do
action :install
end
我的问题是如何在厨师食谱中包含“ rest-client”并加以利用?
答案 0 :(得分:0)
很久以前,HTTP客户端和谐共处。然后,当JSON gem受到攻击时,一切都发生了变化。由于其他所有客户的交流动向太大,只有Chef::HTTP
仍要包含在Chef中。
我们不再包含该gem,因此,要使用它,您必须自己通过Cookbook gem依赖项或chef_gem
资源进行安装。但是对于简单的东西,您可以只使用我们的Chef::HTTP::SimpleJSON
客户端:
Chef::HTTP::SimpleJson.new(uri).post("", args)["access_token"]
或类似的东西(具体取决于您是否必须使用表单编码或服务器是否使用JSON)。