- 更新日: 2014年7月17日
- Vagrant & Chef
WARN: Cloning resource attributes for ~ Chefでの警告
表題は、Chef で配列やハッシュをループさせて処理する時にたまに遭遇する警告。Chef 利用時の、WARN: Cloning resource attributes for ~ についてです。
WARN: Cloning resource attributes for 警告
昨日の、Chefでサービス(デーモン)の稼働と停止をchkconfigで設定 | EasyRamble での例で、最初以下のように書いていてこの警告に遭遇しました。off_services には chkconfig off にする不要なデーモンが配列で入っているとします。
site-cookbooks/base_cookbook/recipes/chkconfig_services.rb
1 2 3 4 5 6 7 8 |
off_services.each do |service| bash 'stop_unnecessary_service' do only_if "chkconfig --list | grep #{service} | grep 3:on" code <<-EOC chkconfig #{service} off EOC end end |
これで provisioning 実行すると…
1 2 3 4 5 |
$ vagrant provision ... ==> default: [2014-07-16T07:42:08+00:00] WARN: Cloning resource attributes for bash[stop_unnecessary_service] from prior resource (CHEF-3694) |
WARN: Cloning resource attributes for bash 発生。
同じ名前の bash リソース実行が原因
この警告は、ループの中で同じ名前の bash リソースが実行されるのが原因。今回の場合 stop_unnecessary_service という名前の bash リソースがループで何回も実行されている。なのでループの中で、1つずつ名前を変えるようにすれば解決します。
site-cookbooks/base_cookbook/recipes/chkconfig_services.rb
1 2 3 4 5 6 7 8 |
off_services.each do |service| bash "stop_#{service}_service" do only_if "chkconfig --list | grep #{service} | grep 3:on" code <<-EOC chkconfig #{service} off EOC end end |
以上のように bash リソースで指定する文字列に #{service} で固有のデーモン名を渡す。こうすると、WARN: Cloning resource attributes for の警告が出なくなります。
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- Chef で iptables の設定
- ChefでSSH接続用の公開鍵をサーバーに設置
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
Leave Your Message!