hamadata's diary

https://motion-gallery.net のエンジニアのブログ

knife-solo 日本語抄訳(http://matschaffer.github.io/knife-solo/)

原文は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

    cygwinrsyncを使用した場合、cookコマンドは期待した通りに自動的に動作します。

DEVELOPMENT(開発)

未完