Visualizing Puppet manifest resources and relationships

Puppet allows you to generate .dot files that show the resources and relationships present in the manifest files that you have. To generate these .dot files without actually applying the manifest files, perform the following command:

puppet apply /path/to/manifest.pp --noop --graph

This will place three .dot files in the output directory for graphs, by default this is /var/lib/puppet/state/graphs on CentOS and Ubuntu. You can use the GraphViz suite to convert these .dot files into e.g. .png files. First, install the GraphViz suite:

yum -y install graphviz

sudo apt-get -y install graphviz

Now we can generate the .png files:

dot -Tpng /var/lib/puppet/state/graphs/ -o /tmp/resources.png
dot -Tpng /var/lib/puppet/state/graphs/ -o /tmp/relationships.png
dot -Tpng /var/lib/puppet/state/graphs/ -o /tmp/expanded_relationships.png

Now open the .png files with your favorite image viewer. You may also want to take a look at the Gephi program to display the .dot files directly.

As an example, we may have a module that installs the NTP daemon:

class ntp {

  package { 'ntp':
    ensure => installed,

  service { 'ntp':
    ensure  => running,
    enable  => true,
    require => Package['ntp'],

  file { '/etc/ntp.conf':
    source => 'puppet:///modules/ntp/ntp.conf',
    notify => Service['ntp'],

And a site.pp file which says that by default servers should use this module:

node default {
  include ntp

Then the resulting graphs would look like this (figures edited to make them smaller):



Expanded relationships

2 thoughts on “Visualizing Puppet manifest resources and relationships

  1. Permalink  ⋅ Reply

    Glen Low

    June 20, 2015 at 4:36am

    You could also display them nicely in Instaviz, which uses an embedded Graphviz to display and manipulate graphs on iOS. I just released 2.0, do check it out!

Leave a Reply

Your email will not be published. Name and Email fields are required.