解決したい課題
chef-client の設定ファイルである client.rb に追記・修正したい場合は、通常 chef-client cookbook を使用します。
しかし、この方法では chef-client は すでにBootstrapされている前提なので、例えば『Bootstrap時にカスタマイズした client.rb ファイルを配布したい』という要件があった場合、採用することができません。
本記事では、公式で紹介されていた Bootstrap の Custom Templates を使って、上記要件を満たす方法をご紹介します。
knife bootstrap時にカスタマイズした client.rb を配布する方法
以下で紹介されていた方法を使います。
knife bootstrap - Custom Templates
https://docs.chef.io/knife_bootstrap.html#custom-templates
(1) chef-full.erb ファイルに追記
knife bootstrapコマンドを実行する Chef Workstation上で、knife bootstrapの振る舞いを定義する chef-full.erbファイルをカスタマイズします。直接カスタマイズしてしまってもいいのですが、念の為、Chef-repo直下/.chef/bootstrap/ 以下あたりにコピーしてからカスタマイズしましょう。
$ mkdir .chef/bootstrap
$ cp -ip $(find /opt/chefdk/embedded/lib/ruby -type f -name chef-full.erb) .chef/bootstrap/.
chef-full.erbのパスは環境によって少し異なります。/opt/chefdk/embedded/lib/ruby配下でchef-full.erbを find してみてください
chef-full.erb ファイルの以下あたりに client.rbに追記したい内容を記述してみてください。ここでは、Chef::Config[:follow_client_key_symlink] = true という記述を追記します。
cat > /etc/chef/client.rb <<'EOP'
<%= config_content %>
EOP
# 以下を追記
cat >> /etc/chef/client.rb <<'EOP'
Chef::Config[:follow_client_key_symlink] = true
EOP
(2) erbファイルを指定して knife bootstrap
chef-full.erb ファイルのカスタマイズが終わったら、実際に knife bootstrap してみましょう。以下の例のように --bootstrap-template オプションで先程カスタマイズした chef-full.erb を指定してあげてください。
$ knife bootstrap vcent74 --sudo -N vcent74 --bootstrap-template .chef/bootstrap/chef-full.erb
毎回、--bootstrap-template オプションをつけるのが面倒だという方は、knifeコマンドの設定ファイルである .chef/knife.rbファイルに以下の記述をつけてあげることで省略可能です。
knife[:bootstrap_template] = "#{current_dir}/bootstrap/chef-full.erb"
補足
本記事でご紹介した『bootstrap時に カスタマイズした client.rb を配布する』方法は、以下の記事で紹介されている AIX における Bootstrapも問題を回避する際にも有効です。
AIX V7 にて chef-client を使用する際の integer 137438954242 too big to convert to `int' エラー