- 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.
- IBM Rational ClearCase 7.0: Master the Tools That Monitor, Analyze, and Manage Software Configurations
- UG NX10.0從新手到高手
- Microsoft SharePoint 2010 Administration Cookbook
- BIM與Unity 3D開發實例詳解
- 二維計算機繪圖教程:二維CAD工程師取證全程指導
- Small Business Server 2008 – Installation, Migration, and Configuration
- Premiere pro CC中文版自學視頻教程
- 從零開始:Illustrator CC中文版基礎培訓教程
- 中文版3ds Max 2016/VRay效果圖制作技術大全
- Adobe創意大學InDesign產品專家認證標準教材(CS6修訂版)
- Photoshop CC 2018基礎教程(第3版)
- Learning Dojo
- 中文版Corel DRAW X5案例實訓教材
- Photoshop CS6圖像處理立體化教程
- UG NX 11中文版從入門到精通