EnvironmentsやRolesにRuby DSLを使いたい

Chef-Zeroがサポートしていないので、そのままではEnvironmentsやRolesにRuby DSLはつかえません。

私はあまりRoleなどにRubyを使わないですが、もしRuby DSLをつかいたいなら、knife.rbにて都度JSONに変換しちゃいましょう。

Dir.glob("roles/*.rb").each do |rf|
  role = Chef::Role.new
  role.name(File.basename(rf, ".rb"))
  role.from_file(rf)
  File.open(rf.gsub(".rb", ".json"),"w") {|f| f.puts(role.to_json)}
end

local_mode true
chef_repo_path File.expand_path("../", __FILE__)

## -- snip --

ただし、knife editほか通常のワークフロー用コマンドの対象外になるので注意。

JSONファイルは.gitignoreに追加しておきましょう。

/roles/*.json
Fork me on GitHub