要求其他客户在Chef

时间:2018-06-23 22:59:44

标签: ruby-on-rails-4 chef rest-client ruby-block

我需要在模块中包含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”并加以利用?

1 个答案:

答案 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)。