Policyfileをつかう

Knife-ZeroはPolicyfileをサポートしています。

Requirements

Strategy

Policyfileを使用する場合、次の2通りから利用法を選びます。

chef exportを利用する場合。

Setup

ワークステーションのknife.rbに次の内容を追加します。

use_policyfile true
versioned_cookbooks true
policy_document_native_api true

Workflow

まずPolicyfileの内容をChef-Repoに反映します。

注意: chef export ./ -f を実行すると ./chefディレクトリを空にして上書きします。 knife.rbなどの設定ファイルはプロジェクトのルートディレクトリを使用することをおすすめします。

  1. chef install または chef updateを実行し、Policyfile.lock.jsonを作成します。
  2. chef export ./ -fを実行し、以下のディレクトリを更新します。
    • .chef/
    • cookbook_artifacts/
    • policies/
    • policy_groups/

Bootstrap

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

Converge

zero convergeは通常どおりです。

$ knife zero converge "QUERY"

また、-n/--named-run-listnamed runlistを指定します。

$ knife zero converge "QUERY" -n NAMED_RUNLIST

Tighter Integration

Policyfileの更新を毎回確実に適用する場合は、knife.rbに次の内容を追記します。

knife[:before_bootstrap] = 'chef update && chef export ./ -f'
knife[:before_converge]  = 'chef update && chef export ./ -f'

knife servechef pushを利用する場合。

Setup

ワークステーションのknife.rbに次の内容を追加します。

use_policyfile true
versioned_cookbooks true
policy_document_native_api true
chef_server_url "http://localhost:8889"  # chef push用

Workflow

まずローカルのChef-Zeroを起動します。chef pushchef 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を終了します。

Bootstrap

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

Converge

zero convergeは通常どおりです。

$ knife zero converge "QUERY"

また、-n/--named-run-listnamed runlistを指定します。

$ knife zero converge "QUERY" -n NAMED_RUNLIST
Fork me on GitHub