原文はhttp://matschaffer.github.io/knife-solo/
解説
knife-soloは、chef-soloと併せて動作させるために、いくつかのコマンドを追加で使います。それによって、chef-serverと同様にパワフルに動作することを狙っています。
knife-soloは、今のところ、knifeに5つのサブコマンドを追加します。
knife solo init
は、新規にディレクトリ構造(kitchenのこと)を作成するコマンドです。このディレクトリは、Chefの標準的なディレクトリ構造に従っており、新しいレシピを作って保存するのに使います。knife solo prepare
は、対象となるホストにChefをインストールするコマンドです。このコマンドは、ホストのOSを自動的に検知し、それに従ってインストールの手続きを変更します。knife solo cook
は、kitchen(Chefレポジトリ)を対象ホストにアップロードし、chef-soloを実行するコマンドです。knife solo bootstrap
は、前記の2つのコマンドを併せて実行するコマンドです。(prepareしてcook)knife solo clean
で対象ホストからアップロードされたkitchenを削除することができます。
"knife solo cook" は、準備段階ながら、Windowsでもサポートされています。(下記参照。)
使い方:
インストールは、通常のgemのインストールと同様です。
gem install knife-solo
gitからインストールする場合は、
bundle && bundle exec rake install
Init command(初期化コマンド)
initコマンドは、kitchenの構造を保存するディレクトリの名称を引数にとります。今いるディレクトリを初期化したい場合は、"."をつかってください。
knife solo init mychefrepo
今のところ、ディレクトリ構造は下記のようになります。ただし、開発が続けば変更されるかもしれません。
mychefrepo/
├── cookbooks
├── data_bags
├── nodes
├── roles
├── site-cookbooks
└── solo.rb
Prepare command(準備コマンド)
準備コマンドは、ssh形式でホストの引数を下記のようにとります。
knife solo prepare ubuntu@10.0.0.201
このコマンドは、sshの情報を、標準では~/.ssh/config
から、-F
をつけたばあいは指定されたファイルから読み込みます。ポートの情報(-p
)、ID情報(-i
)、パスワード(-P
)をとることもできます。いくつかのコマンドの実行時にはsudoを使用するため、コマンドラインでパスワードが与えられていない場合は、コマンドプロンプトでパスワードが要求されます。
このコマンドは、対象のOSでChef Soloがインストールされるように最大限がんばります。可能であれば、どこであっても、Opscode Installerを使用します。
特定の振る舞いを実行させたい場合は、knife bootstrapを空のrunlistと一緒に実行させましょう。
knife bootstrap --template-file bootstrap.centos.erb -u root 172.16.144.132 echo '{"run_list":[]}' > nodes 172.16.144.132.json
このgistにあるように、Bootstrapのテンプレートは非常にシンプルです。
あなたが変更した内容が一般的に有用なものであった場合、pull requestをこのプロジェクトもしくはomnibusインストーラに送ることを考えてみてください。
Cook command(Cookコマンド)
Cookコマンドは、ssh形式のホスト情報を引数にとります。
knife solo cook ubuntu@10.0.0.201\
Cookコマンドは、今あるkitchenをサーバにアップロードし、chef-soloをそのサーバで実行します。もし一個しか引数を指定しなかった場合、コマンドはnodes/<hostname>.json
にあるnodeの設定を探します。node設定を指定したい場合、2つめの引数にファイルのパスを指定することができます。
このコマンドでは、data_bags
フォルダから読み取り専用でdata_bagsを使うことを許可するパッチを加えて、cookbookをすべてアップロードします。
このコマンドは、暗号化されたdata bagもサポートします。使用するためには、kitchenのルートにあるdata_bag_key
(もし移動させた場合は、solo.rb
に新しいパスが反映されているか確認してください。)にkeyを置いてください。
暗号化されたdata bagを作成するknifeコマンドは、Chef serverを使用しない場合はうまく動きません。ローカルのファイルシステムで暗号化されたdata bagを作成するための例としてこのgistを参考にしてください。
Bootstrap command(Bootstrapコマンド)
Bootstrapコマンドは、prepare、cookコマンドのほとんどのオプションと同様の引数をとります。
knife solo bootstrap ubuntu@10.0.0.201
Boostrapコマンドは内部で、指定された引数とオプションで、最初に knife solo prepareを実行し、次にknife solo cookを実行します。
Clean Command(Cleanコマンド)
Cleanコマンドは、prepare、cookと同様の引数をとります。
knife solo clean ubuntu@10.0.0.201
Cleanコマンドは、対象のホストから、アップロードされたkitchenを完全に削除します。こうすることで、そのホストにパスワード等々が残されることがなくなるため、セキュリティが向上します。
Windows support(Windowsサポート)
Cookコマンドは、下記のHowtoに従えばWindowsでも動きます。
Init then tweak(初期化して弄る)
knife solo init
を実行した後、solo.rbを、Windows形式のパス命名に従って編集してください。(https://gist.github.com/1773854を参考にしてください)Prepare the node manually(手動でnodeを準備する)
- SSH serverをインストールする(例:WinSSHd)
- ホストでrsyncをインストールする(https://github.com/thbar/rsync-windows)
- ユーザのPATHにrsyncを加える
- http://www.opscode.com/chef/install.msiをインストールする
- nodes/hostname.jsonを作成し、中に
{ "run_list": [] }
を書き加えるCook
DEVELOPMENT(開発)
未完