puppet の依存関係とかで graph オプションが便利
puppet の依存関係で困った時の対処
に、 --graph option を利用して、依存関係やリソースの一覧を見える化して眺めるとといいことがあるかもしれません。
詳細はこちらです。
出し方
puppet apply に --graph オプションを付与すると graphdir で指定された場所に .dot フォーマットで生成されます。--graphdir= オプションで画像の生成先を指定することもできます。
テキストファイルなのでそのまま開いて頑張って読むこともできますが、せっかくなので画像化してみます。画像化するにあたり puppetlbas では
- omnigraffle https://www.omnigroup.com/omnigraffle/
- graphviz http://www.graphviz.org/
を紹介していますが、OmniGraffle があればそちらのほうがいいとは思うのですが何分高いので graphviz (free)を利用してみます。
# OS X % brew install graphviz
こんな感じで .dot から .png へ
% dot -Tpng resources.dot -o resources.png
みてみよう!
% open resources.png
ちょっと深追い
せっかくなので、複数の依存方法がどう可視化できるものなのか試してみました。 (この時の環境は Puppet 4.3.1 / Vagrant Box:puppetlabs/centos-7.2-64-puppet)
検証用の manifest
- 以下以外に
require function,contain function,include functionを利用した時の読み込み先として nginx, sshd, chrony の manifest も用意 - 上記 function のドキュメントはこちら
class test::require_parameter {
file {'/tmp/rp-test1':
ensure => present,
content => "test",
}
file {'/tmp/rp-test2':
ensure => present,
content => "test",
require => File['/tmp/rp-test1']
}
file {'/tmp/rp-test3':
ensure => present,
content => "test",
require => File['/tmp/rp-test2']
}
}
class test::require_function {
require nginx
contain sshd
include chrony
file {'/tmp/rf-test1':
ensure => present,
content => "Hi.",
}
}
class test::arrow_operator {
file {'/tmp/ao-test1':
ensure => present,
content => "test",
}
file {'/tmp/ao-test2':
ensure => present,
content => "test",
}
file {'/tmp/ao-test3':
ensure => present,
content => "test",
}
File['/tmp/ao-test1'] -> File['/tmp/ao-test2'] -> File['/tmp/ao-test3']
}
結果
resources.png

relationships.png

個人的な発見としては
require parameterやarrow operatorは複数の依存でもちゃんと数珠つなぎに見える化されるrequire functionは、class 先の依存関係までは評価されていない- このあたり ->

- このあたり ->
include functionは resources としては認識されるけど依存関係は関係ないことがわかるcontain functionは relationships 上では矢印として表現されておらず、resources を見ると class がまるっと配下になっている(contain という意味そのものか)- このあたり ->

- このあたり ->
未だに Puppet の依存関係ではまるのでちゃんと整理したい...