そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

chef - knife solo を使う

chef-solo を簡単に使うには knife solo を使います。
chef-serverを使わなくてもリモート実行できるので楽に一元管理できます。

前提

以下の準備が必要です。

  • ssh でリモートアクセスできること (パスフレーズ無が好ましい)
  • sudo でroot権限になれること
インストール

今回 chef はすでにインストール済みとします。

knife-solo を gem でインストールします。

$ gem install knife-solo

Berkshelf または Librarian-Chef を使うとよいとのことで、
今回は前者をインストールします。

$ gem install berkshelf

rbenv を使っている場合は、rehashしておきましょう。

$ rbenv rehash
kitchenの作成

kitchen(cookbookのリポジトリをおく場所)を初期化します。
設定ファイルやディレクトリツリーが作成されます。

今回は chef-repo というkitchenを作成します。

$ knife solo init chef-repo

以下のようなディレクトリとファイルが作成されます。

chef-repo/
-cookbooks
-data_bags
-environments
-nodes
-roles
-site-cookbooks
-.chef/knife.rb

以下は、chef-repo ディレクトリで実行します。

レシピの作成

chef-solo のときと同じように、knife cookbook で作成します。
site-cookbooks 以下に作成します

$ knife cookbook create mysql -o site-cookbooks
run_list の作成

chef-solo のときに-jオプションで指定したJSONファイルを、
nodes/ 以下に作成します。

knife node コマンドで作成すると便利です。

$ knife node create localhost -z -e vim

ノード名として実行するホスト名を入力します。
-e でエディタを指定します。(上記ではvimを指定)
run_list に、実行したいレシピのリストを追加します。

{
  "run_list": [
     "recipe[mysql]"
  ]
}

保存すると nodes/localhost.json (localhostは引数で指定したノード名) に
出力されます。

実行する

knife solo cook コマンドで実行します

$ knife solo cook bibio@localhost --no-chef-check  

bibio は対象ホストのユーザ名、localhostは対象ホスト名を指定します。

--no-chef-check は、chefのバージョンチェックをスキップします。
Chef(Opscode)のrpmを使用しない場合エラーとなるので追加しています。

途中何回かパスワードとパスフレーズの入力が求められます。
パスフレーズは無い方が楽なのはこのためです。

テスト実行は -W オプションを指定します。

$ knife solo cook bibio@localhost --no-chef-check -W