chef の config file を読み込んで、設定値を使用する方法
執筆時の chef のバージョンは、以下のとおりです。
$ rpm -q chef chef-11.16.4-1.el6.x86_64
chef 以外から、chef の config file を読み込んで、Hash のようにアクセスする方法です。
主に、以下のコードを参照しました。
- chef/config.rb at 11.16.4 · opscode/chef · GitHub
- mixlib-config/config.rb at v2.1.0 · opscode/mixlib-config · GitHub
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 の設定ファイルを読み込んで何かしたいときでも、
簡単に設定値にアクセスできます。