2
0

More than 5 years have passed since last update.

Chefでユーザーによるdeep_mergeを必要としないnodeオブジェクトのjson書き出し

Last updated at Posted at 2018-06-05

レシピの最後のあたりで、以下の様に書く。

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で使う方法

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0