- Puppet 2.7 Cookbook
- John Arundel
- 481字
- 2021-04-02 18:19:59
Drawing dependency graphs
Dependencies can get complicated quickly, and it's easy to end up with a circular dependency (where A depends on B which depends on A) which will cause Puppet to complain and stop work. Fortunately, Puppet's --graph
option makes it easy to generate a diagram of your resources and the dependencies between them, which can be a big help in fixing such problems.
Getting ready…
Install the graphviz
package to view the diagram files as shown in the following code snippet:
# apt-get install graphviz
How to do it…
- Create the file
/etc/puppet/modules/admin/manifests/ntp.pp
with the following code containing a circular dependency:class admin::ntp { package { "ntp": ensure => installed, require => File["/etc/ntp.conf"], } service { "ntp": ensure => running, require => Package["ntp"], } file { "/etc/ntp.conf": source => "puppet:///modules/admin/ntp.conf", notify => Service["ntp"], require => Package["ntp"], } }
- Copy your existing
ntp.conf
file into Puppet:# cp /etc/ntp.conf /etc/puppet/modules/admin/files
- Include this class on a node:
node cookbook { include admin::ntp }
- Run Puppet as follows:
# puppet agent --test info: Retrieving plugin info: Caching catalog for cookbook.bitfieldconsulting.com err: Could not apply complete catalog: Found 1 dependency cycle: (File[/etc/ntp.conf] => Package[ntp] => File[/etc/ntp.conf]); try using the '--graph' option and open the '.dot' files in OmniGraffle or GraphViz notice: Finished catalog run in 0.42 seconds
- Run Puppet with the
--graph
option as suggested:# puppet agent --test --graph
- Check that the graph files have been created:
# ls /var/lib/puppet/state/graphs/ expanded_relationships.dot relationships.dot resources.dot
- Create a graphic of the relationships graph:
# dot -Tpng -o relationships.png /var/lib/puppet/state/graphs/relationships.dot
- View the graphic with the following command:
# eog relationships.png
How it works…
When you run puppet --graph
(or enable the graph
option in puppet.conf
) Puppet will generate three graphs in DOT format (a graphics language).These are as follows:
resources.dot
: shows the hierarchical structure of your classes and resources, but without dependenciesrelationships.dot
: shows the dependencies between resources as arrows, as in the preceding exampleexpanded_relationships.dot
: is a more detailed version of the relationships graph
The dot
tool (part of the graphviz
package) will convert these to an image format such as PNG for viewing.
In the relationships graph, each resource in your manifest is shown as a balloon, with arrowed lines connecting them to indicate the dependencies. You can see that in our example, the dependencies between File["/etc/ntp.conf"]
and Package["ntp"]
form a circle.
To fix the circular dependency problem, all you need to do is remove one of the dependency lines and thus break the circle.
There's more…
Resource and relationship graphs can be useful even when you don't have a bug to find. If you have a very complex network of classes and resources, studying the resources graph can help you see where to simplify things. Similarly, when dependencies become too complicated to understand from reading the manifest, the graphs can be a much more useful form of documentation.
- TArch 8.5天正建筑軟件標準教程
- UG NX 12.0中文版完全自學一本通
- 擁抱開源(第2版)
- AI圖像處理:Photoshop+Firefly后期處理技術基礎與實戰
- 零基礎學數碼攝影后期
- Photoshop CC 服裝設計經典實例教程
- 3ds Max 2015中文版從入門到精通
- Origin科技繪圖與數據分析
- CAD/CAM應用教程
- 構筑敏捷的開發團隊:微軟Visual Studio 2010實戰兵法
- Altium Designer 21實戰從入門到精通
- Photoshop CC設計與應用任務教程
- Photoshop+Firefly從入門到精通
- Photoshop 2021中文版入門、精通與實戰
- 中文版CATIA V5 技術大全