{"id":15013922,"url":"https://github.com/sensu/sensu-puppet","last_synced_at":"2025-05-15T03:07:55.326Z","repository":{"id":3068890,"uuid":"4091770","full_name":"sensu/sensu-puppet","owner":"sensu","description":"Sensu Puppet module.","archived":false,"fork":false,"pushed_at":"2024-12-13T09:35:09.000Z","size":4371,"stargazers_count":165,"open_issues_count":18,"forks_count":288,"subscribers_count":28,"default_branch":"master","last_synced_at":"2025-05-11T14:05:13.721Z","etag":null,"topics":["alerting","monitoring","puppet","ruby","sensu"],"latest_commit_sha":null,"homepage":"https://github.com/sensu/sensu-puppet","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sensu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2012-04-20T22:09:45.000Z","updated_at":"2024-05-31T08:19:36.000Z","dependencies_parsed_at":"2023-01-13T12:16:03.057Z","dependency_job_id":"f6d5630d-9c94-4e83-8fa8-425b35c2e00f","html_url":"https://github.com/sensu/sensu-puppet","commit_stats":{"total_commits":1488,"total_committers":175,"mean_commits":8.502857142857144,"dds":0.644489247311828,"last_synced_commit":"d4c89b9b0c982f12e9d2cfa61e32f9f7b130e54b"},"previous_names":[],"tags_count":142,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensu%2Fsensu-puppet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensu%2Fsensu-puppet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensu%2Fsensu-puppet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sensu%2Fsensu-puppet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sensu","download_url":"https://codeload.github.com/sensu/sensu-puppet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254249045,"owners_count":22039025,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["alerting","monitoring","puppet","ruby","sensu"],"created_at":"2024-09-24T19:44:56.995Z","updated_at":"2025-05-15T03:07:50.311Z","avatar_url":"https://github.com/sensu.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sensu-Puppet\n\n#### Table of Contents\n\n1. [Module Description](#module-description)\n    * [Updating this module from 4.x to 5.x](#updating-this-module-from-4x-to-5x)\n    * [Updating this module from 3.x to 4.x](#updating-this-module-from-3x-to-4x)\n2. [Setup - The basics of getting started with Sensu](#setup)\n    * [What sensu affects](#what-sensu-affects)\n    * [Setup requirements](#setup-requirements)\n    * [Beginning with Sensu](#beginning-with-sensu)\n3. [Usage - Configuration options and additional functionality](#usage)\n    * [Location of Resources](#location-of-resources)\n    * [Basic Sensu backend](#basic-sensu-backend)\n    * [Basic Sensu agent](#basic-sensu-agent)\n    * [Basic Sensu CLI](#basic-sensu-cli)\n    * [API Providers](#api-providers)\n    * [Manage Windows Agent](#manage-windows-agent)\n    * [Advanced agent](#advanced-agent)\n    * [Advanced agent - Subscriptions](#advanced-agent---subscriptions)\n    * [Advanced agent - Annotations and Labels](#advanced-agent---annotations-and-labels)\n    * [Advanced agent - Custom config entries](#advanced-agent---custom-config-entries)\n    * [Advanced SSL](#advanced-ssl)\n    * [Enterprise support](#enterprise-support)\n    * [Contact routing](#contact-routing)\n    * [PostgreSQL datastore support](#postgresql-datastore-support)\n    * [Installing Plugins](#installing-plugins)\n    * [Installing Extensions](#installing-extensions)\n    * [Exported resources](#exported-resources)\n    * [Hiera resources](#hiera-resources)\n    * [Resource purging](#resource-purging)\n    * [Sensu backend cluster](#sensu-backend-cluster)\n        * [Adding backend members to an existing cluster](#adding-backend-members-to-an-existing-cluster)\n    * [Sensu backend federation](#sensu-backend-federation)\n    * [Large Environment Considerations](#large-environment-considerations)\n    * [Composite Names for Namespaces](#composite-names-for-namespaces)\n    * [Installing Bonsai Assets](#installing-bonsai-assets)\n    * [Bolt Tasks](#bolt-tasks)\n4. [Reference](#reference)\n    * [Facts](#facts)\n5. [Examples](#examples)\n6. [Limitations - OS compatibility, etc.](#limitations)\n7. [Development - Guide for contributing to the module](#development)\n8. [License](#license)\n\n## Module description\n\nInstalls and manages [Sensu Go](https://sensu.io/), the open source monitoring framework.\n\nPlease note, that this is a **Partner Supported** module, which means that technical customer support for this module is solely provided by Sensu. Puppet does not provide support for any **Partner Supported** modules. Technical support for this module is provided by Sensu at [https://sensu.io/support](https://sensu.io/support).\n\n### Documented with Puppet Strings\n\n[Puppet Strings documentation](http://sensu.github.io/sensu-puppet/)\n\n### Compatibility - supported Sensu versions\n\nIf not explicitly stated it should always support the latest Sensu release.\nBeginning with v5.0.0 this module will only support Sensu Go 6.0+.\nPlease log an issue if you identify any incompatibilities.\n\n| Sensu Go Version| Recommended Puppet Module Version   |\n| --------------- | ----------------------------------- |\n| 5.0 - 5.15      | latest v3                           |\n| 5.16+           | latest v4                           |\n| 6.0             | v5.0.0                              |\n| 6.1+            | v5.1.0+\n\n### Upgrade note\n\nSensu Go 5.x is a rewrite of Sensu and no longer depends on redis and rabbitmq.\nVersion 3 of this module supports Sensu Go \u003e= 5.0.0 to \u003c 5.16.0.\nVersion 4 of this module supports Sensu Go \u003e= 5.16.0 \u003c 6.0.0.\nVersion 5.0.0 of this module supports Sensu Go \u003e= 6.0.0 \u003c 6.1.0.\nVersion 5.1.0+ of this module supports Sensu Go \u003e= 6.1.0 \u003c 7.0.0.\n\nUsers wishing to use the previous Ruby based Sensu should use the [sensu/sensuclassic](https://forge.puppet.com/sensu/sensuclassic) module.\n\n### Updating this module from 4.x to 5.x\n\nThis module begins supporting Sensu Go 6 with version \u003e= 5.0.0\n\n**NOTE** Upgrading to support Sensu Go 6 requires backends have Puppet applied before agents will begin to work as there is an agent specifc Sensu user and role added to support modifying agent entities via the API.\n\nClass parameter changes:\n\n* Remove deprecated `sensu::old_password` and `sensu::old_agent_password`, these parameters are no longer needed and were removed\n\nType property changes:\n\n* Remove deprecated `url`, `sha512` and `filters` properties from `sensu_asset`, use `builds` property instead\n\n#### Changes for backend\n\nThere is a manual step to perform to upgrade the sensu-backend after upgrading the backend to 6.x.\nThis module provides the `sensu::backend_upgrade` bolt task as a way to execute the necessary `sensu-backend upgrade` command.\n\n#### Changes for agents\n\nBeginning with Sensu Go 6, some changes to `agent.yml` will only bootstrap an agent entity, they will not update the entity.\nIf you wish to make changes to values such as `subscriptions`, `labels` or `annotations` after a host is added to Sensu this must be done\nvia the Sensu Go API. To support this it's now required that agents have the ability to make API calls.\n\nIn order to ensure agents can make API calls either via API or sensuctl the agent must be told about the admin password and API host:\n\n```\nclass { 'sensu':\n  api_host                     =\u003e 'sensu-backend.example.com',\n  agent_entity_config_password =\u003e 'supersecret',\n}\nclass { 'sensu::agent':\n  ...\n}\n```\n\nSee [API Providers](#api-providers) for example Hiera that can be used in a file like `common.yaml` to easily share the admin password with agents.\n\nThis module will still continue to write subscriptions and other agent configurations to `agent.yml` so that if an agent entity is deleted it can be recreated\nby restarting the `sensu-agent` service.\n\nBeginning with Sensu Go 6.2.0 you can go back to making `agent.yml` the authoritative source for an agent's config by setting `sensu::agent::agent_managed_entity` to `true`.\n\n### Updating this module from 3.x to 4.x\n\nClass parameter changes:\n\n* Move `sensu::backend::cli_package_name` to `sensu::cli::package_name`\n* Move `sensu::backend::sensuctl_chunk_size` to `sensu::cli::sensuctl_chunk_size`\n* Move `sensu::backend::url_host` to `sensu::api_host`\n* Move `sensu::backend::url_port` to `sensu::api_port`\n* Move `sensu::backend::password` to `sensu::password`\n* Move `sensu::backend::old_password` to `sensu::old_password`\n* Move `sensu::backend::agent_password` to `sensu::agent_password`\n* Move `sensu::backend::agent_old_password` to `sensu::agent_old_password`\n* The following parameters were moved from `sensu::backend` class to `sensu::resources` class. (**Example:** `sensu::backend::checks` becomes `sensu::resources::checks`)\n  * `ad_auths`\n  * `assets`\n  * `bonsai_assets`\n  * `checks`\n  * `cluster_members`\n  * `cluster_role_bindings`\n  * `cluster_roles`\n  * `configs` (removed)\n  * `entities`\n  * `etcd_replicators`\n  * `filters`\n  * `handlers`\n  * `hooks`\n  * `ldap_auths`\n  * `mutators`\n  * `namespaces`\n  * `oidc_auths`\n  * `role_bindings`\n  * `roles`\n  * `users`\n\nType property changes:\n\n* Replace `sensu_check` `proxy_requests*` properties with `proxy_requests` Hash\n* Replace `sensu_entity` `deregistration_handler` with `deregistration` Hash\n* Replace `sensu_handler` `socket_*` properties with `socket` Hash\n* Refactor `sensu_ldap_auth` and `sensu_ad_auth` on how properties are defined.\n  * Move `server_binding`, `server_group_search` and `server_user_search` into `servers` property\n\nBreaking changes:\n\n* Remove `sensu_event` type, replaced with `sensu::event` Bolt task\n* Remove `sensu_silenced` type, replaced with `sensu::silenced` Bolt task\n* Remove `sensu_config` type, replaced with `sensu::cli::config_format` and `sensu::cli::config_namespace` parameters\n\n## Setup\n\n### What sensu affects\n\nThis module will install packages, create configuration and start services necessary to manage Sensu agents and backend.\n\n### Setup requirements\n\nPlugin sync is required if the custom sensu types and providers are used.\n\n#### Soft module dependencies\n\nFor systems using `apt`:\n  * [puppetlabs/apt](https://forge.puppet.com/puppetlabs/apt) module (`\u003e= 5.0.1 \u003c 9.0.0`)\n\nFor systems using `yum` and Puppet \u003e= 6.0.0:\n  * [puppetlabs/yumrepo_core](https://forge.puppet.com/puppetlabs/yumrepo_core) module (`\u003e= 1.0.1 \u003c 2.0.0`)\n\nFor Windows:\n  * [puppetlabs/chocolatey](https://forge.puppet.com/puppetlabs/chocolatey) module (`\u003e= 3.0.0 \u003c 7.0.0`)\n  * [puppet/windows_env](https://forge.puppet.com/puppet/windows_env) module (`\u003e= 3.0.0 \u003c 5.0.0`)\n  * [puppet/archive](https://forge.puppet.com/puppet/archive) module (`\u003e= 3.0.0 \u003c 5.0.0`)\n\n### Beginning with Sensu\n\nThis module provides Vagrant definitions that can be used to get started with Sensu.\n\n```bash\nvagrant up sensu-backend\nvagrant ssh sensu-backend\n```\n\n#### Beginning with a Sensu cluster\n\nMultiple Vagrant boxes are available for testing a sensu-backend cluster.\n\n```bash\nvagrant up sensu-backend-peer1 sensu-backend-peer2\nvagrant provision sensu-backend-peer1 sensu-backend-peer2\n```\n\n#### Beginning with a Sensu federated cluster\n\nMultiple Vagrant boxes are available for testing a Sensu Go federated cluster.\nFirst build and provision both then provision the first a second time to view that the custom role was replicated.\n\n```base\nvagrant up sensu-backend-federated1 sensu-backend-federated2\nvagrant provision sensu-backend-federated1\n```\n\nThe `provision` command should output from `sensuctl` the `test` Sensu Go Role that was created on the other backend.\nThe output should look like the following:\n\n```\n    sensu-backend-federated1:   Name   Namespace   Rules  \n    sensu-backend-federated1:  ────── ─────────── ─────── \n    sensu-backend-federated1:   test   default         1  \n```\n\n## Usage\n\n### Location of Resources\n\nSensu Go is designed to have resources like checks and assets defined on the backend host.\nFor Puppet this means that the simplest configuration will be one where checks and other resources are defined on the host using `sensu::backend` class.\nHosts with only the `sensu::agent` class do not need to have checks defined on them, rather just have to have a subscription assigned that matches a check.\n\n### Basic Sensu backend\n\nThe following example will configure sensu-backend, sensu-agent on backend and add a check.\nBy default this module will configure the backend to use Puppet's SSL certificate and CA.\nIt is advisable to not rely on the default password.\n**NOTE** When changing the password value, it's necessary to run Puppet on the backend first to update the `admin` password.\n\n```puppet\n  class { 'sensu':\n    password =\u003e 'supersecret',\n  }\n  include sensu::backend\n  include sensu::agent\n  sensu_check { 'check-cpu':\n    ensure        =\u003e 'present',\n    command       =\u003e 'check-cpu.sh -w 75 -c 90',\n    interval      =\u003e 60,\n    subscriptions =\u003e ['linux'],\n  }\n```\n\n### Basic Sensu agent\n\nThe following example will manage resources necessary to configure a sensu-agent to communicate with a sensu-backend and\nassociated to `linux` and `apache-servers` subscriptions.\n\n```puppet\n  class { 'sensu':\n    api_host                     =\u003e 'sensu-backend.example.com',\n    agent_entity_config_password =\u003e 'supersecret',\n  }\n  class { 'sensu::agent':\n    backends      =\u003e ['sensu-backend.example.com:8081'],\n    subscriptions =\u003e ['linux', 'apache-servers'],\n  }\n```\n\n### Basic Sensu CLI\n\nThe following example will manage the resources necessary to use `sensuctl`.\n\n```puppet\nclass { 'sensu':\n  api_host =\u003e 'sensu-backend.example.com',\n  password =\u003e 'supersecret',\n}\ninclude sensu::cli\n```\n\n**NOTE**: The `sensu::backend` class calls the `sensu::cli` class so it is only necessary to directly call the `sensu::cli` class on hosts not using the `sensu::backend` class.\n\nFor Windows the `install_source` parameter must be provided:\n\n```puppet\nclass { 'sensu':\n  api_host =\u003e 'sensu-backend.example.com',\n  password =\u003e 'supersecret',\n}\nclass { 'sensu::cli':\n  install_source =\u003e 'https://s3-us-west-2.amazonaws.com/sensu.io/sensu-go/5.14.1/sensu-go_5.14.1_windows_amd64.zip',\n}\n```\n\n### API Providers\n\nAll the core resources have a provider that manages resources using the Sensu Go API.\nThe new provider can be used by setting `provider` parameter on a resource to `sensu_api`.\nThe default provider is still `sensuctl` but it's possible to change the provider when defining a resource.\nFor example the following will create a check which can be defined on an host that's not the `sensu-backend`.\n\n```\ninclude ::sensu::api\nsensu_check { \"check-cpu-${facts['hostname']}\":\n  ensure        =\u003e 'present',\n  command       =\u003e 'check-cpu.sh -w 75 -c 90',\n  interval      =\u003e 60,\n  subscriptions =\u003e [\"entity:${facts['hostname']}\"],\n  provider      =\u003e 'sensu_api',\n}\n```\n\nThe `sensu::api` class is required in order to configure the credentials and URL used to communicate with the Sensu backend API.\n\nThe API URL, username and password used for the API are set in the `sensu` class and can be set easily with Hiera:\n\n```yaml\nsensu::api_host: sensu-backend.example.com\nsensu::api_port: 8080\nsensu::username: admin\nsensu::password: supersecret\nsensu::agent_entity_config_password: supersecret\n```\n\n### Manage Windows Agent\n\nThis module supports Windows Sensu Go agent via chocolatey beginning with version 5.12.0.\n\n```puppet\nclass { 'sensu':\n  api_host                     =\u003e 'sensu-backend.example.com',\n  agent_entity_config_password =\u003e 'supersecret',\n}\nclass { 'sensu::agent':\n  backends      =\u003e ['sensu-backend.example.com:8081'],\n  subscriptions =\u003e ['windows'],\n}\n```\n\nIf you do not wish to install using chocolatey then you must define `package_source` as either a URL, a Puppet source or a filesystem path.\n\nInstall sensu-go-agent on Windows from URL:\n\n```puppet\nclass { 'sensu::agent':\n  package_name   =\u003e 'Sensu Agent',\n  package_source =\u003e 'https://s3-us-west-2.amazonaws.com/sensu.io/sensu-go/5.13.1/sensu-go-agent_5.13.1.5957_en-US.x64.msi',\n}\n```\n\nInstall sensu-go-agent on Windows from Puppet source:\n\n```puppet\nclass { 'sensu::agent':\n  package_name   =\u003e 'Sensu Agent',\n  package_source =\u003e 'puppet:///modules/profile/sensu/sensu-go-agent.msi',\n}\n```\n\nIf a system already has the necessary MSI present it can be installed without downloading from an URL:\n\n```puppet\nclass { 'sensu::agent':\n  package_name   =\u003e 'Sensu Agent',\n  package_source =\u003e 'C:\\Temp\\sensu-go-agent.msi',\n}\n```\n\n### Advanced agent\n\nIf you wish to have the `agent.yml` be authoritative for agent entity configs:\n\n```puppet\nclass { 'sensu::agent':\n  agent_managed_entity  =\u003e true,\n}\n```\n\nIf you wish to change the `agent` password you must provide the new and old password.\nIt is advisable to set `show_diff` to `false` to avoid exposing the agent password.\n\n```puppet\nclass { 'sensu':\n  agent_password =\u003e 'supersecret',\n}\nclass { 'sensu::agent':\n  show_diff =\u003e false,\n}\n```\n\nThe `config_hash` parameter allows custom configuration for `agent.yml` outside the `sensu::agent` class parameters.\n\n```puppet\nclass { 'sensu::agent':\n  config_hash =\u003e {\n    'log-level' =\u003e 'debug',\n  },\n}\n```\n\nThe following parameters in `sensu::agent` class are used to populate `agent.yml`:\n\n* entity_name - Passed to `name` key in `agent.yml`\n* subscriptions\n* annotations\n* labels\n* namespace\n* redact\n\nAgent configurations can also be set via `sensu::agent::config_entry`. See [Advanced agent - Custom config entries](#advanced-agent---custom-config-entries).\n\n### Advanced agent - Subscriptions\n\nIt is possible to define subscriptions in many locations and the values merged into `agent.yml`:\n\n```\nclass { 'sensu::agent':\n  subscriptions =\u003e ['base'],\n}\n```\n\nThen in a profile class for Apache you could define the following:\n\n```\nsensu::agent::subscription { 'apache': }\n```\n\nThe resulting `agent.yml` would contain subscriptions for both `base` and `apache`.\n\n**NOTE**: Subscriptions defined using the `sensu::agent` class and `sensu::agent::subscription` are merged to produce the final subscription array.\n\n### Advanced agent - Annotations and Labels\n\nIt is possible to define annotations and labels in many locations and the values merged into `agent.yml`:\n\n```puppet\nclass { 'sensu::agent':\n  labels      =\u003e { 'location' =\u003e 'uswest', 'contacts' =\u003e 'ops@example.com' },\n  annotations =\u003e { 'cpu.warning' =\u003e '90', 'cpu.critical' =\u003e '100' },\n}\n```\n\nThen in a profile class you can define the following:\n\n```puppet\nsensu::agent::label { 'contacts': value =\u003e 'devs@example.com' }\nsensu::agent::label { 'environment': value =\u003e 'dev' }\nsensu::agent::annotation { 'cpu.warning': value =\u003e '75' }\nsensu::agent::annotation { 'fatigue_check/occurrences': value =\u003e '2' }\n```\n\nThe resulting `agent.yml` will contain the following:\n\n```yaml\nlabels:\n  location: uswest\n  contacts: devs@example.com\n  environment: dev\nannotations:\n  cpu.warning: '75'\n  cpu.critical: '100'\n  fatigue_check/occurrences: '2'\n```\n\n**NOTE** `sensu::agent::annotation` and `sensu::agent::label` take precedence over values set by the class `sensu::agent`\n\nIf you wish to redact a label or annotation you can use the `redact` parameter and the key will be added to the `redact` list in `agent.yml`:\n\n```puppet\nsensu::agent::label { 'secret':\n  value  =\u003e 'mysecret',\n  redact =\u003e true,\n}\nsensu::agent::annotation { 'ec2_access_key':\n  value  =\u003e 'some-key',\n  redact =\u003e true,\n}\n```\n\n### Advanced agent - Disable validations\n\nIn some cases it might be desired to disable API and entity validations when agents are managing their own entity.\n\n```puppet\nclass { 'sensu':\n  validate_api =\u003e false,\n}\nclass { 'sensu::agent':\n  agent_managed_entity =\u003e true,\n  validate_entity      =\u003e false,\n}\n```\n\n### Advanced agent - Custom config entries\n\nIt is possible to define config entries for `agent.yml` in many locations in Puppet:\n\n```puppet\nsensu::agent::config_entry { 'keepalive-interval': value =\u003e 20 }\n```\n\nThis would add the following to `agent.yml`:\n\n```yaml\nkeepalive-interval: 20\n```\n\n**NOTE** `sensu::agent::config_entry` takes precendence over values defined in `sensu::agent` class.\n\n### Advanced SSL\n\nBy default this module uses Puppet's SSL certificates and CA.\nIf you would prefer to use different certificates override the `ssl_ca_source`, `ssl_cert_source` and `ssl_key_source` parameters.\nThe value for `api_host` must be valid for the provided certificate and the value used for agent's `backends` must also match the certificate used by the specified backend.\nIf the certificates and keys are already installed then define the source parameters as filesystem paths.\n\n```puppet\nclass { 'sensu':\n  ssl_ca_source =\u003e 'puppet:///modules/profile/sensu/ca.pem',\n  api_host      =\u003e 'sensu-backend.example.com',\n}\nclass { 'sensu::backend':\n  ssl_cert_source =\u003e 'puppet:///modules/profile/sensu/cert.pem',\n  ssl_key_source  =\u003e 'puppet:///modules/profile/sensu/key.pem',\n}\n```\n```puppet\nclass { 'sensu':\n  ssl_ca_source =\u003e 'puppet:///modules/profile/sensu/ca.pem',\n}\nclass { 'sensu::agent':\n  backends      =\u003e ['sensu-backend.example.com:8081'],\n  subscriptions =\u003e ['linux', 'apache-servers'],\n}\n```\n\nTo disable SSL support:\n\n```puppet\nclass { 'sensu':\n  use_ssl =\u003e false,\n}\n```\n\n### Enterprise Support\n\nIn order to activate enterprise support the license file needs to be added:\n\n```puppet\nclass { 'sensu::backend':\n  license_source =\u003e 'puppet:///modules/profile/sensu/license.json',\n}\n```\n\nThe types `sensu_ad_auth` and `sensu_ldap_auth` require a valid enterprise license.\n\n### Contact routing\n\nSee [Sensu Go - Route alerts with event filters](https://docs.sensu.io/sensu-go/latest/observability-pipeline/observe-filter/route-alerts/) for details. The following is one way to configure contact routing in Puppet.\n\nAdd the sensu-go-has-contact-filter bonsai asset:\n\n```puppet\nsensu_bonsai_asset { 'sensu/sensu-go-has-contact-filter':\n  ensure  =\u003e 'present',\n  version =\u003e '0.2.0',\n}\n```\n\nAdd the filters for the defined contacts\n\n```puppet\nsensu_filter { 'contact_dev':\n  ensure         =\u003e 'present',\n  action         =\u003e 'allow',\n  runtime_assets =\u003e ['sensu/sensu-go-has-contact-filter'],\n  expressions    =\u003e ['has_contact(event, \"dev\")'],\n}\nsensu_filter { 'contact_ops':\n  ensure         =\u003e 'present',\n  action         =\u003e 'allow',\n  runtime_assets =\u003e ['sensu/sensu-go-has-contact-filter'],\n  expressions    =\u003e ['has_contact(event, \"ops\")'],\n}\n```\n\nAdd the handlers asset and  handlers for each contact\n\n```puppet\nsensu_bonsai_asset { 'sensu/sensu-email-handler':\n  ensure  =\u003e 'present',\n  version =\u003e '0.2.0',\n}\nsensu_handler { 'email_dev':\n  ensure          =\u003e 'present',\n  type            =\u003e 'pipe',\n  command         =\u003e 'sensu-email-handler -f root@localhost -t dev@example.com -s localhost -i',\n  timeout         =\u003e 10,\n  runtime_assets  =\u003e ['sensu/sensu-email-handler'],\n  filters         =\u003e ['is_incident','not_silenced','contact_dev'],\n}\nsensu_handler { 'email_ops':\n  ensure          =\u003e 'present',\n  type            =\u003e 'pipe',\n  command         =\u003e 'sensu-email-handler -f root@localhost -t ops@example.com -s localhost -i',\n  timeout         =\u003e 10,\n  runtime_assets  =\u003e ['sensu/sensu-email-handler'],\n  filters         =\u003e ['is_incident','not_silenced','contact_ops'],\n}\n```\n\nCreate a handler set to centralize handler management for emails\n\n```puppet\nsensu_handler { 'email':\n  ensure    =\u003e 'present',\n  type      =\u003e 'set',\n  handlers  =\u003e ['email_dev','email_ops'],\n}\n```\n\nLastly define a service that use the contact and the email handler:\n\n```puppet\nsensu_check { 'check_cpu':\n  ensure         =\u003e 'present',\n  labels         =\u003e {\n    'contacts' =\u003e 'dev, ops',\n  },\n  command        =\u003e 'check-cpu.rb -w 75 -c 90',\n  handlers       =\u003e ['email'],\n  interval       =\u003e 30,\n  publish        =\u003e true,\n  subscriptions  =\u003e ['linux'],\n  runtime_assets =\u003e ['sensu-plugins-cpu-checks','sensu-ruby-runtime'],\n}\n```\n\nAgents can also have contacts defined:\n\n```puppet\nclass { 'sensu::agent':\n  labels =\u003e {\n    'contacts' =\u003e 'dev, ops',\n  },\n}\n```\n\n### PostgreSQL datastore support\n\n**NOTE**: This features require a valid Sensu Go enterprise license.\n\nThe following example will add a PostgreSQL server and database to the sensu-backend host and configure Sensu Go to use PostgreSQL as the event datastore.\n\n```puppet\nclass { 'postgresql::globals':\n  manage_package_repo =\u003e true,\n  version             =\u003e '11',\n}\nclass { 'postgresql::server': }\nclass { 'sensu::backend':\n  license_source      =\u003e 'puppet:///modules/profile/sensu/license.json',\n  datastore           =\u003e 'postgresql',\n  postgresql_password =\u003e 'secret',\n}\n```\n\nRefer to the [puppetlabs/postgresql](https://forge.puppet.com/puppetlabs/postgresql) module documentation for details on how to manage PostgreSQL with Puppet.\n\nThe following example uses an external PostgreSQL server.\n\n```puppet\nclass { 'sensu::backend':\n  license_source       =\u003e 'puppet:///modules/profile/sensu/license.json',\n  datastore            =\u003e 'postgresql',\n  postgresql_password  =\u003e 'secret',\n  postgresql_host      =\u003e 'postgresql.example.com',\n  manage_postgresql_db =\u003e false,\n}\n```\n\n**NOTE** Set `postgresql_password` to `false` if you want the DSN to only contain a username.\n\n### Installing Plugins\n\nPlugin management is handled by the `sensu::plugins` class.\n\nExample installing plugins on agent:\n\n```puppet\n  class { 'sensu::agent':\n    backends      =\u003e ['sensu-backend.example.com:8081'],\n    subscriptions =\u003e ['linux', 'apache-servers'],\n  }\n  class { 'sensu::plugins':\n    plugins =\u003e ['disk-checks'],\n  }\n```\n\nThe `plugins` parameter can also be a Hash that sets the version:\n\n```puppet\n  class { 'sensu::agent':\n    backends      =\u003e ['sensu-backend.example.com:8081'],\n    subscriptions =\u003e ['linux', 'apache-servers'],\n  }\n  class { 'sensu::plugins':\n    plugins =\u003e {\n      'disk-checks' =\u003e { 'version' =\u003e 'latest' },\n    },\n  }\n```\n\nSet `dependencies` to an empty Array to disable the `sensu::plugins` dependency management.\n\n```puppet\n  class { 'sensu::plugins':\n    dependencies =\u003e [],\n  }\n```\n\nIf gems are required and not pulled in as gem dependencies they can also be installed.\n\n```puppet\nclass { 'sensu::plugins':\n  plugins          =\u003e ['memory-checks'],\n  gem_dependencies =\u003e ['vmstat'],\n}\n```\n\nYou can uninstall plugins by passing `ensure` as `absent`.\n\n```puppet\n  class { 'sensu::agent':\n    backends      =\u003e ['sensu-backend.example.com:8081'],\n    subscriptions =\u003e ['linux', 'apache-servers'],\n  }\n  class { 'sensu::plugins':\n    plugins =\u003e {\n      'disk-checks' =\u003e { 'ensure' =\u003e 'absent' },\n    },\n  }\n```\n\n### Installing Extensions\n\nExtension management is handled by the `sensu::plugins` class.\n\nExample installing extension on backend:\n\n```puppet\n  class { 'sensu':\n    password =\u003e 'supersecret',\n  }\n  include sensu::backend\n  class { 'sensu::plugins':\n    extensions =\u003e ['graphite'],\n  }\n```\n\nThe `extensions` parameter can also be a Hash that sets the version:\n\n```puppet\n  class { 'sensu':\n    password =\u003e 'supersecret',\n  }\n  include sensu::backend\n  class { 'sensu::plugins':\n    extensions =\u003e {\n      'graphite' =\u003e { 'version' =\u003e 'latest' },\n    },\n  }\n```\n\nYou can uninstall extensions by passing `ensure` as `absent`.\n\n```puppet\n  class { 'sensu':\n    password =\u003e 'supersecret',\n  }\n  include sensu::backend\n  class { 'sensu::plugins':\n    extensions =\u003e {\n      'graphite' =\u003e { 'ensure' =\u003e 'absent' },\n    },\n  }\n```\n\n### Exported resources\n\nOne possible approach to defining checks is having agents export their checks to the sensu-backend using [Exported Resources](https://puppet.com/docs/puppet/latest/lang_exported.html).\n\nThe following example would be defined for agents:\n\n```puppet\n  @@sensu_check { 'check-cpu':\n    ensure        =\u003e 'present',\n    command       =\u003e 'check-cpu.sh -w 75 -c 90',\n    interval      =\u003e 60,\n    subscriptions =\u003e ['linux'],\n  }\n```\n\nThe backend system would collect all `sensu_check` resources.\n\n```puppet\n  Sensu_check \u003c\u003c||\u003e\u003e\n```\n\n### Hiera resources\n\nAll the types provided by this module can have their resources defined via Hiera. A type such as `sensu_check` would be defined via `sensu::resources::checks`.\n\nThe `sensu` class must be included either directly or via `sensu::agent` or `sensu::backend`.\n\nThe following example adds an asset, filter, handler and checks via Hiera:\n\n```yaml\nsensu::resources::assets:\n  sensu-email-handler:\n    ensure: present\n    url: 'https://github.com/sensu/sensu-email-handler/releases/download/0.1.0/sensu-email-handler_0.1.0_linux_amd64.tar.gz'\n    sha512: '755c7a673d94997ab9613ec5969666e808f8b4a8eec1ba998ee7071606c96946ca2947de5189b24ac34a962713d156619453ff7ea43c95dae62bf0fcbe766f2e'\n    filters:\n      - \"entity.system.os == 'linux'\"\n      - \"entity.system.arch == 'amd64'\"\nsensu::resources::filters:\n  hourly:\n    ensure: present\n    action: allow\n    expressions:\n      - 'event.check.occurrences == 1 || event.check.occurrences % (3600 / event.check.interval) == 0'\nsensu::resources::handlers:\n  email:\n    ensure: present\n    type: pipe\n    command: \"sensu-email-handler -f root@localhost -t user@example.com -s localhost -i\"\n    timeout: 10\n    runtime_assets:\n      - sensu-email-handler\n    filters:\n      - is_incident\n      - not_silenced\n      - hourly\nsensu::resources::checks:\n  check-cpu:\n    ensure: present\n    command: check-cpu.sh -w 75 -c 90\n    interval: 60\n    subscriptions:\n      - linux\n    handlers:\n      - email\n    publish: true\n  check-disks:\n    ensure: present\n    command: \"/opt/sensu-plugins-ruby/embedded/bin/check-disk-usage.rb -t '(xfs|ext4)'\"\n    subscriptions:\n      - linux\n    handlers:\n      - email\n    interval: 1800\n    publish: true\n```\n\n### Resource purging\n\nAll the types provided by this module support purging except `sensu_config`.\nThis example will remove all unmanaged Sensu checks:\n\n```puppet\nsensu_resources { 'sensu_check':\n  purge =\u003e true,\n}\n```\n\nTo selectively purge `sensu_agent_entity_config` entries, you can specify the type of config to purge.\nIf `agent_entity_configs` is omitted then all unmanaged `sensu_agent_entity_config` resources will be purged.\nThe following example will only purge subscriptions:\n\n```puppet\nsensu_resources { 'sensu_agent_entity_config':\n  purge                =\u003e true,\n  agent_entity_configs =\u003e ['subscriptions'],\n}\n```\n\n**NOTE**: The Puppet built-in `resources` can also be used for purging but you must ensure that resources that support namespaces are defined using composite names in the form of `$name in $namespace`. See [Composite Names for Namespaces](#composite-names-for-namespaces) for details on composite names.\n\nUsing the Puppet built-in `resources` would look like this:\n\n```puppet\nresources { 'sensu_check':\n  purge =\u003e true,\n}\n```\n\n### Sensu backend cluster\n\nA `sensu-backend` cluster can be defined for fresh installs by defining the necessary `config_hash` values.\nThe following examples are using Hiera and assume the `sensu::backend` class is included.\n\n```yaml\n# data/fqdn/sensu-backend1.example.com.yaml\n---\nsensu::backend::config_hash:\n  etcd-advertise-client-urls: \"http://%{facts.ipaddress}:2379\"\n  etcd-listen-client-urls: \"http://%{facts.ipaddress}:2379\"\n  etcd-listen-peer-urls: 'http://0.0.0.0:2380'\n  etcd-initial-cluster: 'backend1=http://192.168.0.1:2380,backend2=http://192.168.0.2:2380'\n  etcd-initial-advertise-peer-urls: \"http://%{facts.ipaddress}:2380\"\n  etcd-initial-cluster-state: 'new'\n  etcd-initial-cluster-token: ''\n  etcd-name: 'backend1'\n```\n```yaml\n# data/fqdn/sensu-backend2.example.com.yaml\n---\nsensu::backend::config_hash:\n  etcd-advertise-client-urls: \"http://%{facts.ipaddress}:2379\"\n  etcd-listen-client-urls: \"http://%{facts.ipaddress}:2379\"\n  etcd-listen-peer-urls: 'http://0.0.0.0:2380'\n  etcd-initial-cluster: 'backend1=http://192.168.0.1:2380,backend2=http://192.168.0.2:2380'\n  etcd-initial-advertise-peer-urls: \"http://%{facts.ipaddress}:2380\"\n  etcd-initial-cluster-state: 'new'\n  etcd-initial-cluster-token: ''\n  etcd-name: 'backend2'\n```\n\n#### Adding backend members to an existing cluster\n\nAdding new members to an existing cluster requires two steps.\n\nFirst, add the member to the catalog on one of the existing cluster backends with the `sensu_cluster_member` type.\n\n```puppet\nsensu_cluster_member { 'backend3':\n  peer_urls =\u003e ['http://192.168.0.3:2380'],\n}\n```\n\nSecond, configure and start `sensu-backend` to interact with the existing cluster.\nThe output from Puppet when a new `sensu_cluster_member` is applied will print some of the values needed.\n\n```yaml\n# data/fqdn/sensu-backend3.example.com.yaml\n---\nsensu::backend::config_hash:\n  etcd-advertise-client-urls: \"http://%{facts.ipaddress}:2379\"\n  etcd-listen-client-urls: \"http://%{facts.ipaddress}:2379\"\n  etcd-listen-peer-urls: 'http://0.0.0.0:2380'\n  etcd-initial-cluster: 'backend1=http://192.168.0.1:2380,backend2=http://192.168.0.2:2380,backend3=http://192.168.0.3:2380'\n  etcd-initial-advertise-peer-urls: \"http://%{facts.ipaddress}:2380\"\n  etcd-initial-cluster-state: 'existing'\n  etcd-initial-cluster-token: ''\n  etcd-name: 'backend3'\n```\n\nThe first step will not fully add the node to the cluster until the second step is performed.\n\n### Sensu backend federation\n\nThis module supports defining Etcd replicators which allows resources to be sent from one Sensu cluster to another cluster.\nIt is necessary that Etcd be listening on an interface that can be accessed by other Sensu backends.\nFirst configure backend Etcd to listen on an interface besides localhost and also use SSL:\n\n```puppet\nclass { 'sensu::backend':\n  config_hash =\u003e {\n    'etcd-listen-client-urls'    =\u003e \"https://0.0.0.0:2379\",\n    'etcd-advertise-client-urls' =\u003e \"https://0.0.0.0:2379\",\n    'etcd-cert-file'             =\u003e \"/etc/sensu/etcd-ssl/${facts['fqdn'].pem\",\n    'etcd-key-file'              =\u003e \"/etc/sensu/etcd-ssl/${facts['fqdn']}-key.pem\",\n    'etcd-trusted-ca-file'       =\u003e \"/etc/sensu/etcd-ssl/ca.pem\",\n    'etcd-client-cert-auth'      =\u003e true,\n  },\n}\n```\n\nNext configure the Etcd replicator on the backend you wish to push resources from.\nIn the following example all defined `Role` resources will be replicated to the backend at the IP address 192.168.52.30.\n\n```puppet\nsensu_etcd_replicator { 'role_replicator':\n  ensure        =\u003e 'present',\n  ca_cert       =\u003e '/etc/sensu/etcd-ssl/ca.pem',\n  cert          =\u003e '/etc/sensu/etcd-ssl/client.pem',\n  key           =\u003e '/etc/sensu/etcd-ssl/client-key.pem',\n  url           =\u003e 'https://192.168.52.30:2379',\n  resource_name =\u003e 'Role',\n}\nsensu_role { 'test':\n  ensure =\u003e 'present',\n  rules  =\u003e [{'verbs' =\u003e ['get','list'], 'resources' =\u003e ['checks'], 'resource_names' =\u003e ['']}],\n}\n```\n\nThis module also supports defining a federated cluster:\n\n```puppet\nsensu_cluster_federation { 'us-west-2a':\n  ensure   =\u003e 'present',\n  api_urls =\u003e [\n    'https://sensu-backend-site1.example.com:8080',\n    'https://sensu-backend-site2.example.com:8080',\n  ],\n}\n```\n\nIt is also possible to add a backend to an existing Sensu federated cluster.\nThe following example adds the API URL https://sensu-backend-site3.example.com:8080 to the federated cluster named us-west-2a.\n\n```puppet\nsensu_cluster_federation_member { 'https://sensu-backend-site3.example.com:8080 in us-west-2a':\n  ensure =\u003e 'present',\n}\n```\n\nThe above can also be defined using the following example:\n\n```puppet\nsensu_cluster_federation_member { 'https://sensu-backend-site3.example.com:8080':\n  ensure  =\u003e 'present',\n  cluster =\u003e 'us-west-2a',\n}\n```\n\n### Large Environment Considerations\n\nIf the backend system has a large number of resources it may be necessary to query resources using chunk size added in Sensu Go 5.8.\n\n```\nclass { 'sensu::backend':\n  sensuctl_chunk_size =\u003e 100,\n}\n```\n\nIf many thousands of resources such as `sensu_check` are defined there will be an execution of `sensuctl namespace list` for each check to validate\nthe namespace exists if the namespace is not defined in Puppet.\nA similar validation is performed with `sensu_api` provider.  To avoid this extra overhead it may be necessary to disable this validation if you\nare defining namespaces outside of Puppet.\n\n**NOTE**: If namespace validation is disabled it's necessary to ensure a namespace is defined in Puppet in order to assign resources to that namespace.\n\n```puppet\nclass { 'sensu':\n  validate_namespaces =\u003e false,\n}\n```\n\n### Composite Names for Namespaces\n\nAll resources that support having a `namespace` also support a composite name to define the namespace.\n\nFor example, the `sensu_check` with name `check-cpu in team1` would be named `check-cpu` and put into the `team1` namespace.\n\nUsing composite names is necessary if you wish to have multiple resources with the same name but in different namespaces.\n\nFor example to define the same check in two namespaces using the same check name:\n\n```puppet\nsensu_check { 'check-cpu in default':\n  ensure        =\u003e 'present',\n  command       =\u003e 'check-cpu.sh -w 75 -c 90',\n  interval      =\u003e 60,\n  subscriptions =\u003e ['linux'],\n}\nsensu_check { 'check-cpu in team1':\n  ensure        =\u003e 'present',\n  command       =\u003e 'check-cpu.sh -w 75 -c 90',\n  interval      =\u003e 60,\n  subscriptions =\u003e ['linux'],\n}\n```\n\nThe example above would add the `check-cpu` check to both the `default` and `team1` namespaces.\n\n**NOTE:** If you use composite names for namespaces, the `namespace` property takes precedence.\n\n### Installing Bonsai Assets\nInstall a bonsai asset. The latest version will be installed but not automatically upgraded.\n\n```puppet\nsensu_bonsai_asset { 'sensu/sensu-pagerduty-handler':\n  ensure  =\u003e 'present',\n}\n```\n\nInstall specific version of a bonsai asset.\n\n```puppet\nsensu_bonsai_asset { 'sensu/sensu-pagerduty-handler':\n  ensure  =\u003e 'present',\n  version =\u003e '1.2.0',\n}\n```\n\nInstall latest version of a bonsai asset. Puppet will update the Bonsai asset if a new version is released.\n```puppet\nsensu_bonsai_asset { 'sensu/sensu-pagerduty-handler':\n  ensure  =\u003e 'present',\n  version =\u003e 'latest',\n}\n```\n\n### Bolt Tasks\n\nThe following Bolt tasks are provided by this Module:\n\n**sensu::backend\\_upgrade**: Perform backend upgrade via `sensu-backend upgrade` command.\n\nExample: `bolt task run sensu::backend_upgrade --targets sensu_backend`\n\n**sensu::agent\\_event**: Create a Sensu Go agent event via the agent API\n\nExample: `bolt task run sensu::agent_event name=bolttest status=1 output=test --targets sensu_agent`\n\n**sensu::apikey**: Manage Sensu Go API keys\n\nExample: `bolt task run sensu::apikey action=create username=foobar --targets sensu_backend`\nExample: `bolt task run sensu::apikey action=list --targets sensu_backend`\nExample: `bolt task run sensu::apikey action=delete key=replace-with-uuid-key --targets sensu_backend`\n\n**sensu::assets\\_outdated**: Retreive outdated Sensu Go assets\n\nExample: `bolt task run sensu::assets_outdated --targets sensu_backend`\n\n**sensu::check\\_execute**: Execute a Sensu Go check\n\nExample: `bolt task run sensu::check_execute check=test subscription=entity:sensu_agent --targets sensu_backend`\n\n**sensu::event.json**: Manage Sensu Go events\n\nExample: `bolt task run sensu::event action=resolve entity=sensu_agent check=test --targets sensu_backend`\n\nExample: `bolt task run sensu::event action=delete entity=sensu_agent check=test --targets sensu_backend`\n\n**sensu::silenced**: Manage Sensu Go silencings\n\nExample: `bolt task run sensu::silenced action=create subscription=entity:sensu_agent expire_on_resolve=true --targets sensu_backend`\n\nExample: `bolt task run sensu::silenced action=delete subscription=entity:sensu_agent --targets sensu_backend`\n\n**sensu::install\\_agent**: Install Sensu Go agent (Windows and Linux)\n\nExample: `bolt task run sensu::install_agent backend=sensu_backend:8081 subscription=linux output=true --targets linux`\n\nExample: `bolt task run sensu::install_agent backend=sensu_backend:8081 subscription=windows output=true --targets windows`\n\n### Bolt Inventory\n\nThis module provides a plugin to populate Bolt v2 inventory targets.\n\nIn order to use the `sensu` inventory plugin the host executing Bolt must have `sensuctl` configured, see [Basic Sensu CLI](#basic-sensu-cli).\n\nExample of configuring the Bolt inventory with two groups. The `linux` group pulls Sensu Go entities in the `default` namespace with the `linux` subscription. The `linux-qa` group is the same as `linux` group but instead pulling entities from the `qa` namespace.\n\n```yaml\nversion: 2\ngroups:\n  - name: linux\n    targets:\n      - _plugin: sensu\n        namespace: default\n        subscription: linux\n  - name: linux-qa\n    targets:\n      - _plugin: sensu\n        namespace: qa\n        subscription: linux\n```\n\nIf your entities have more than one network interface it may be necessary to specify the order of interfaces to search when looking for the IP address:\n\n```yaml\nversion: 2\ngroups:\n  - name: linux\n    targets:\n      - _plugin: sensu\n        namespace: default\n        subscription: linux\n        interface_list:\n          - eth0\n          - eth1\n```\n\nThe following rules for interface matching determine the value used for `uri`.\n\n1. If `interface_list` was defined then find first match\n1. If `interface_list` not defined and only one interface, use that as ipaddress\n1. If `interface_list` is not defined and more than one interface, use name\n\n## Reference\n\n### Facts\n\n#### `sensu_agent`\n\nThe `sensu_agent` fact returns the Sensu agent version information by the `sensu-agent` binary.\n\n```shell\nfacter -p sensu_agent\n{\n  version =\u003e \"5.1.0\",\n  build =\u003e \"b2ea9fcdb21e236e6e9a7de12225a6d90c786c57\",\n  built =\u003e \"2018-12-18T21:31:11+0000\"\n}\n```\n\n#### `sensu_backend`\n\nThe `sensu_backend` fact returns the Sensu backend version information by the `sensu-backend` binary.\n\n```shell\nfacter -p sensu_backend\n{\n  version =\u003e \"5.1.0\",\n  build =\u003e \"b2ea9fcdb21e236e6e9a7de12225a6d90c786c57\",\n  built =\u003e \"2018-12-18T21:31:11+0000\"\n}\n```\n\n#### `sensuctl`\n\nThe `sensuctl` fact returns the sensuctl version information by the `sensuctl` binary.\n\n```shell\nfacter -p sensuctl\n{\n  version =\u003e \"5.1.0\",\n  build =\u003e \"b2ea9fcdb21e236e6e9a7de12225a6d90c786c57\",\n  built =\u003e \"2018-12-18T21:31:11+0000\"\n}\n```\n\n## Examples\n\nExamples can be found in the [examples](https://github.com/sensu/sensu-puppet/tree/master/examples) directory.\n\n* [Contact Routing](https://github.com/sensu/sensu-puppet/blob/master/examples/contact_routing.pp) - Example of contact routing\n* [Email Alerts](https://github.com/sensu/sensu-puppet/blob/master/examples/email_alerts.pp) - Example of setting up e-mail alerts\n* [InfluxDB Handler](https://github.com/sensu/sensu-puppet/blob/master/examples/influxdb_handler.pp) - Example of setting up InfluxDB handler\n* [LDAP](https://github.com/sensu/sensu-puppet/blob/master/examples/ldap.pp) - Example of setting up LDAP authentication\n* [Logging](https://github.com/sensu/sensu-puppet/blob/master/examples/logging.pp) - Example of setting up improved logging\n* [Pagerduty with Secrets Env Vars](https://github.com/sensu/sensu-puppet/blob/master/examples/pagerduty-with-secrets-env.pp) - Setting up Pagerduty using environment variable secrets\n* [Pagerduty with Secrets vault](https://github.com/sensu/sensu-puppet/blob/master/examples/pagerduty-with-secrets-vault.pp) - Setting up Pagerduty using secrets vault\n* [PostgreSQL with Replication](https://github.com/sensu/sensu-puppet/tree/master/examples/postgresql-replication) - Contains example manifests of setting up Sensu backend and PostgreSQL with PostgreSQL replication.\n* [PostgreSQL with SSL](https://github.com/sensu/sensu-puppet/tree/master/examples/postgresql-ssl) - Contains example manifests of setting up Sensu backend and PostgreSQL to communicate using SSL.\n* [Slack Alerts](https://github.com/sensu/sensu-puppet/blob/master/examples/slack_alerts.pp) - Example of setting up Slack alerts\n\n## Limitations\n\nChanging `sensu::etc_dir` is only supported on systems using systemd.\n\nThe type `sensu_user` does not at this time support `ensure =\u003e absent` due to a limitation with sensuctl, see [sensu-go#2540](https://github.com/sensu/sensu-go/issues/2540).\n\nWhen changing the `sensu::password` value, it's necessary to run Puppet on the backend first to update the `admin` password.\n\n### Notes regarding support\n\nThis module is built for use with Puppet versions 6 and 7 and the ruby\nversions associated with those releases. See `.travis.yml` for an exact\nmatrix of Puppet releases and ruby versions.\n\nThis module targets the latest release of the current major Puppet\nversion and the previous major version. Platform support will be removed\nwhen a platform is no longer supported by Puppet, Sensu or the platform\nmaintainer has signaled that it is end of life (EOL).\n\nThough Amazon does not announce end of life (EOL) for its releases, it\ndoes encourage you to use the latest releases. This module will support\nthe current release and the previous release. Since AWS does not release\nVagrant boxes and the intent of those platforms is to run in AWS, we\nwill not maintain Vagrant systems for local development for Amazon\nLinux.\n\n### Supported Platforms\n\n* EL 6\n* EL 7\n* EL 8\n* Debian 9\n* Debian 10\n* Ubuntu 16.04 LTS\n* Ubuntu 18.04 LTS\n* Ubuntu 20.04 LTS\n* Amazon 2018.03\n* Amazon 2\n* Windows Server 2008 R2\n* Windows Server 2012 R2\n* Windows Server 2016\n* Windows Server 2019\n\n## Development\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\n## License\n\nSee [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsensu%2Fsensu-puppet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsensu%2Fsensu-puppet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsensu%2Fsensu-puppet/lists"}