困りごと
いつもの手順
- chef-serverで対象マシン(ノード)用のレシピ/ロールを更新
- 対象マシンに ssh でログイン
- chef-client を実行
→ めんどい!複数マシンが対象だったらさらにめんどい!
解決方法
- chef-client をデーモンとして実行(一定時間毎に chef-client が chef-server にポーリング)
- シェルスクリプトを書いて、chef-client をリモート実行
- 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