wrapper使え使えと言われますが、できないことが多く見えすぎてこれどうするの…と途方に暮れる方も多そうです。
例えば
chef-percona
https://github.com/phlipper/chef-percona
## Atttibute
default["percona"]["version"] = "5.6"
default["percona"]["server"]["package"] = "Percona-Server-server-#{version.tr('.', '')}"
...
## recipes/server.rb
package node["percona"]["server"]["package"] do
action :install
end
となっていてインストール時にマイナーバージョンが指定できません。
こういう場合はversionを指定するために全部書き換えないとダメ…というわけではないです。
wrapper cookbookでバージョンを指定できるよう変更する例。
# wrapper-cookbook::default.rb
include_recipe 'percona::server'
r = resources(package: 'Percona-Server-server-56')
r.version('5.6.16-rel64.1.el6')
例えばこのようにRubyからChefのResourceを呼び出して直接パラメータを変更することで、Resourceの実行前に挙動を変更することが出来ます。
attribute化するならこんな感じでしょうか。
# wrapper-cookbook attribute/default.rb
default["percona"]["server"]["package"]["version"] = '5.6.16-rel64.1.el6'
# wrapper-cookbook::default.rb
include_recipe 'percona::server'
r = resources(package: node["percona"]["server"]["package"])
r.version( node["percona"]["server"]["package"]["version"] )
※すいません。attributeのほうは動作確認していません
参考:
・Changing Chef Resources at Runtime
https://sethvargo.com/changing-chef-resources-at-runtime/