humangas's blog

自分の振り返りを適当に書いてます。書きっぷりはそん時の気分によって変わります。

入門Chef Solo:05-リモートからchef-soloを実行する - knife-solo

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

knife-soloはknifeのプラグインでChef Soloを利用するための便利な機能を提供する。
その機能のひとつに手元のレシピをリモートにrsyncで転送したあとchef-soloを実行し、 その出力をストリームで返してくれるというものがある。

knife-soloの導入

knife-soloはrubygemsで提供される。

インストールは以前Qiitaに書いた以下を参照。
AWS EC2上のRHEL5.5で、Chef Solo環境を構築する(for Mac)

knife-solo

レシピ転送&リモート実行

$ knife solo cook [host]

[host]にchef-soloをインストールする

$ knife solo prepare [host]
$ knife solo prepare [user]@[host]

[host]でchef-soloを実行

$ knife solo cook [host]

run_listを個別に指定(バージョン0.3.0以降)

$ knife solo cook [host] -o hello::default, nginx::default

[host]に転送したレシピ群を削除して掃除する

$ knife solo clean [host]

新規Chefレポジトリ(キッチン)を作る

$ knife solo init chef-repo

knife-soloはssh経由でchef-soloを実行する。sshで使うログインユーザーはsudoしてパスワードなしでchef-soloを実行できる権限が必要。

knife-soloでのsolo.rbおよびJSONファイルの扱い

knife-soloではsolo.rbやJSONファイルの扱いが少し変わる。

solo.rb

knife-solo 0.3.0では、solo.rbが生成されずknife-soloがいい感じに調整してくれる。

JSONファイル

次のタイミングで自動生成される。

  • $ knife solo prepare実行したとき
  • $ knife solo cookをはじめて実行したとき

実行するときのカレントディレクトリは、レポジトリ(キッチン)であること。

作成される場所と名前:

  • node/[IPアドレスorホスト名].json

自動生成された後は、このファイルを編集して使用する。
任意のJSONファイルを使用する場合は、knife solo cook -j [JSONファイル]とする。

knife solo prepareでChef Ready!

$ knife solo prepare [host]を実行するだけで、chef-soloが実行できるようになる。 サーバー側は、sshとsudoできるログインアカウントが必要。

このコマンドはOpsCodeからダウンロードするため、インターネットに接続できる環境が前提。

Vagrantには初期状態からChef Soloがインストールされていることもあるが、OSのイメージによってはバージョンが古いので、初回に$ knife prepareを実行しておく。

knife-soloでChef Solo環境を生成する

knife-soloの機能で、chef-soloに最適なレイアウトのレポジトリ(キッチン)を作れる。

$ knife solo init chef-repo

作成したレポジトリはgitで管理する。

cookbookをsite-cookbooks内に作成する。

knife solo initで作ったレポジトリのディレクトリ構成

5つのディレクトリで構成される。

cookbooks

ダウンロードしたcookbookや第三者が作成したcookbookを入れる

data_bags

ChefのData Bagsの機能を使いたいときに利用する

nodes

ノードごとのJSONファイルの格納場所

roles

ChefのRolesの機能を使いたいときに利用する

site-cookbooks

自分で作ったcookbookを入れる

複数ホストへのknife soloの実行

xargsを利用して複数の管理対象ノードでknife-soloを実行する。

$ echo user@node1 user@node2 user@node3 | xargs -n 1 knife solo cook

まとめ

  • knife-soloを使ってリモートのサーバーのChef Soloを実行できる。
  • knife solo prepareを使ってChef環境が整っていないサーバーをChef Solo Readyにできる。

一連の流れ

  • knife solo initでレポジトリを作成
  • レシピを編集
  • knife solo prepareでリモートのChef Solo環境を整える
  • knife solo cookで実行する