{"id":15013962,"url":"https://github.com/voxpupuli/puppet-puppetboard","last_synced_at":"2026-03-10T12:31:12.898Z","repository":{"id":10007004,"uuid":"12042617","full_name":"voxpupuli/puppet-puppetboard","owner":"voxpupuli","description":"Puppet module to install and manage puppetboard","archived":false,"fork":false,"pushed_at":"2026-01-15T09:37:54.000Z","size":693,"stargazers_count":54,"open_issues_count":24,"forks_count":162,"subscribers_count":48,"default_branch":"master","last_synced_at":"2026-01-25T12:13:27.154Z","etag":null,"topics":["bsd-puppet-module","debian-puppet-module","freebsd-puppet-module","hacktoberfest","linux-puppet-module","puppet","ubuntu-puppet-module"],"latest_commit_sha":null,"homepage":"https://forge.puppet.com/puppet/puppetboard","language":"Puppet","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/voxpupuli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"vox-pupuli","github":"voxpupuli"}},"created_at":"2013-08-11T21:10:29.000Z","updated_at":"2026-01-15T09:37:56.000Z","dependencies_parsed_at":"2023-12-23T17:16:25.042Z","dependency_job_id":"f86d564f-19df-4d76-a856-451ae718a683","html_url":"https://github.com/voxpupuli/puppet-puppetboard","commit_stats":{"total_commits":403,"total_committers":107,"mean_commits":"3.7663551401869158","dds":0.6923076923076923,"last_synced_commit":"b4933ff5b298be47bde7f835a44707a2dd0ed38c"},"previous_names":["puppet-community/puppet-module-puppetboard"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/voxpupuli/puppet-puppetboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-puppetboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-puppetboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-puppetboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-puppetboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/voxpupuli","download_url":"https://codeload.github.com/voxpupuli/puppet-puppetboard/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-puppetboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29954583,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T22:53:01.873Z","status":"ssl_error","status_checked_at":"2026-02-28T22:52:50.699Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bsd-puppet-module","debian-puppet-module","freebsd-puppet-module","hacktoberfest","linux-puppet-module","puppet","ubuntu-puppet-module"],"created_at":"2024-09-24T19:45:00.424Z","updated_at":"2026-03-10T12:31:12.721Z","avatar_url":"https://github.com/voxpupuli.png","language":"Puppet","funding_links":["https://opencollective.com/vox-pupuli","https://github.com/sponsors/voxpupuli"],"categories":["Tools"],"sub_categories":["Web Interfaces"],"readme":"# puppetboard\n\n[![License](https://img.shields.io/github/license/voxpupuli/puppet-puppetboard.svg)](https://github.com/voxpupuli/puppet-puppetboard/blob/master/LICENSE)\n[![Build Status](https://github.com/voxpupuli/puppet-puppetboard/actions/workflows/ci.yml/badge.svg)](https://github.com/voxpupuli/puppet-puppetboard/actions/workflows/ci.yml)\n[![Puppet Forge](http://img.shields.io/puppetforge/v/puppet/puppetboard.svg)](https://forge.puppetlabs.com/puppet/puppetboard)\n[![Puppet Forge downloads](https://img.shields.io/puppetforge/dt/puppet/puppetboard.svg)](https://forge.puppetlabs.com/puppet/puppetboard)\n[![Puppet Forge - endorsement](https://img.shields.io/puppetforge/e/puppet/puppetboard.svg)](https://forge.puppetlabs.com/puppet/puppetboard)\n[![Puppet Forge score](https://img.shields.io/puppetforge/f/puppet/puppetboard.svg)](https://forge.puppetlabs.com/puppet/puppetboard)\n\n#### Table of Contents\n\n- [Overview](#overview)\n- [Setup](#setup)\n  - [Installation](#installation)\n  - [Dependencies](#dependencies)\n- [Usage](#usage)\n- [Number of Reports](#number-of-reports)\n- [Offline Mode](#offline-mode)\n- [Set Default Environment](#set-default-environment)\n- [Disable SELinux Management](#disable-selinux-management)\n- [Apache](#apache)\n  - [Apache (with Reverse Proxy)](#apache-with-reverse-proxy)\n- [Using SSL to the PuppetDB host](#using-ssl-to-the-puppetdb-host)\n  - [Using SSL to PuppetDB \\\u003e= 6.9.1](#using-ssl-to-puppetdb--691)\n- [Development](#development)\n  - [Authors](#authors)\n\n## Overview\n\nPuppet module for installing and managing [Puppetboard](https://github.com/voxpupuli/puppetboard).\n\nPuppetboard is a web interface to [PuppetDB](https://puppet.com/docs/puppetdb/latest/index.html) aiming to replace\nthe reporting functionality of [Puppet Enterprise console (previously: Puppet Dashboard)](https://puppet.com/docs/pe/latest/console_accessing.html)\nfor the open source Puppet.\n\n## Setup\n\n### Installation\n\n    puppet module install puppet-puppetboard\n\n### Dependencies\n\nNote that this module no longer explicitly requires the puppetlabs apache module. If you want to use the apache functionality of this module you will have to specify that the apache module is installed with:\n\n    puppet module install puppetlabs-apache\n\nIn most cases the module requires the `virtualenv` package. This can be enabled in the module with the `manage_virtualenv` flag set to `true`:\n\n```puppet\nclass { 'puppetboard':\n  manage_virtualenv =\u003e true,\n  secret_key        =\u003e fqdn_rand_string(32),\n}\n```\n\nIf the virtualenv is managed by this module, the [voxpupuli/python](https://forge.puppet.com/puppet/python#puppet-python) will be used. That module uses [voxpupuli/epel](https://forge.puppet.com/puppet/epel#configure-epel-extra-repository-for-enterprise-linux) on RHEL based platforms.\n\n## Usage\n\nDeclare the base puppetboard manifest with the below required parameter(s), set to the values you want to use:\n\n```puppet\nclass { 'puppetboard':\n  python_version =\u003e '3.9',\n  secret_key     =\u003e fqdn_rand_string(32),\n}\n```\n\nThis will install the latest stable version of the app from a [PyPI package](https://pypi.org/project/puppetboard/) in a virtualenv created using the requested Python version and keep it up to date.\nThis example secret key is fine if you have a single-node deployment of the app. If you have a multi-node deployment, you should generate a secret key and use the same one on all nodes.\n\n## Number of Reports\n\nNOTE: In order to have reports present in the dashboard, report storage must be enabled on the Puppet master node.\nThis is not the default behavior, so it must be enabled.\n\nSee https://puppet.com/docs/puppetdb/latest/connect_puppet_server.html#enabling-report-storage for instructions on\nreport storage.\n\nBy default, puppetboard displays only 10 reports. This number can be\ncontrolled to set the number of reports to show.\n\n```puppet\nclass { 'puppetboard':\n  python_version =\u003e '3.9',\n  secret_key     =\u003e fqdn_rand_string(32),\n  reports_count  =\u003e 40,\n}\n```\n\n## Offline Mode\n\nIf you are running puppetboard in an environment which does not have network access to public CDNs,\npuppet board can load static assets (jquery, semantic-ui, tablesorter, etc) from the local web server instead of a CDN:\n\n```puppet\nclass { 'puppetboard':\n  python_version =\u003e '3.9',\n  secret_key     =\u003e fqdn_rand_string(32),\n  offline_mode   =\u003e true,\n}\n```\n\n## Set Default Environment\n\nBy default, puppetboard defaults to \"production\" environment. This can be\nset to default to a different environment.\n\n```puppet\nclass { 'puppetboard':\n  python_version      =\u003e '3.9',\n  secret_key          =\u003e fqdn_rand_string(32),\n  default_environment =\u003e 'customers',\n}\n```\n\nor to default to \"All environments\":\n\n```puppet\nclass { 'puppetboard':\n  python_version      =\u003e '3.9',\n  secret_key          =\u003e fqdn_rand_string(32),\n  default_environment =\u003e '*',\n}\n```\n\n## Disable SELinux Management\n\n```puppet\nclass { 'puppetboard':\n  python_version =\u003e '3.9',\n  secret_key     =\u003e fqdn_rand_string(32),\n  manage_selinux =\u003e false,\n}\n```\n\nIf manage_selinux is true, manage policies related to SELinux. If false, do nothing. By default, this module will try to determine if SELinux is enabled, and manage the policies if it is.\n\n## Apache\n\nIf you want puppetboard accessible through Apache and you're able to use the\nofficial `puppetlabs/apache` Puppet module, this module contains two classes\nto help configuration.\n\nThe first, `puppetboard::apache::vhost`, will use the `apache::vhost`\ndefined-type to create a full virtual host. This is useful if you want\npuppetboard to be available under an address like http://pboard.example.com:\n\n(The following is generic code used in our tests, it works on Debian 9 and 10, also on Ubuntu 16.04 and 18.04. It will talk to PuppetDB on localhost via http)\n\n```puppet\n# Configure Apache on this server\nclass { 'apache':\n  default_vhost =\u003e false,\n}\n\n# Configure Puppetboard\nclass { 'puppetboard':\n  python_version    =\u003e '3.9',\n  secret_key        =\u003e fqdn_rand_string(32),\n  manage_virtualenv =\u003e true,\n}\n\n# Access Puppetboard through pboard.example.com\nclass { 'puppetboard::apache::vhost':\n  vhost_name =\u003e 'pboard.example.com',\n  port       =\u003e 80,\n}\n```\n\nThe second, `puppetboard::apache::conf`, will create an entry in\n`/etc/apache2/conf.d` (or `/etc/httpd/conf.d`, depending on your distribution).\nThis is useful if you simply want puppetboard accessible from\nhttp://example.com/puppetboard:\n\n```puppet\n# Configure Puppetboard\nclass { 'puppetboard':\n  python_version =\u003e '3.9',\n  secret_key     =\u003e fqdn_rand_string(32),\n}\n\n# Access Puppetboard from example.com/puppetboard\nclass { 'puppetboard::apache::conf': }\n```\n\n### Apache (with Reverse Proxy)\n\nYou can also relocate puppetboard to a sub-URI of a Virtual Host. This is\nuseful if you want to reverse-proxy puppetboard, but are not planning on\ndedicating a domain just for puppetboard:\n\n```puppet\nclass { 'puppetboard::apache::vhost':\n  vhost_name =\u003e 'dashes.acme',\n  wsgi_alias =\u003e '/pboard',\n}\n```\n\nIn this case puppetboard will be available (on the default) on\nhttp://dashes.acme:5000/pboard. You can then reverse-proxy to it like so:\n\n```apache\nRedirect /pboard /pboard/\nProxyPass /pboard/ http://dashes.acme:5000/pboard/\nProxyPassReverse /pboard/ http://dashes.acme:5000/pboard/\n```\n\nUsing the puppetlabs/apache module:\n\n```puppet\napache::vhost { 'example.acme':\n  port            =\u003e '80',\n  docroot         =\u003e '/var/www/html',\n  redirect_source =\u003e [ '/pboard' ],\n  redirect_dest   =\u003e [ '/pboard/' ],\n  proxy_pass      =\u003e [\n    {\n      'path' =\u003e '/pboard/',\n      'url'  =\u003e 'http://dashes.acme:5000/pboard/',\n    },\n  ],\n}\n```\n\n## Using SSL to the PuppetDB host\n\nIf you would like to use certificate auth into the PuppetDB service you must configure puppetboard to use a client certificate and private key.\n\nYou have two options for the source of the client certificate \u0026 key:\n\n1. Generate a new certificate, signed by the puppetmaster CA\n2. Use the existing puppet client certificate\n\nIf you choose option 1, generate the new certificates on the CA puppet master as follows:\n\n```\nsudo puppet cert generate puppetboard.example.com\n```\n\nNote: this name cannot conflict with an existing certificate name.\n\nThe new certificate and private key can be found in $certdir/\u003cNAME\u003e.pem and $privatekeydir/\u003cNAME\u003e.pem on the CA puppet master. If you are not running puppetboard on the CA puppet master you will need to copy the certificate and key to the node running puppetboard.\n\nHere's an example, using new certificates:\n\n```puppet\n$ssl_dir = '/var/lib/puppetboard/ssl'\n$puppetboard_certname = 'puppetboard.example.com'\nclass { 'puppetboard':\n  python_version      =\u003e '3.9',\n  secret_key          =\u003e fqdn_rand_string(32),\n  manage_virtualenv   =\u003e true,\n  puppetdb_host       =\u003e 'puppetdb.example.com',\n  puppetdb_port       =\u003e 8081,\n  puppetdb_key        =\u003e \"${ssl_dir}/private_keys/${puppetboard_certname}.pem\",\n  puppetdb_ssl_verify =\u003e \"${ssl_dir}/certs/ca.pem\",\n  puppetdb_cert       =\u003e \"${ssl_dir}/certs/${puppetboard_certname}.pem\",\n}\n```\n\nIf you are re-using the existing puppet client certificates, they will already exist on the node (assuming puppet has been run and the client cert signed by the puppet master). However, the puppetboaard user will not have permission to read the private key unless you add it to the puppet group.\n\nHere's a complete example, re-using the puppet client certs:\n\n```puppet\n$ssl_dir = $::settings::ssldir\n$puppetboard_certname = $::certname\nclass { 'puppetboard':\n  python_version      =\u003e '3.9',\n  secret_key          =\u003e fqdn_rand_string(32),\n  manage_virtualenv   =\u003e true,\n  groups              =\u003e 'puppet',\n  puppetdb_host       =\u003e 'puppetdb.example.com',\n  puppetdb_port       =\u003e 8081,\n  puppetdb_key        =\u003e \"${ssl_dir}/private_keys/${puppetboard_certname}.pem\",\n  puppetdb_ssl_verify =\u003e \"${ssl_dir}/certs/ca.pem\",\n  puppetdb_cert       =\u003e \"${ssl_dir}/certs/${puppetboard_certname}.pem\",\n}\n```\n\nNote that both the above approaches only work if you have the Puppet CA root certificate added to the root certificate authority file used by your operating system. If you want to specify the location to the Puppet CA file ( you probably do) you have to use the syntax below. Currently this is a bit of a gross hack, but it's an open issue to resolve it in the Puppet module:\n\n```puppet\n$ssl_dir = $::settings::ssldir\n$puppetboard_certname = $::certname\nclass { 'puppetboard':\n  python_version      =\u003e '3.9',\n  secret_key          =\u003e fqdn_rand_string(32),\n  manage_virtualenv   =\u003e true,\n  groups              =\u003e 'puppet',\n  puppetdb_host       =\u003e 'puppetdb.example.com',\n  puppetdb_port       =\u003e 8081,\n  puppetdb_key        =\u003e \"${ssl_dir}/private_keys/${puppetboard_certname}.pem\",\n  puppetdb_ssl_verify =\u003e \"${ssl_dir}/certs/ca.pem\",\n  puppetdb_cert       =\u003e \"${ssl_dir}/certs/${puppetboard_certname}.pem\",\n}\n```\n\n### Using SSL to PuppetDB \u003e= 6.9.1\n\nAs of PuppetDB `6.9.1` the `/metrics/v2` API is only accessible on the loopback/localhost\ninterface of the PuppetDB server. This requires you to run `puppetboard` locally on\nthat host and configure `puppetdb_host` to `127.0.0.1`:\n\n```puppet\n\n$ssl_dir = $::settings::ssldir\n$puppetboard_certname = $::certname\nclass { 'puppetboard':\n  python_version      =\u003e '3.9',\n  secret_key          =\u003e fqdn_rand_string(32),\n  manage_virtualenv   =\u003e true,\n  groups              =\u003e 'puppet',\n  puppetdb_host       =\u003e '127.0.0.1',\n  puppetdb_port       =\u003e 8081,\n  puppetdb_key        =\u003e \"${ssl_dir}/private_keys/${puppetboard_certname}.pem\",\n  puppetdb_ssl_verify =\u003e \"${ssl_dir}/certs/ca.pem\",\n  puppetdb_cert       =\u003e \"${ssl_dir}/certs/${puppetboard_certname}.pem\",\n}\n```\n\n**NOTE** In order for SSL to verify properly in this setup, you'll need your\nPuppet SSL certificate to have an IP Subject Alternative Name setup\nfor `127.0.0.1`, otherwise the certificate verification will fail.\nYou can set this up in your `puppet.conf` with the `dns_alt_names`\nconfiguration option, documented [here](https://puppet.com/docs/puppet/latest/configuration.html#dnsaltnames).\n\n```ini\n[main]\ndns_alt_names = puppetdb,puppetdb.domain.tld,puppetboard,puppetboard.domain.tld,IP:127.0.0.1\n```\n\n**NOTE** If you need to regenerate your existing cert to add DNS Alt Names\nfollow the documentation [here](https://puppet.com/docs/puppet/latest/ssl_regenerate_certificates.html#regenerate_agent_certs_and_add_dns_alt_names):\n\n```shell\n# remove the existing agent certs\npuppetserver ca clean --certname \u003cCERTNAME_OF_YOUR_PUPPETDB\u003e\npuppet ssl clean\n\n# stop our services\npuppet resource service puppetserver ensure=stopped\npuppet resource service puppetdb ensure=stopped\n\n# regenerate our cert\npuppetserver ca generate --certname \u003cCERTNAME\u003e --subject-alt-names puppetdb,puppetdb.domain.tld,puppetboard,puppetboard.domain.tld,IP:127.0.0.1 --ca-client\n# copy the cert into the PuppetDB directory\ncp /etc/puppetlabs/puppet/ssl/certs/\u003cCERTNAME\u003e.pem /etc/puppetlabs/puppetdb/ssl/public.pem\ncp /etc/puppetlabs/puppet/ssl/private_keys/\u003cCERTNAME\u003e.pem /etc/puppetlabs/puppetdb/ssl/private.pem\n\n# restart our services\npuppet resource service puppetdb ensure=running\npuppet resource service puppetserver ensure=running\n```\n\n## Development\n\nThis module is maintained by [Vox Pupuli](https://voxpupuli.org/). Vox Pupuli\nwelcomes new contributions to this module, especially those that include\ndocumentation and rspec tests. We are happy to provide guidance if necessary.\n\nPlease see [CONTRIBUTING](.github/CONTRIBUTING.md) for more details.\n\nPlease log tickets and issues on github.\n\n### Authors\n\n- Spencer Krum \u003ckrum.spencer@gmail.com\u003e\n- Vox Pupuli Team\n- The core of this module was based on Hunter Haugen's puppetboard-vagrant repo.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpupuli%2Fpuppet-puppetboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoxpupuli%2Fpuppet-puppetboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpupuli%2Fpuppet-puppetboard/lists"}