Puppet
Visualize Visualize Puppet infrastructure, including servers, nodes, catalog, environment, factsets, and resources, and monitor changes through queries and alerts.
- Installation
- Authorization
- Data Model
- Types
- Release Notes
Installation Guide
Puppet consists of the Puppet Server, which manages configurations, Puppet Agents, which apply them on nodes, and PuppetDB, which stores configuration, state, and report data. This integration connects to PuppetDB and reads node, environment, fact, resource, and catalog data from it. The integration requires client certificates signed by Puppet's Certificate Authority (CA) for mutual TLS authentication.
Requirements
- Network connectivity between the JupiterOne integration and PuppetDB.
- PuppetDB installed and configured: Install PuppetDB
- PuppetDB connected to the Puppet Server: Connect PuppetDB and Puppet Server
client-authset toneed(orwant) in PuppetDB'sjetty.iniso that TLS client certificates are required.
Configuration in Puppet
Generate a Client Certificate
-
Connect to the Puppet Server using SSH.
-
Run the following command to generate a certificate and key pair:
puppetserver ca generate --certname <Certificate-Name># For example: j1-integration-cert -
Verify that the certificate was generated and signed by the CA:
puppetserver ca list --all -
Collect the following files — you will upload them when configuring the integration in JupiterOne:
- Certificate Authority Certificate:
/etc/puppetlabs/puppet/ssl/certs/ca.pem - Client Certificate:
/etc/puppetlabs/puppet/ssl/certs/<Certificate-Name>.pem - Client Certificate Private Key:
/etc/puppetlabs/puppet/ssl/private_keys/<Certificate-Name>.pem
- Certificate Authority Certificate:
Configuration in JupiterOne
-
From the top navigation bar of the J1 Search homepage, go to Integrations.
-
Search for Puppet and select it.
-
Click Add Instance and configure the following settings:
- PuppetDB URL: The IP or hostname where PuppetDB is reachable (for example,
https://127.0.0.1). - PuppetDB Port: The port PuppetDB listens on for SSL connections (default:
8081). - Certificate Authority Certificate: The CA certificate file (
ca.pem). - Client Certificate: The client certificate file (for example,
j1-integration-cert.pem). - Client Certificate Private Key: The private key file for the client certificate.
- Account Name: A name to identify this Puppet instance in JupiterOne. When Tag with Account Name is enabled, ingested entities store this value in
tag.AccountName. - Description: An optional description to help identify this integration instance.
- Polling Interval: How frequently data is refreshed. Leave as
DISABLEDto trigger runs manually.
- PuppetDB URL: The IP or hostname where PuppetDB is reachable (for example,
-
Click Create Configuration to save.
Data Volume Configuration
Advanced Configuration
| Field | Description | Default | Options |
|---|---|---|---|
| Resource Types Filter | Limits ingestion to specific Puppet resource types. When no types are selected, all resource types are ingested, including custom module-defined types not listed here (for example, Firewall or Apache::Vhost). | (all types) | Package, Service, User, Group, File, Cron, Exec, Ssh_authorized_key, Mount, Host, Yumrepo, Scheduled_task, Selboolean, Selmodule, Augeas |
Troubleshooting
BAD Certificate Error
This error occurs when the provided CA certificate is malformed or does not match the certificate chain. To regenerate certificates on the Puppet Server:
# Back up existing certificate files
cp -r /etc/puppetlabs/puppet/ssl /etc/puppetlabs/puppet/ssl_back
# Remove the existing certificates
rm -rf /etc/puppetlabs/puppet/ssl
# Regenerate the CA certificate
puppetserver ca setup
# Restart the Puppet Server
systemctl restart puppetserver
No Alternative Certificate Subject Name Matches Target Hostname
This error occurs when the certificate's common name does not match the hostname in the PuppetDB URL.
-
Open the Puppet configuration file:
nano /etc/puppetlabs/puppet/puppet.conf -
Under the
[main]section, setcertnameto match the hostname used in the PuppetDB URL:[main]certname = <hostname> -
Restart the Puppet Server:
systemctl restart puppetserver
Next Steps
Once the integration instance is configured, it will run on the polling interval you set and populate Puppet data in JupiterOne. Continue to the Instance Management Guide to learn more about working with integration instances.
Endpoints
API endpoints that the integration makes requests to.
Show Endpoints (6)
GET /pdb/query/v4/catalogsGET /pdb/query/v4/environmentsGET /pdb/query/v4/factsetsGET /pdb/query/v4/inventoryGET /pdb/query/v4/producersGET /pdb/query/v4/resources
Documentation Links
Links to provider documentation relevant to setup and configuration.
Show Documentation Links (7)
- https://puppet.com/docs/puppetdb/latest/api/query/v4/catalogs.html
- https://puppet.com/docs/puppetdb/latest/api/query/v4/environments.html
- https://puppet.com/docs/puppetdb/latest/api/query/v4/factsets.html
- https://puppet.com/docs/puppetdb/latest/api/query/v4/inventory.html
- https://puppet.com/docs/puppetdb/latest/api/query/v4/producers.html
- https://puppet.com/docs/puppetdb/latest/api/query/v4/resources.html
- https://puppet.com/docs/puppetdb/latest/configure.html
Per-Step Breakdown
Detailed authorization requirements for each ingestion step.
Show all steps (4)
| Step | Endpoints |
|---|---|
| Fetch Puppet Catalogs | GET /pdb/query/v4/catalogs |
| Fetch Puppet Factsets | GET /pdb/query/v4/factsets |
| Fetch Puppet Nodes | GET /pdb/query/v4/inventory |
| Fetch Puppet Resources | GET /pdb/query/v4/resources |
Entities
The following entities are created:
| Resources | Entity _type | Entity _class |
|---|---|---|
| Catalog | puppet_catalog | DataObject |
| Environment | puppet_environment | Group |
| FactSet | puppet_factset | Group |
| Node | puppet_node | Host |
| Resource | puppet_resource | Configuration |
| Server | puppet_server | Control |
Relationships
The following relationships are created:
Source Entity _type | Relationship _class | Target Entity _type |
|---|---|---|
puppet_catalog | CONTAINS | puppet_resource |
puppet_environment | HAS | puppet_node |
puppet_node | USES | puppet_factset |
puppet_node | HAS | puppet_resource |
puppet_server | MANAGES | puppet_node |
puppet_server | GENERATED | puppet_catalog |
Puppet Catalog
puppet_catalog inherits from DataObject
| Property | Type | Description | Specifications |
|---|---|---|---|
codeId * | string | null | ||
environment * | string | ||
hash | string | ||
node * | string | ||
replacedCatalogOn | number | A string representing the time at which the replace_catalog command for a given catalog was submitted from the Puppet Server. Origin property is producer_timestamp. | |
transactionUuid | string | ||
version * | string |
Puppet Environment
puppet_environment inherits from Group
Puppet Factset
puppet_factset inherits from Group
| Property | Type | Description | Specifications |
|---|---|---|---|
nodeEnvironment * | string | ||
puppetServer * | string | ||
submittedOn | number | A string representing the timestamp at which the data was submitted to PuppetDB from Puppet Server. |
Puppet Node
puppet_node inherits from Host
| Property | Type | Description | Specifications |
|---|---|---|---|
submittedOn | number | A string representing the timestamp at which the data was submitted to PuppetDB from Puppet Server. |
Puppet Resource
puppet_resource inherits from Configuration
| Property | Type | Description | Specifications |
|---|---|---|---|
certname * | string | The certname of the puppet_node this resource belongs to. | |
environment * | string | ||
exported * | boolean | ||
filePath | string | ||
lines | number | ||
resource * | string | The PuppetDB-assigned resource hash that uniquely identifies this resource within its catalog. | |
title * | string | ||
type * | string |
Puppet Server
puppet_server inherits from Control