困りごと

いつもの手順

  1. chef-serverで対象マシン(ノード)用のレシピ/ロールを更新
  2. 対象マシンに ssh でログイン
  3. chef-client を実行

→ めんどい!複数マシンが対象だったらさらにめんどい!

解決方法

  1. chef-client をデーモンとして実行(一定時間毎に chef-client が chef-server にポーリング)
  2. シェルスクリプトを書いて、chef-client をリモート実行
  3. capistrano で、chef-client をリモート実行。複数マシンまとめて更新もできるかも。この記事

やり方

ChefServer@IBMクラウドで実験。

capistranoのインストール

 gem install capistrano

sshの設定。鍵も置く。.ssh/config

 Host hoge
 Hostname hoge.dyndns-server.com
 User idcuser
 identityFile ~/.ssh/hoge.rsa

/opt/chef-repo/deploy.rb # sudo su - -c でイケる[2] というのを見つけるのに苦労した

 role :chef_client, "hoge"

 task :chef_client, :roles => [:chef_client] do
   run "sudo su - -c 'chef-client -c /root/.chef/knife.rb'"
 end

実行

 cd /opt/chef-repo
 cap -f deploy.b chef_client

参考サイト