レシピの最後のあたりで、以下の様に書く。
Rubyの地の文で書く例
recipes/default.rb
...
require 'json'
IO.write('/tmp/node.json', JSON.pretty_generate(node.to_hash))
nodeオブジェクトはhashを拡張したもの(mash)で、.to_hashでdefault, force_defaultなどがマージされる。
attributeの値のチェックのみならこれで良いが、レシピ実行により変更されたOSの最新情報も取り込みたいのであれば、ohaiをリロードして、Ruby blockで書き出す。
ruby_blockによる例
recipes/default.rb
...
ohai 'reload'
ruby_block 'write node.json' do
block do
require 'json'
IO.write('/tmp/node.json', JSON.pretty_generate(node.to_hash))
end
end
#参考
ChefのAttributeについて
要素がarrayの場合、レベルによってマージのされ方が異なる。なのでユーザーによる安易なマージは危険かもしれない。マージはChef自身にさせた方が無難か。
InSpecでchefのattributeを使う
書き出したattributeをInSpecで使う方法