解決したい課題
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' エラー