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