tkuchikiの日記

新ブログ https://blog.tkuchiki.net

chef の config file を読み込んで、設定値を使用する方法

執筆時の chef のバージョンは、以下のとおりです。

$ rpm -q chef
chef-11.16.4-1.el6.x86_64

chef 以外から、chef の config file を読み込んで、Hash のようにアクセスする方法です。
主に、以下のコードを参照しました。

Chef::Config.from_file でファイルを読みこめば、

p Chef::Config[:cookbook_path]

のようにアクセスできました。

以下が、実行例です。

設定ファイル(solo.rb)

cookbook_path   '/path/to/chef/cookbooks'
cookbook_path   '/path/to/chef/cookbooks'
data_bag_path   '/path/to/chef/data_bags'
file_cache_path '/path/to/chef/tmp'
role_path       '/path/to/chef/roles'
ssl_verify_mode :verify_peer

設定ファイル(client.rb)

log_level        :info
log_location     STDOUT
chef_server_url  'https://example.com'
validation_client_name 'chef-validator'

code(put_chef_config.rb)

#!/opt/chef/embedded/bin/ruby

require 'chef/config'

Chef::Config.from_file('/path/to/solo.rb')

puts "## solo.rb"
print "cookbook_path: ", Chef::Config[:cookbook_path], "\n"
print "data_bag_path: ", Chef::Config[:data_bag_path], "\n"
print "file_cache_path: ", Chef::Config[:file_cache_path], "\n"
print "role_path: ", Chef::Config[:role_path], "\n"
print "ssl_verify_mode: ", Chef::Config[:ssl_verify_mode], "\n"
print "\n"

Chef::Config.reset

Chef::Config.from_file('/path/to/client.rb')

puts "## client.rb"
print "log_level: ", Chef::Config[:log_level], "\n"
print "log_location: ", Chef::Config[:log_location], "\n"
print "chef_server_url: ", Chef::Config[:chef_server_url], "\n"
print "validation_client_name: ", Chef::Config[:validation_client_name], "\n"
実行結果
$ ./put_chef_config.rb

## solo.rb
cookbook_path: /path/to/chef/cookbooks
data_bag_path: /path/to/chef/data_bags
file_cache_path: /path/to/chef/tmp
role_path: /path/to/chef/roles
ssl_verify_mode: verify_peer

## client.rb
log_level: info
log_location: #<IO:0x00000001d39360>
chef_server_url: https://example.com
validation_client_name: chef-validator

これで、chef の設定ファイルを読み込んで何かしたいときでも、
簡単に設定値にアクセスできます。