Chef を Ruby コード内で利用する
こんにちは。@jedipunkz です。 require ‘chef’ して Ruby コードの中で chef を利用したいと思って色々調べていた のですが、そもそもリファレンスが無くサンプルコードもごくわずかしかネット上に見 つけられない状態でした。結局ソースコードを読んで理解していく世界なわけですが、 サンプルコードが幾つかあると他の人に役立つかなぁと思い、ブログに載せていこうか なぁと。 まず Chef サーバへアクセスするためには下記の情報が必要です。 ユーザ名 ユーザ用のクライアント鍵 Chef サーバの URL これらは Chef::Config で記していきます。 では早速サンプルコードです。まずは data bags 内データの一覧を取得するコードで す。data bags 内のデータを全で取得し配列で表示します。 #!/usr/bin/env ruby require 'rubygems' require 'chef/rest' require 'chef/search/query' Chef::Config[:node_name]='user01' Chef::Config[:client_key]='/home/user01/user01.pem' Chef::Config[:chef_server_url]="https://10.200.9.22" Chef::DataBag::list.each do |bag_name, url| Chef::DataBag::load(bag_name).each do |item_name, url| item = Chef::DataBagItem.load(bag_name, item_name).to_hash puts item end end 次は data bags にデータを入力するコードです。json_data という JSON 形式のデー タを test_data という data bag に放り込んでいます。 #!/usr/bin/env ruby require 'rubygems' require 'chef/rest' require 'chef/search/query' Chef::Config[:node_name]='user01' Chef::Config[:client_key]='/home/user01/user01.pem' Chef::Config[:chef_server_url]="https://10.0.0.10" json_data = { "id" => "test", "command" => "echo test" } databag_item = Chef::DataBagItem.new databag_item.data_bag('test_data') databag_item.raw_data = proc_nginx databag_item.save 次は nodes 一覧の取得です。 ...