Configuring PuppetDB
PuppetDB is a database for Puppet that is used to store information about nodes connected to a Puppet master. PuppetDB is also a storage area for exported resources. Exported resources are resources that are defined on nodes but applied to other nodes. The simplest way to install PuppetDB is to use the PuppetDB module from Puppet labs. From this point on, we'll assume you are using the puppet.example.com
machine and have a passenger-based configuration of Puppet.
Getting ready
Install the PuppetDB module in the production environment you created in the previous recipe. If you didn't create directory environments, don't worry, using puppet module install
will install the module to the correct location for your installation with the following command:
root@puppet:~# puppet module install puppetlabs-puppetdb Notice: Preparing to install into /etc/puppet/environments/production/modules ... Notice: Downloading from https://forgeapi.puppetlabs.com ... Notice: Installing -- do not interrupt ... /etc/puppet/environments/production/modules └─┬ puppetlabs-puppetdb (v3.0.1) ├── puppetlabs-firewall (v1.1.3) ├── puppetlabs-inifile (v1.1.3) └─┬ puppetlabs-postgresql (v3.4.2) ├─┬ puppetlabs-apt (v1.6.0) │ └── puppetlabs-stdlib (v4.3.2) └── puppetlabs-concat (v1.1.0)
How to do it...
Now that our Puppet master has the PuppetDB module installed, we need to apply the PuppetDB module to our Puppet master, we can do this in the site manifest. Add the following to your (production) site.pp
:
node puppet { class { 'puppetdb': } class { 'puppetdb::master::config': puppet_service_name => 'apache2', } }
Run puppet agent
to apply the puppetdb
class and the puppetdb::master::config
class:
root@puppet:~# puppet agent -t Info: Caching catalog for puppet Info: Applying configuration version '1410416952' ... Info: Class[Puppetdb::Server::Jetty_ini]: Scheduling refresh of Service[puppetdb] Notice: Finished catalog run in 160.78 seconds
How it works...
The PuppetDB module is a great example of how a complex configuration task can be puppetized. Simply by adding the puppetdb
class to our Puppet master node, Puppet installed and configured postgresql
and puppetdb
.
When we called the puppetdb::master::config
class, we set the puppet_service_name
variable to apache2
, this is because we are running Puppet through passenger. Without this line our agent would try to start the puppetmaster process instead of apache2
.
The agent then set up the configuration files for PuppetDB and configured Puppet to use PuppetDB. If you look at /etc/puppet/puppet.conf
, you'll see the following two new lines:
storeconfigs = true storeconfigs_backend = puppetdb
There's more...
Now that PuppetDB is configured and we've had a successful agent run, PuppetDB will have data we can query:
root@puppet:~# puppet node status puppet puppet Currently active Last catalog: 2014-09-11T06:45:25.267Z Last facts: 2014-09-11T06:45:22.351Z