Ресурс ruby_block
Эта страница сгенерирована из исходного кода Chef Infra Client. Чтобы предложить изменение, отредактируйте файл ruby_block.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.
Используйте ресурс ruby_block для выполнения Ruby-кода во время работы Chef Infra Client. Ruby-код в ресурсе ruby_block оценивается вместе с другими ресурсами во время сходимости, тогда как Ruby-код вне ресурса ruby_block оценивается до других ресурсов, поскольку рецепт компилируется.
Синтаксис
Блок ресурса ruby_block выполняет произвольный Ruby-код. Например, чтобы перезагрузить файл client.rb во время работы Chef Infra Client:
ruby_block 'reload_client_config' do
block do
Chef::Config.from_file("/etc/chef/client.rb")
end
action :run
end
Полный синтаксис всех свойств, доступных ресурсу ruby_block:
ruby_block 'name' do
block Block
block_name String # defaults to 'name' if not specified
action Symbol # defaults to :run if not specified
endгде:
-
ruby_block— это ресурс. -
name— имя, присвоенное блоку ресурса. -
block— блок Ruby-кода, который нужно выполнить. -
actionопределяет шаги, которые Chef Infra Client предпримет, чтобы привести узел к желаемому состоянию. -
blockиblock_name— свойства этого ресурса с указанным типом Ruby. Подробности о всех свойствах, которые можно использовать с этим ресурсом, см. в разделе «Свойства» ниже.
Действия
Ресурс ruby_block имеет следующие действия:
:create- То же, что и
:run. :nothing- Этот блок ресурса не действует, пока другой ресурс не уведомит его о действии. После уведомления этот блок ресурса либо выполняется немедленно, либо ставится в очередь для выполнения в конце работы Chef Infra Client.
:run- По умолчанию. Выполнить Ruby-блок.
Свойства
Ресурс ruby_block имеет следующие свойства:
-
block - Тип Ruby: Блок
Блок Ruby-кода.
-
block_name - Тип Ruby: Строка | Значение по умолчанию:
The resource block's nameИмя Ruby-блока. Значение по умолчанию: имя
nameблока ресурса. Подробности см. в разделе «Синтаксис» выше.
Примеры
Следующие примеры демонстрируют различные подходы к использованию ресурса ruby_block в рецептах:
Перечитать данные конфигурации
ruby_block 'reload_client_config' do
block do
Chef::Config.from_file('/etc/chef/client.rb')
end
action :run
end
Выполнение блока на определенной платформе
В следующем примере показано, как условный оператор if можно использовать с методом windows? в языке Chef Infra для выполнения кода, специфичного для Microsoft Windows. Код определен с помощью ресурса ruby_block:
if windows?
ruby_block 'copy libmysql.dll into ruby path' do
block do
require 'fileutils'
FileUtils.cp "#{node['mysql']['client']['lib_dir']}\\libmysql.dll",
node['mysql']['client']['ruby_dir']
end
not_if { ::File.exist?("#{node['mysql']['client']['ruby_dir']}\\libmysql.dll") }
end
end
Отложить файл в пакет данных
В следующем примере показано, как использовать ресурс ruby_block для отложения файла BitTorrent в пакет данных, чтобы он мог быть распределен узлам в организации.
ruby_block 'share the torrent file' do
block do
f = File.open(node['bittorrent']['torrent'],'rb')
#read the .torrent file and base64 encode it
enc = Base64.encode64(f.read)
data = {
'id'=>bittorrent_item_id(node['bittorrent']['file']),
'seed'=>node.ipaddress,
'torrent'=>enc
}
item = Chef::DataBagItem.new
item.data_bag('bittorrent')
item.raw_data = data
item.save
end
action :nothing
subscribes :create, "bittorrent_torrent[#{node['bittorrent']['torrent']}]", :immediately
end
Обновить файл /etc/hosts
В следующем примере показано, как ресурс ruby_block можно использовать для обновления файла /etc/hosts:
ruby_block 'edit etc hosts' do
block do
rc = Chef::Util::FileEdit.new('/etc/hosts')
rc.search_file_replace_line(/^127\.0\.0\.1 localhost$/,
'127.0.0.1 #{new_fqdn} #{new_hostname} localhost')
rc.write_file
end
end
Установить переменные среды
В следующем примере показано, как использовать переменные в блоке Ruby для установки переменных среды с помощью rbenv.
node.override[:rbenv][:root] = rbenv_root
node.override[:ruby_build][:bin_path] = rbenv_binary_path
ruby_block 'initialize' do
block do
ENV['RBENV_ROOT'] = node[:rbenv][:root]
ENV['PATH'] = "#{node[:rbenv][:root]}/bin:#{node[:ruby_build][:bin_path]}:#{ENV['PATH']}"
end
end
Вызов методов в gem
В следующем примере показано, как вызывать методы в gem, не поставляемых в Chef Infra Client
chef_gem 'mongodb'
ruby_block 'config_replicaset' do
block do
MongoDB.configure_replicaset(node, replicaset_name, rs_nodes)
end
action :run
end
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/resources/ruby_block/