chefdashを試す

chefdash by sidebolt を試してみます。 chefdashはchef-clientのノードの登録や、environment毎やserver毎にcookbookを実行するWebUIを提供するWebアプリケーションです。

必要なものを事前にインストールしておきます。

sudo apt-get install git git-core
sudo apt-get install libssl-dev
sudo ./install.sh
sudo -i -u chefdash

あとはソースコードを取得し、chefdash by sidebolt のRedmeに書いてある手順で実行します。

注意点

chefdashユーザでknifeコマンドを実行できるようにしておく必要があるため、knife configure --initialを実行します。

knife bootstrap用の設定

chefdashでは、それぞれのchef-clientノードにknife bootstrapコマンドを利用してchef-clientのインストール・設定を行うことが可能です。 chefdashで利用しているknife bootstrapのオプションは--sudoです。 特に何も設定しないで、実行すると下記のようなエラーがでます。

f:id:clavier:20131203225559p:plain

このようなエラーが出ますので、事前にrootにパスワードなしでログインできるようになっている必要があります。
chefdashサーバから、chef-clientをインストールするノードにパスワード無しでログインできるようにする必要があります。 chefdashサーバからroot ユーザの環境にSSH の公開鍵と秘密鍵をコピーします。

$ scp .ssh/id_rsa root@chef-clientノードのIPアドレス:/root/.ssh
$ scp .ssh/id_rsa.pub  root@chef-clientノードのIPアドレス:/root/.ssh

chef-clientをインストールされる側のノードでは以下の設定をします。

$ sudo chown root. /root/.ssh/id_rsa
$ sudo chown root. /root/.ssh/id_rsa.pub
$ sudo cat /root/.ssh/id_rsa.pub | sudo tee -a /root/.ssh/authorized_keys

これで、chefdashがknife bootstrapを正常に実行出来るようになります。

f:id:clavier:20131203231715p:plain

chef-clientの実行

chef-clientを実行する前に、ノードでcookbookを実行するようにrun-listを登録しておく必要があります。 chefdashが実際にchef-clientコマンドを実行してCookBookを実行するときは、sshでchef-clientノードに入ってchef-clientコマンドを実行しています。 chefdashが実行しているコマンドは、下記のコマンドです

ssh -o StrictHostKeyChecking=no chef-clientのIPアドレス sudo chef-client

上記のコマンドがパスワードの問い合わせなど発生せずに実行出来る必要があります。 そのためにchefdashユーザがsshでログインできるように各マシンに SSH の公開鍵と秘密鍵をコピーしておく必要があります。

$ scp .ssh/id_rsa root@chef-clientノードのIPアドレス:/home/ubuntu/.ssh
$ scp .ssh/id_rsa.pub root@chef-clientノードのIPアドレス:/home/ubuntu/.ssh
$ sudo chown ubuntu. /home/ubuntu/.ssh/id_rsa
$ sudo chown ubuntu. /home/ubuntu/.ssh/id_rsa.pub
$ sudo cat /home/ubuntu/.ssh/id_rsa.pub | sudo tee -a /home/ubuntu/.ssh/authorized_keys

また、chef-clientノードで、chef-clientコマンドをsudo実行できるように、visudoなどで設定しておく必要があります。 cookbookの実行が成功すると、下記のように表示されます。

f:id:clavier:20131203090545p:plain

雑感

最初はchef-zeroと組み合わせて利用できたら面白いかと思って触ってみが、認証が必要ということであえなく挫折。
chef-serverと組み合わせて確認することになりました。
chef-clientやkinife bootstrapの実行ログ(標準出力に出力される内容)をwebsocketで画面に描画したり、そのあたりの実行結果もwebsocketでやりとりをするという仕組みは面白いと感じました。

複数のサーバに対してcookbookを頻繁に実行するような環境を持っているなら構築する価値はあるかもという感じでした。反面構築時に1回だけ実施するような利用の仕方だと、それほど魅力的はないかと思いました。

f:id:clavier:20131206002329p:plain