Puppet Manual
Puppet Manual
Overview
Puppet Dashboard is a web interface for Puppet. It can view and analyze Puppet reports, assign
Puppet classes and parameters to nodes, and view inventory data and backed-up file contents.
Chapters
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
Overview
Puppet Dashboard is a Ruby on Rails web app that interfaces with Puppet. It will run on most
modern Unix-like OSes (including Mac OS X and most Linux distributions), requires a certain
amount of supporting infrastructure, and can be deployed and served in a variety of ways.
…after which you can configure Dashboard further and enable optional features, but the main
functionality will be on-line and working smoothly. If you are trying to upgrade Puppet Dashboard
instead of installing it from scratch, see the chapter of this manual on upgrading. If youʼre looking
for a vastly simplified install and maintenance process, download a free trial of Puppet Enterprise.
Installing Dependencies
Dashboard is distributed with the version of Rails it uses, as well as most of its other dependencies,
but youʼll have to ensure that the following software is installed:
Ruby or Ruby Enterprise Edition version 1.8.7 — Dashboard 1.2 no longer supports older
versions of Ruby, and Ruby 1.9.2 is not yet fully supported.
RubyGems
Rake version 0.8.3 or newer
MySQL database server version 5.x
Ruby-MySQL bindings version 2.7.x or 2.8.x
On most OSes, youʼll be able to install all of these easily with the OSʼs package tools.
Due to issues with Ubuntu 10.04 LTSʼs version of Ruby, you can install most dependencies from
packages but must manually build gem. Additionally, if you encounter performance issues, you may
wish to manually upgrade your version of Ruby to patch level 299 or higher.
These instructions assume a fresh install of the OS, and may differ depending on its current
configuration. The commands must be run from one of the standard shells, preferably bash, dash,
or zsh.
2. Install the RubyGems package system, using the following shell script — do not use the rubygems
packaged with the operating system:
As Dashboard no longer supports the version of Ruby used by version 5.x enterprise Linuxes,
installing Dashboard on a 5.x server requires that you maintain your own installation of Ruby,
which is beyond the scope of this manual. If you need to deploy on a pre-6.x version of enterprise
Linux and donʼt have the resources to maintain your own Ruby packages, you should consider
using Puppet Enterprise.
Packages
The best way to install Dashboard is with the official Deb and RPM packages provided by Puppet
Labs. These packages are configured with the correct dependencies, and make for easier upgrades
when new versions are released.
Puppet Labs ships raw packages, and also maintains Yum and Apt repositories. With each of these
methods, Dashboard will be installed in /usr/share/puppet-dashboard, and the puppet-dashboard
user and group will own the files; this user will be created if it doesnʼt already exist.
# /etc/yum.repos.d/puppetlabs.repo
[puppetlabs]
name=Puppet Labs Packages
baseurl=http://yum.puppetlabs.com/base/
enabled=1
gpgcheck=1
gpgkey=http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
You will be prompted to install the Puppet Labs release key as part of the installation process.
# /etc/apt/sources.list
deb http://apt.puppetlabs.com/ubuntu lucid main
deb-src http://apt.puppetlabs.com/ubuntu lucid main
Git
If youʼre unable to use the Dashboard packages on your system, the next best way to install
The advantage of using Git is that you have an easier upgrade path: you donʼt have to manually
remember which files to preserve when upgrading, and the actual process of upgrading is much
simpler. The disadvantage is that it basically turns Git into another dependency. See upgrading for
more details.
If you havenʼt installed Dashboard from a package, you must create a user and group for
Dashboard and chown all its files to be owned by that user and group:
Source Tarballs
If you prefer not to use Git, you can simply download the most recent release of Puppet Dashboard
and extract it into your install location:
wget http://puppetlabs.com/downloads/dashboard/puppet-dashboard-1.2.0.tar.gz
tar -xzvf puppet-dashboard-1.2.0.tar.gz
mv puppet-dashboard-1.1.1 /opt/puppet-dashboard
If you havenʼt installed Dashboard from a package, you must create a user and group for
Dashboard and chown all its files to be owned by that user and group.
Configuring Dashboard
Dashboard needs a config/database.yml file and a config/settings.yml file. It ships with
functional examples of each, as config/database.yml.example and
config/settings.yml.example respectively.
database.yml
The database settings file is located at config/database.yml, and an example file can be found at
config/database.yml.example. This file should be a YAML hash with one key for each of the
standard Rails environments: production, development, and test.
You will likely only ever be using the production environment. You may wish to use the same
database for the production and development environments, as this can remove the pain of having
to specify RAILS_ENV=production for every rake task and gives you the option of running a
temporary instance with the same data in the development environment (if you ever need to collect
detailed error messages, for example). You should not use the same database for the test
environment, as it gets destroyed every time the tests are run.
Each environment in the database.yml file should be a hash with keys for database, username,
password, encoding, and adapter. At the moment, adapter can only be mysql, and encoding should
always be utf8.
Do not give Dashboard the keys to MySQLʼs root user account — create a new database user for it
(preferably named “dashboard”) and choose a secure password.
Since the database.yml file has to contain Dashboardʼs database user and password in cleartext,
you should set its mode to 660 (or some other world-unreadable mode). If youʼve created the file
while logged in as a normal user, be sure to chown it to the Dashboard user.
settings.yml
The general settings file should be a YAML hash. When first configuring Dashboard, you should
simply make a copy of settings.yml.example, as itʼs unlikely that youʼll need to change any
settings yet. (Although you may wish to change date_format, custom_logo_url, or
no_longer_reporting_cutoff.)
This will require that you use some external MySQL administration utility;1 in the standard
command-line mysql client, the commands will look something like this:
Tuning
After creating the database and user, youʼll need to configure MySQLʼs maximum packet size to
permit larger rows in the database. On rare occasions, Dashboard can send up to 17MB of data in a
single row, and to ensure that it will function under load, you should edit /etc/mysql/my.cnf to
increase the limit to at least 24MB (we recommend 32MB or more):
# Allowing 32MB allows an occasional 17MB row with plenty of spare room
max_allowed_packet = 32M
Either restart the MySQL server for this setting to take effect, or run the following command from
the mysql client:
Preparing Schema
Once Dashboard has its database, it can create its tables, but this has to be done manually with the
db:migrate rake task. For typical use with the production environment:
For developing the software using the development and test environments:
This will start a Dashboard instance on port 3000 using the “production” environment. Youʼll be
able to view Dashboardʼs UI in a web browser at http://dashboardserver:3000, and your puppet
master can now be configured to use it for reporting and node classification. Note that:
Running under WEBrick isnʼt feasible for production use, since it canʼt handle concurrent requests,
but it can be useful when first getting Dashboard and Puppet configured. If youʼd rather skip
straight to a production-ready deployment, see the relevant section below.
Configuring Puppet
Puppet Dashboard has two main functions: report viewer/analyzer, and node classifier. Puppet can
use either of these functions or both of them. Once you have puppet configured, youʼll need to
restart puppet master.
Add the http report handler to your puppet masterʼs reports setting and set reporturl to your
Dashboard instanceʼs reports/upload URL:
Puppet 0.25.x lacks the http report handler, so youʼll need to do a few extra steps.
If the puppet master is a different machine, youʼll need to SCP the file to it first. Also note that
you may need to edit the report processor if youʼre running Dashboard on a different server or
port, as it assumes Dashboard is running on localhost:3000.
If your puppet master server is also running puppetd AND it has pluginsync turned on, youʼll
also need to change the agentʼs libdir:
You can use Dashboardʼs external node classifier (ENC) alongside traditional Puppet DSL node
definitions. However, if you use your own custom ENC (or LDAP nodes), you wonʼt be able to use
Dashboardʼs ENC.
To use Dashboardʼs ENC, youʼll need to set the puppet masterʼs node_terminus and
external_nodes settings, and make sure the master can access Dashboardʼs node classification
script, which is located at bin/external_nodes. This scriptʼs behavior can be overridden by setting
environment variables; unless youʼre serving Dashboard over HTTPS, the only one youʼll need to set
is PUPPET_DASHBOARD_URL.
After restarting puppet master, you can run one of your puppet agents with puppet agent --test
This means the report arrived as expected, and will be processed once the delayed job workers are
active.
A future version of Dashboard will ship with init scripts which will let you manage the workers with
Puppet or your platformʼs service tools, but in the meantime, you must either use the provided
monitor script or start non-daemonized workers individually with the provided rake task.
Dashboard ships a worker process manager, which can be found at script/delayed_job. This
toolʼs interface resembles an init script, but it can launch any number of worker processes as well
as a monitor process to babysit these workers; run it with --help for more details. delayed_job
requires that you specify RAILS_ENV as an environment variable. To start four worker processes and
the monitor process:
In most configurations, you should run exactly as many workers as the machine has CPU cores.
For additional reliability, you might want to use a standard service monitoring tool like god, monit,
or runit to supervise the script/delayed_job monitor. You can also look into other ways to run
delayed_job workers, as itʼs becoming a fairly standard component in the Rails world.
We donʼt recommend using rake-started workers for production, but they can be useful when
testing or developing Dashboard. To start a single worker in the production environment:
First, youʼll need to ensure that Apache 2.2 and Phusion Passenger are installed. The Passenger
website has installation instructions, but itʼs quite possible that your OS vendor has already
packaged Passenger, which can make for a much easier install.
Once Passenger is enabled, copy Dashboardʼs example vhost from ext/dashboard-vhost.conf into
Apacheʼs sites-enabled directory and edit it to match your Dashboard installation. Passenger runs
Rails apps in the production environment by default, so you wonʼt need to explicitly set the
environment (with the RailsEnv directive in the vhost configuration) unless you plan to run it in
development mode. The parts of the file youʼll need to edit are:
The port on which to serve Dashboard. This defaults to 80, but if you want to serve it on Puppetʼs
preferred port of 3000, youʼll need to change the opening tag of the vhost definition block to
<VirtualHost *:3000> and insert a Listen 3000 directive above it.
The subdomain youʼll be serving Dashboard from, which is generally just the fully-qualified
domain name of this machine. Put this in the ServerName directive.
The location of Dashboardʼs public directory, which should go in both the DocumentRoot
directive and the <Directory> block opening tag.
Your preferred log file locations, which go in the ErrorLog and CustomLog directives.
The paths to Passenger, mod_passenger, and Ruby. But before you tweak these, scan the rest of
Apacheʼs config files: if you installed Passenger from a vendor package, it probably already
inserted a global config file to make sure itʼs loaded, in which case you can safely comment out
the first three lines of this vhost config. Otherwise, point the LoadModule, PassengerRoot, and
PassengerRuby directives at the top of the file to the correct files and directories.
If you prefer to roll your own vhost config, see the Passenger userʼs guide and note that:
The DocumentRoot should point to Dashboardʼs public directory, which needs to allow all access
and have the MultiViews option turned off.
Passenger will need either the per-server RailsAutoDetect directive set to On (which is its
default state), or a RailsBaseURI directive in the vhost definition.
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
1. Instead of creating a database manually, you can also use the db:create or db:create:all tasks, but these require that
Dashboardʼs MySQL user already exist and have the appropriate permissions on the requested database. Since youʼll likely
need to use raw SQL commands or another external tool to do that, you might as well just create the databases while youʼre
in there.↩
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
Overview
Upgrading Dashboard from a previous version generally consists of the following:
In addition, there are several tasks you must take into account when upgrading from certain
versions.
Upgrading Code
From Packages
Dashboard installations that used Puppet Labsʼ packages are the easiest to upgrade. If you installed
Dashboard with Yum:
From Git
Upgrading from Git is relatively straightforward, although you will have to re-chown all of
Dashboardʼs files after performing the upgrade.
Before checking out the new release, make sure that you havenʼt made any changes that would be
overwritten:
# git status
(And if you had to stash any edits, you can now apply them:
If they donʼt apply cleanly, you can abort the commit with git reset --hard HEAD, or read up on
how to resolve Git merge conflicts.)
From Tarballs
If you originally installed Dashboard from a source tarball, youʼll need to either pick out all of your
modified or created files and transplant them into the new installation, or convert your installation
to Git; either way, you should back up the entire installation first.
To convert an existing Dashboard installation to a Git repo, do something like the following,
replacing {version tag} with the version of Dashboard you originally installed:
git init
rm .gitignore
wget https://raw.github.com/puppetlabs/puppet-dashboard/{version
tag}/.gitignore
git add .
git commit -m "conversion commit"
git branch original
git remote add upstream git://github.com/puppetlabs/puppet-dashboard.git
git fetch upstream
git reset --hard tags/{version tag}
git merge --no-ff original
git reset --soft tags/{version tag}
git stash save "Non-ignored files which were changed after the original
As with a standard Git upgrade, youʼll need to re-chown all Dashboard files to the puppet-
dashboard user:
DB migrations are done with a rake task, and should be simple and painless when upgrading
between any two official releases of Dashboard.
Remember that Rails does not consider “production” its default environment, so you must specify it
manually for all rake tasks unless your RAILS_ENV environment variable is set or you are using the
same database in the production and development environments.
Youʼll need to run db:migrate once for each environment you use. The db:migrate task can be
safely run multiple times in the same environment.
After upgrading the code and the database, be sure to restart Dashboardʼs webserver.
Currently, the best way to manage these processes is with the script/delayed_job command,
which can daemonize as a supervisor process and manage the requested number of workers. To
start four workers and the monitor process:
Since this can potentially take a long time, depending on your installationʼs report history, it isnʼt
performed when running rake db:migrate. Instead, you should run:
This task will convert the most recent reports first, and if it is interrupted, it can be resumed by just
re-running the command.
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
Overview
Now that youʼve bootstrapped Dashboard for basic production-level use, you can configure it to:
Note that all rake tasks should be performed from a shell in the directory that contains Dashboardʼs
code. Any relative paths mentioned below refer to locations within this directory. If you are running
Dashboard in the recommended “production” environment, note that Rails does not consider
production its default environment, and you must specify it manually with the RAILS_ENV
environment variable when running any rake tasks.
Advanced Features
By default, Dashboard only responds to requests from a user or a puppet master. However, if you
allow it to pull data from your puppet master, you can enable two extra features: the inventory
service, and the file viewer.
Puppet uses SSL certificates to control which entities can make which requests to the puppet
master, so Dashboard has to obtain a signed cert before asking for facts or files. To do this, edit
config/settings.yml to ensure that the ca_server and ca_port settings match the address and
port of your puppet master, then run the following commands:
Youʼll need to sign the certificate request on the master by running puppet cert sign dashboard.
Then, from Dashboardʼs directory again, run:
With inventory support, Dashboard can display a complete list of facts on each nodeʼs detail page. It
also adds a new “Inventory Search” page which can search your entire site for nodes matching a
fact query.
Requirements: To use the inventory, you must be using Puppet 2.6.7 or later, configured to provide
the inventory service.
Once the puppet master is properly configured with a database-backed inventory, edit your puppet
masterʼs auth.conf file to grant Dashboard find and search access to /facts:
path /facts
auth yes
method find, search
allow dashboard
With the filebucket viewer, Dashboard can display the contents of different file versions when you
click on MD5 checksums in reports.
Requirements: To use the filebucket viewer, you must be using Puppet 2.6.5 or later and your agent
nodes must be configured to back up all files to a remote filebucket; this is done in your puppet
masterʼs site.pp manifest, where you must define a filebucket resource named “main”…
filebucket { "main":
server => "{your puppet master}",
path => false,
}
If you are using inspect reports for a compliance workflow, you must also set archive_files =
true in each agentʼs puppet.conf.
Once the site manifest has been properly configured, edit Dashboardʼs config/settings.yml to set
use_file_bucket_diffs to true and point file_bucket_server and file_bucket_port to your
puppet master. Restart Dashboard, and you should be able to view the contents of any file
mentioned in a report by clicking on its MD5 checksum. Diffs are not currently enabled, but will
appear in a future version of Dashboard.
Security
As Dashboard provides access to sensitive information and can make changes to your Puppet-
managed infrastructure, youʼll need some way to restrict access to it. Dashboard does not yet
provide authentication or authorization, so youʼll need to use external tools to secure it. Some
options include:
Host firewalling — The Dashboard serverʼs firewall (e.g. iptables) can be used to limit which
hosts can access the port Dashboard runs on.
stunnel or ssh tunneling — You can use tunneling to provide an encrypted connection between
hosts, e.g. if the Puppet Master and Puppet Dashboard are running on separate hosts. It can also
<Location "/">
Order allow,deny
Allow from 192.168.240.110 # your puppet master's IP
Satisfy any
AuthName "Puppet Dashboard"
AuthType Basic
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Location>
Notice that you need to leave an access exception for your puppet master(s). Although itʼs
possible to configure Puppet to use a password when connecting to Dashboard (by adding a
username and password to Puppetʼs reporturl and the URL used by the external_nodes script),
this currently requires patching Puppetʼs http report handler; see issue 7173 for more details.
HTTPS (SSL) Encryption — When serving Dashboard via Apache, you can encrypt traffic between
Puppet and the Dashboard. Using this requires a set of signed certificates from the puppet
master — see generating certs and connecting to the puppet master for how to obtain them. The
example configuration in ext/passenger/dashboard-vhost.conf includes a commented-out
vhost configured to use SSL. You may need to change the Apache directives
SSLCertificateFile, SSLCertificateKeyFile, SSLCACertificateFile, and
SSLCARevocationFile to the paths of the files created by the cert rake tasks.
If you have Dashboard set up to use HTTPS, youʼll need to add an https prefix to the
DASHBOARD_URL in the external_node script and potentially correct the port number (443, by
default). You may also need to change the CERT_PATH, PKEY_PATH, and CA_PATH variables if your
puppet masterʼs hostname is not puppet or if your ssldir is not /etc/puppet/ssl.
In order for reporting to work correctly via SSL, you will have to be running puppet master via
Passenger or some other app server/webserver combination that can handle SSL; reporting to an
SSL Dashboard is not supported when running puppet master under WEBrick. Youʼll also have to
change the reporturl setting in puppet.conf to start with “https” instead of “http”.
This information may be outdated, and is currently being checked for accuracy.
Performance
Puppet Dashboard slows down as it manages more data. Here are ways to make it run faster, from
easiest to hardest:
Make sure Dashboard is running in a production-quality web server, like Apache with Passenger.
Make sure Dashboard is running in the production environment. Although Passenger runs Rails
apps in production mode by default, other Rails tools may default to the much slower
development environment.
Optimize your database once a month; create a cron job that runs:
…from your Puppet Dashboard directory. This will reorganize and reanalyze your database for
faster queries.
Tune the number of processes Dashboard uses to handle more concurrent requests. If youʼre
using Apache with Phusion Passenger to serve Dashboard (as covered in the bootstrapping
chapter), you can modify the appropriate settings in Dashboardʼs vhost file; in particular, pay
attention to the PassengerHighPerformance, PassengerMaxPoolSize, PassengerPoolIdleTime,
PassengerMaxRequests, and PassengerStatThrottleRate settings.
Regularly prune your old reports; see “cleaning old reports” in the maintenance chapter for more
details.
Run on a machine with a fast, local database.
Run on a machine with enough processing power and memory.
Run on a machine with fast backplane, controllers, and disks.
Installing Plugins
Puppet Labs plans to ship a variety of free and commercial plugins for Dashboard, which will add
new features to support specific workflows. If you are installing a plugin, it probably came with
official packages and its own installation instructions, but some general guidelines follow:
When installing a plugin from an official package, its files should be moved into the proper place
with the proper ownership. However, you will probably have to run the db:migrate rake task after
the installation is complete.
To install a plugin from source, rather than a package, youʼll have to know the hardcoded internal
name of the plugin. This should be listed in its documentation. Copy the pluginʼs directory to
vendor/plugins, rename it to its proper internal name, and chown the directory and its files to the
Dashboard user. Then, run the puppet:plugin:install task, passing the environment youʼre
After this, the plugin should be available and functioning. If youʼve been using Git to install and
Puppet Dashboard Manual • Configuring Puppet Dashboard 21/25
upgrade Dashboard, it should leave all plugin files untouched the next time you upgrade.
Uninstalling Plugins
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
1. Puppet:plugin:install runs db:migrate at the end. If you run in multiple environments regularly, youʼll need to run rake
db:migrate again for each additional one. ↩
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
Overview
Puppet Dashboard exposes most of its functionality through its web UI, but it has a number of
routine tasks that have to be performed on the command line by an admin. This chapter is a brief
tour of some of these tasks.
Note that all rake tasks should be performed from a shell in the directory that contains Dashboardʼs
code. Any relative paths mentioned below refer to locations within this directory. If you are running
Dashboard in the recommended “production” environment, note that Rails does not consider
production its default environment, and you must specify it manually with the RAILS_ENV
environment variable when running any rake tasks.
Alternately, you can copy the reports to your Dashboard server and run:
Note that this task can take a very long time, depending on the number of reports to be imported.
You can, however, safely interrupt and re-run the task, as the importer will automatically skip
reports that Dashboard has already imported.
You should optimize Dashboardʼs database monthly, and we recommend creating a cron job to do
so.
Although this task should be run regularly as a cron job, the frequency with which it should be run
will depend on your siteʼs policies.
If you run ʻrake reports:pruneʼ without any arguments, it will display further usage instructions.
Reading Logs
Dashboard may fail to start or display warnings if it is misconfigured or encounters an error. Details
about these errors are recorded to log files that will help diagnose and resolve the problem.
If youʼre running Dashboard using Apache and Phusion Passenger, the Apache logs will contain
higher-level information, such as severe errors that prevent Passenger from starting the
application.
Database backups
Although you can back up and restore Dashboardʼs database with any tools, there are a pair of rake
tasks which simplify the process.
To restore the Puppet Dashboard from a file called production.sql to your production
environment:
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
NAVIGATION
NAVIGATION
Bootstrapping Dashboard
Upgrading Dashboard
Configuring Dashboard
Maintaining Dashboard
Using Dashboard
© 2010 Puppet Labs [email protected] 411 NW Park Street / Portland, OR 97209 1-877-575-
9775