Spec-Zone.ru › Chef 18

Ресурс ruby_block

Эта страница сгенерирована из исходного кода Chef Infra Client. Чтобы предложить изменение, отредактируйте файл ruby_block.rb и отправьте запрос на вытягивание в репозиторий Chef Infra Client.

Все страницы ресурсов Infra


Используйте ресурс 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API