Требовать rest-client для модуля в Chef - PullRequest
0 голосов
/ 24 июня 2018

Мне нужно включить res-client в мой модуль, чтобы использовать RestClient :: Resource.

Я использую метод в модуле из рецепта шеф-повара (ресурс 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 голосов
/ 24 июня 2018

Давным-давно HTTP-клиенты жили вместе в гармонии.Затем все изменилось, когда гем JSON атаковал.Только Chef::HTTP должен был быть включен в Chef, так как все остальные клиенты находились под слишком большим потоком, чтобы включать его.

Мы больше не включаем этот драгоценный камень, поэтому для его использования вам придется установитьэто либо через зависимость от gem, либо из ресурса chef_gem.Но для простых вещей вы можете просто использовать наш Chef::HTTP::SimpleJSON клиент:

Chef::HTTP::SimpleJson.new(uri).post("", args)["access_token"]

или что-то в этом роде (особенности зависят от того, нужно ли использовать кодирование формы или сервер также говорит в формате JSON).

...