From 53fabc923be20afbf90ee0edbc1d6dedb00fd67c Mon Sep 17 00:00:00 2001 From: Ben Vincent Date: Sun, 3 Aug 2025 15:03:29 +1000 Subject: [PATCH] feat: add nzbget_exporter (#368) - add nzbget_exporter class - add exporter to nzbget class Reviewed-on: https://git.unkin.net/unkin/puppet-prod/pulls/368 --- hieradata/roles/apps/media/nzbget.yaml | 7 ++ .../exporters/manifests/nzbget_exporter.pp | 68 +++++++++++++++++++ .../templates/nzbget_exporter.service.erb | 15 ++++ 3 files changed, 90 insertions(+) create mode 100644 modules/exporters/manifests/nzbget_exporter.pp create mode 100644 modules/exporters/templates/nzbget_exporter.service.erb diff --git a/hieradata/roles/apps/media/nzbget.yaml b/hieradata/roles/apps/media/nzbget.yaml index 7a751db..f13269d 100644 --- a/hieradata/roles/apps/media/nzbget.yaml +++ b/hieradata/roles/apps/media/nzbget.yaml @@ -4,6 +4,7 @@ hiera_include: - nzbget - profiles::media::nzbget - profiles::nginx::ldapauth + - exporters::nzbget_exporter profiles::packages::include: unrar: {} @@ -13,6 +14,9 @@ nzbget::params::user: nzbget nzbget::params::group: media nzbget::params::manage_group: false +# nzbget_exporter +exporters::nzbget_exporter::enable: true + # additional altnames profiles::pki::vault::alt_names: - nzbget.main.unkin.net @@ -62,6 +66,9 @@ profiles::consul::client::node_rules: - resource: service segment: nzbget disposition: write + - resource: service + segment: nzbget_exporter + disposition: write profiles::yum::global::repos: rpmfusion-free: diff --git a/modules/exporters/manifests/nzbget_exporter.pp b/modules/exporters/manifests/nzbget_exporter.pp new file mode 100644 index 0000000..7807744 --- /dev/null +++ b/modules/exporters/manifests/nzbget_exporter.pp @@ -0,0 +1,68 @@ +class exporters::nzbget_exporter ( + Boolean $enable = false, + String $user = 'nzbget_exporter', + String $group = 'nzbget_exporter', + Boolean $manage_user = true, + Boolean $manage_service = true, + Stdlib::Port $port = 9452, + Stdlib::HTTPUrl $url = 'http://127.0.0.1:6789', + Stdlib::Absolutepath $exec_path = '/usr/bin/nzbget_exporter', +){ + + if $enable { + + # install required package + package {'nzbget_exporter': + ensure => installed, + } + + # manage the user/group + if $manage_user { + group { $group: + ensure => present, + } + + user { $user: + ensure => present, + shell => '/usr/sbin/nologin', + groups => $group, + managehome => true, + } + } + + # manage the systemd service + if $manage_service { + + # Use these in notifications or file resources + systemd::unit_file { 'nzbget_exporter.service': + content => template('exporters/nzbget_exporter.service.erb'), + enable => true, + active => true, + subscribe => Package['nzbget_exporter'], + } + } + + # manage consul service + consul::service { 'nzbget_exporter': + service_name => 'nzbget_exporter', + address => $facts['networking']['ip'], + port => $port, + tags => [ + 'metrics', + 'metrics_scheme=http', + 'metrics_job=nzbget', + ], + checks => [ + { + id => 'nzbget_exporter_http_check', + name => 'nzbget_exporter HTTP Check', + http => "http://${facts['networking']['fqdn']}:${port}/metrics", + method => 'GET', + tls_skip_verify => true, + interval => '10s', + timeout => '1s', + }, + ], + } + } +} diff --git a/modules/exporters/templates/nzbget_exporter.service.erb b/modules/exporters/templates/nzbget_exporter.service.erb new file mode 100644 index 0000000..8248d67 --- /dev/null +++ b/modules/exporters/templates/nzbget_exporter.service.erb @@ -0,0 +1,15 @@ +[Unit] +Description=Prometheus nzbget_exporter +Wants=network-online.target +After=network-online.target + +[Service] +User=<%= @user %> +Group=<%= @group %> +ExecStart=<%= @exec_path %> --host=<%= @url %> +ExecReload=/bin/kill -HUP $MAINPID +KillMode=process +Restart=always + +[Install] +WantedBy=multi-user.target