目次 |
---|
Attribute による Recipe の制御
Attribute とは
Recipe にパラメータを与える仕組みです。
Attribute はプロビジョニング時に指定できる Key-Value 形式のデータで、Recipe からその値を参照できます。Recipe をより柔軟に記述できるようになり、Cookbook の再利用性があがります。
Attribute の Key は Cookbook の製作者が自由に決定でき、その用途も自由です。
何を Attribute にするか
Cookbook の設計によりけりですが、たいていの場合は次の項目は Attribute にすることが多いです。
- アプリケーションのアーカイブやパッケージの URL
- アプリケーションのアーカイブやパッケージのバージョン
- アプリケーションをインストールするユーザー
- アプリケーションのインストール先
Attribute に値を指定する方法
Attibute の指定方法はプロビジョニングの方法により異なります。
Kitchen の場合
.kitchen.yml の attributes に YAML 形式で指定します。
コード ブロック | ||
---|---|---|
| ||
attributes:
application:
version: ‘2.0.0’ |
Vagrant の場合
Vagrantfile の chef.json に Hash で指定します。
コード ブロック | ||
---|---|---|
| ||
config.vm.provision :chef_solo do |chef| chef.json = {
application: {
version: ‘2.0.0’
}
} |
Knife の場合
knife node edit コマンドを実行し、Json ファイルを直接編集して指定します。
コード ブロック |
---|
"normal": {
"application": {
"version": "2.0.0"
}
} |
※ knife での運用はしていないので、間違っているかもしれません。
デフォルト値を決める
Attribute にはデフォルト値をあらかじめ指定しておくことができます。
Attribute のデフォルト値は専用のファイルに記述します。
このファイルは chef generate attribute コマンドで生成できます。
...
デフォルト値を決める
Attribute にはあらかじめデフォルト値を指定しておくことができます。
Attribute のデフォルト値は専用のファイルに記述します。
このファイルは chef generate attribute コマンド で生成できます。
コード ブロック |
---|
$ chef generate attribute ./ default |
これで ./attributes ディレクトリに default.rb という名前でファイルが生成されます。
このファイルに、以下のようにデフォルト値を定義します。生成されたファイルに、以下のようにデフォルト値を定義します。
コード ブロック | ||
---|---|---|
| ||
default[‘application’'application'][‘version’'version'] = ‘1'1.0.0’ |
0' |
Attribute の Key は default[<Cookbook 名>][<任意の Attribute 名>] とするのが一般的なようです。
jenkins Cookbook であれば、次のようなイメージです。
コード ブロック |
---|
default['jenkins']['version'] = '1.0.0' |
Attribute の値を Recipe で使用する
Recipe から Attribute の値を参照するには、node オブジェクトを使用します。 を使用します。
例えば、Kitchen で次のように で次のように Attribute を指定したときは、
コード ブロック | ||
---|---|---|
| ||
attributes: application: version: '2.0.0' |
Recipe では次のように値を参照します。
コード ブロック | ||
---|---|---|
| ||
application_version = node[‘application’'application'][‘version’'version'] # application_version == '2.0.0' |
jenkins Cookbook を Attribute に対応させる
何を Attribute にするか
Cookbook の設計次第で何を Attribute にするかは変わりますが、今回は次の項目を Attribute にしてみましょう。
Jenkins のバージョン
特定のバージョンの Jenkins をインストールしたくなったときに、Recipe を直したくない
同じ Recipe で複数のバージョンの Jenkins をインストールできるようにしておきたい
Jenkins の rpm ファイルの URL
将来的に rpm ファイルの URL が変更されたときに、Recipe を直したくない
Jenkins の実行ユーザー
プロビジョン先のサーバーによっては実行ユーザーを変えないといけないかもしれない
ヒント
Attribute の名前
一般的には、以下のように node[<Cookbook 名>][<任意の Attribute 名>] とすることが多いようです。
コード ブロック | ||
---|---|---|
| ||
attributes:
<Cookbook 名>:
<任意の Attribute 名>: |
Recipe では cookbook_name Method [ http://docs.opscode.com/dsl_recipe_method_cookbook_name.html ] を用いることで、自身の Cookbook 名を取得することもできます。
コード ブロック |
---|
value = node[cookbook_name]['attribute'] |
※ ./attribute/default.rb では cookbook_name Method を使用できません。
Kitchen で確認
Attribute への対応が完了したら、.kitchen.yml を編集し、Kitchen インスタンスで動作チェックをしてみましょう。
ヒント | ||
---|---|---|
Recipe では cookbook_name メソッド を利用して自分の Cookbook の名前を取得できます。
|
Attribute に値を指定する方法
Attibute の指定方法はプロビジョニングの方法により異なります。
Kitchen の場合
.kitchen.yml の attributes に YAML 形式で指定します。
コード ブロック | ||
---|---|---|
| ||
attributes:
application:
version: '2.0.0' |
Vagrant の場合
Vagrantfile の chef.json に Hash で指定します。
コード ブロック | ||
---|---|---|
| ||
config.vm.provision :chef_solo do |chef|
chef.json = {
application: {
version: '2.0.0'
}
}
end |
Knife の場合
knife node edit コマンドを実行し、Json ファイルを直接編集して指定します。
コード ブロック |
---|
"normal": {
"application": {
"version": "2.0.0"
}
} |
※ knife での運用はしていないので、間違っているかもしれません。
実際に Attribute を使う
ここまでで、なんとなく Attribute というのがどういうものかがわかったら、前回作成した Cookbook を Attribute に対応させてみましょう。
次のページ へ進んでください。