Требовать rest-client для модуля в Chef
Мне нужно включить 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" и использовать его в рецептах Chef?
1 ответ
Давным-давно HTTP-клиенты жили вместе в гармонии. Затем все изменилось, когда гем JSON атаковал. Только Chef::HTTP
все еще должен был быть включен в Chef, поскольку все остальные клиенты находились под слишком большим потоком, чтобы включать.
Мы больше не включаем этот драгоценный камень, поэтому, чтобы использовать его, вам нужно будет установить его самостоятельно либо через зависимость от драгоценного камня из поваренной книги, либо chef_gem
ресурс. Но для простых вещей вы можете просто использовать наш Chef::HTTP::SimpleJSON
вместо клиента:
Chef::HTTP::SimpleJson.new(uri).post("", args)["access_token"]
Или что-то в этом роде (особенности зависят от того, нужно ли использовать кодирование формы или сервер также говорит на языке JSON).