...
Eclipse を起動し、次の手順でプロジェクトをインポートします。
Column | ||
---|---|---|
| ||
File -> Import...
General -> Existing Projects into Workspace Next
「/home/vagrant/workspace/<Cookbook 名>」を追加 Finish |
...
標準では .kitchen.yml が見えないので、次の手順で隠しファイルを表示します。
Column | ||
---|---|---|
| ||
Package Explorer の ▽ を選択 -> Filters… 「.*resources」のチェックを外す OK |
...
この場合は not_if にわたした文字列がシェルスクリプトとして実行され、実行結果が 0 以外のときだけ Resource が実行されます。
さきほどと同じように、結果が 0 のときだけ Resource が実行されるようにするには only_if を使います。
Recipe を書く手順
- 具体的に何をしたいのかを明らかにする
例えば、「あるアプリケーションのコマンドにパスを通したい」場合は、具体的にどのような方法でパスを通すかを決めておきます。
.bashrc に追記してもいいですし、/etc/profile.d/ にスクリプトを置いても実現可能ですが、それぞれ細かい条件が異なりますよね。
.bashrc に書く場合は、どのユーザーを対象とするかを決めなければいけませんし、既に .bashrc に記述されている内容を壊さないようにしないといけません。
/etc/profile.d/ にスクリプトを置く場合は、スクリプトファイル名を決めなければいけませんし、すべてのユーザーにパスを通して問題ないか確認が必要です。
今回は、/etc/profile.d/application.sh に「export PATH=$PATH:/opt/application/bin」という内容のファイルを置くことにします。
使えそうな Resource を探し、仕様を確認する
/etc/profile.d/ にスクリプトを置くとします。これはどの Resource を使えば実現できるでしょうか。
Chef のドキュメント [ http://docs.opscode.com/chef/resources.html ] を見て、使えそうな Resource を探しましょう。
「Chef 実践入門」や「Chef 活用ガイド」といった書籍を利用するのも手です。
/etc/profile.d/ にスクリプトファイルを置く場合は、たとえば次のような手段があります。
- bash Resource で、「export PATH ~」という内容のテキストファイルを出力するスクリプトを実行する
- ruby_block Resource で、〃
- template Resource で、「export PATH ~」という内容のテキストファイルを配置する
- file Resource で、「export PATH ~」という内容のテキストファイルを配置する
各 Resource の詳細はドキュメントを参照して確認してください。
bash Resource や ruby_block Resource でも問題なく実現できますが、「もし既にファイルが存在していたら Resource の実行をスキップする」という処理を書くのが少々面倒です。
template Resource や file Resource には :create_if_missing という Action があり、対象のファイルが存在ないときにだけ Resource を実行させることができます。
template Resource は配置するファイルの内容を動的に制御する機能を備えていますが、 今回配置したいスクリプトファイルは完全に固定のものなので、そこまでの機能は不要です。
なので、file Resource を使うのが適しているでしょう。
Recipe を記述する
使用する Resource が決まったら、ドキュメントを確認しながら ./recipes/default.rb に Recipe を記述します。
default.rb はその Cookbook が標準的に実行する Recipe で、一般的なプログラミングでいうメインメソッドのようなものです。
file Resource のドキュメント [ http://docs.opscode.com/resource_file.html ] を確認すると、name にファイルパスを、content Attribute にファイルの内容を指定することがわかりますので、
その仕様に従って Recipe を記述すればOKです。
コード ブロック | ||
---|---|---|
| ||
file “/etc/profile.d/application.sh” do
content “export PATH=$PATH:/opt/application/bin”
action :create_if_missing
end |
- 使えそうな Resource をさがす
- 実際に Recipe を書く
はじめは、目的に対して適切な Resource をさがせることがいちばん大事です。
Google で検索してもいいですし、Dash を使ってもいいですし、Chef実践入門 や Chef活用ガイド のような書籍を利用するのも手です。