Knife-ZeroはPolicyfileをサポートしています。
Policyfileを使用する場合、次の2通りから利用法を選びます。
chef export
を使用して、ローカルモード用ポリシーを出力する。
local
に固定されます。knife serve
とchef push
を併用し、Chef-Serverと同じ仕様で使う。
chef export
を利用する場合。ワークステーションのknife.rb
に次の内容を追加します。
use_policyfile true
versioned_cookbooks true
policy_document_native_api true
まずPolicyfileの内容をChef-Repoに反映します。
注意:
chef export ./ -f
を実行すると./chef
ディレクトリを空にして上書きします。knife.rb
などの設定ファイルはプロジェクトのルートディレクトリを使用することをおすすめします。
chef install
または chef update
を実行し、Policyfile.lock.json
を作成します。chef export ./ -f
を実行し、以下のディレクトリを更新します。
.chef/
cookbook_artifacts/
policies/
policy_groups/
zero bootstrap
では--policy-name
を使用します。
$ knife zero bootstrap HOST_NAME --policy-name POLICY_NAME -N NODE_NAME
例えば、--policy-name build
としてBootstrapするとclient.rb
に次の内容を追加します。
use_policyfile true
versioned_cookbooks true
policy_document_native_api true
policy_name build
policy_group local
zero converge
は通常どおりです。
$ knife zero converge "QUERY"
また、-n/--named-run-list
でnamed runlist
を指定します。
$ knife zero converge "QUERY" -n NAMED_RUNLIST
Policyfileの更新を毎回確実に適用する場合は、knife.rb
に次の内容を追記します。
knife[:before_bootstrap] = 'chef update && chef export ./ -f'
knife[:before_converge] = 'chef update && chef export ./ -f'
knife serve
とchef push
を利用する場合。ワークステーションのknife.rb
に次の内容を追加します。
use_policyfile true
versioned_cookbooks true
policy_document_native_api true
chef_server_url "http://localhost:8889" # chef push用
まずローカルのChef-Zeroを起動します。chef push
やchef show-policy
などを実行する時のみ必要です。
$ knife serve
Serving files from:
repository at /Users/sawanoboriyu/worktemp/knife-zero_policy
Multiple versions per cookbook
>> Starting Chef Zero (v4.5.0)...
...
別のターミナルから任意のgroup名を付与してchef push
します。
$ chef push -c knife.rb mygroup policies/mypolicy.rb
pushが終わったら、knife serve
を終了します。
zero bootstrap
では--policy-name
、--policy-group
を使用します。
$ knife zero bootstrap HOST_NAME --policy-name POLICY_NAME --policy-group POLICY_GROUP_NAME -N NODE_NAME
例えば、--policy-name mypolicy, --policy-group mygroup
としてBootstrapするとclient.rb
に次の内容を追加します。
use_policyfile true
versioned_cookbooks true
policy_document_native_api true
policy_name mypolicy
policy_group mygroup
zero converge
は通常どおりです。
$ knife zero converge "QUERY"
また、-n/--named-run-list
でnamed runlist
を指定します。
$ knife zero converge "QUERY" -n NAMED_RUNLIST