Skip to content


Webhook Go

Webhook Go is a port of the puppet_webhook Sinatra API server to Go. This is designed to be more streamlined, performant, and easier to ship for users than the Sinatra/Ruby API server.

This server is a REST API server designed to accept Webhooks from version control systems, such as GitHub or GitLab, and execute actions based on those webhooks. Specifically, the following tasks:

  • Trigger r10k environment and module deploys onto Puppet Servers
  • Send notifications to ChatOps systems, such as Slack and RocketChat


While there are no prerequisites for running the webhook server itself, for it to be useful, you will need the following installed on the same server or another server for this tool to be useful:

  • Puppet Server
  • r10k >= 3.9.0
  • Puppet Bolt (optional)
  • Windows or Linux server to run the server on. MacOS is not supported.


Download a Pre-release Binary from the Releases page, make it executable, and run the server.


The Webhook API server uses a configuration file called webhook.yml to configure the server. Several of the required options have defaults pre-defined so that a configuration file isn't needed for basic function.


  protected: false
  user: puppet
  password: puppet
  port: 4000
    enabled: false
    certificate: "/path/to/tls/certificate"
    key: "/path/to/tls/key"
    enabled: true
    max_concurrent_jobs: 10
    max_history_items: 20
  enabled: false
  service: slack
  channel: "#general"
  user: r10kbot
  auth_token: 12345
  server_uri: "https://rocketchat.local"
  config_path: /etc/puppetlabs/r10k/r10k.yaml
  default_branch: main
  allow_uppercase: false
  verbose: true

Bolt authentication

Due to the inherent security risk associated with passing plain text passwords to the Bolt CLI tool, all ability to set it within the application have been removed.

Instead, it is recommended to instead utilize the Bolt Transport configuration options and place them within the bolt-defaults.yaml file.

If you want to utilize an inventory.yaml and place the targets and auth config within that file, you can. Just be sure to remember to add the target name containing the nodes you need to the webhook.yml file

Server options


Type: bool
Description: Enforces authentication via basic Authentication
Default: false


Type: string
Description: Username to use for Basic Authentication. Optional.
Default: nil


Type: string
Description: Password to use for Basic Authentication. Optional.
Default: nil


Type: int64
Description: Port to run the server on. Optional.
Default: 4000


Type: struct
Description: Struct containing server TLS options


Type: bool
Description: Enforces TLS with http server
Default: false


Type: string
Description: Full path to certificate file. Optional.
Default: nil


Type: string
Description: Full path to key file. Optional.
Default: nil


Type: struct
Description: Struct containing Queue options


Type: bool
Description: Should queuing be used
Default: false


Type: int
Description: How many jobs could be stored in queue
Default: 10


Type: int
Description: How many queue items should be stored in the history
Default: 50

ChatOps options


Type: boolean
Description: Enable/Disable chatops support
Default: false


Type: string Description: Which service to use. Supported options: [slack, rocketchat]
Default: nil


Type: string
Description: ChatOps communication channel to post to.
Default: nil


Type: string
Description: ChatOps user to post as
Default: nil


Type: string
Description: The authentication token needed to post as the ChatOps user in the chosen, supported ChatOps service
Default: nil


Type: string
Description: The ChatOps service API URI to send the message to.
Default: nil

r10k options


Type: string
Description: Full path to the r10k configuration file. Optional.
Default: /etc/puppetlabs/r10k/r10k.yaml


Type: string
Description: Name of the default branch for r10k to pull from. Optional.
Default: main


Type: string
Description: An r10k prefix to apply to the module or environment being deployed. Optional.
Default: nil


Type: bool
Description: Allow Uppercase letters in the module, branch, or environment name. Optional.
Default: false


Type: bool
Description: Log verbose output when running the r10k command
Default: true


Type: bool
Description: Deploy modules in environments.
Default: true


Type: bool
Description: Use the legacy --puppetfile flag instead of --modules. This should only be used when your version of r10k doesn't support the newer flag.
Default: false


Type: bool
Description: Run puppet generate types after updating an environment
Default: true


Type: string
Description: Allow overriding the default path to r10k.
Default: /opt/puppetlabs/puppetserver/bin/r10k


Webhook API provides following paths

GET /health

Get health assessment about the Webhook API server

GET /api/v1/queue

Get current queue status of the Webhook API server

POST /api/v1/r10k/environment

Updates a given puppet environment, ie. r10k deploy environment. This only updates a specific environment governed by the branch name.

POST /api/v1/r10k/module

Updates a puppet module, ie. r10k deploy module. The default behavior of r10k is to update the module in all environments that have it. Module name defaults to the git repository name.

Available URL arguments (?argument=value):

  • branch_only - If set, this will only update the module in an environment set by the branch, as opposed to all environments. This is equivalent to the --environment r10k option.
  • module_name - Sometimes git repository and module name cannot have the same name due to arbitrary naming restrictions. This option forces the module name to be the given value instead of repository name.