From 5b2f4ca8c9e0c6e667e4d2f83f0e627290e8a5ed Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 8 Jun 2020 10:48:36 +0200 Subject: [PATCH] Add memcached exporter support --- manifests/memcached_exporter.pp | 114 ++++++++++++++++++++++++ spec/classes/memcached_exporter_spec.rb | 31 +++++++ 2 files changed, 145 insertions(+) create mode 100644 manifests/memcached_exporter.pp create mode 100644 spec/classes/memcached_exporter_spec.rb diff --git a/manifests/memcached_exporter.pp b/manifests/memcached_exporter.pp new file mode 100644 index 000000000..89a9d2620 --- /dev/null +++ b/manifests/memcached_exporter.pp @@ -0,0 +1,114 @@ +# @summary This module manages prometheus node memcached_exporter +# @param arch +# Architecture (amd64 or i386) +# @param bin_dir +# Directory where binaries are located +# @param download_extension +# Extension for the release binary archive +# @param download_url +# Complete URL corresponding to the where the release binary archive can be downloaded +# @param download_url_base +# Base URL for the binary archive +# @param extra_groups +# Extra groups to add the binary user to +# @param extra_options +# Extra options added to the startup command +# @param group +# Group under which the binary is running +# @param init_style +# Service startup scripts style (e.g. rc, upstart or systemd) +# @param install_method +# Installation method: url or package (only url is supported currently) +# @param manage_group +# Whether to create a group for or rely on external code for that +# @param manage_service +# Should puppet manage the service? (default true) +# @param manage_user +# Whether to create user or rely on external code for that +# @param os +# Operating system (linux is the only one supported) +# @param package_ensure +# If package, then use this for package ensure default 'latest' +# @param package_name +# The binary package name - not available yet +# @param purge_config_dir +# Purge config files no longer generated by Puppet +# @param restart_on_change +# Should puppet restart the service on configuration change? (default true) +# @param service_enable +# Whether to enable the service from puppet (default true) +# @param service_ensure +# State ensured for the service (default 'running') +# @param service_name +# Name of the memcached exporter service (default 'memcached_exporter') +# @param user +# User which runs the service +# @param version +# The binary release version +class prometheus::memcached_exporter ( + String $download_extension = 'tar.gz', + String $download_url_base = 'https://github.com/prometheus/memcached_exporter/releases', + Array[String] $extra_groups = [], + String $group = 'memcached-exporter', + String $package_ensure = 'present', + String[1] $package_name = 'memcached_exporter', + String $user = 'memcached-exporter', + String $version = '0.6.0', + Boolean $purge_config_dir = true, + Boolean $restart_on_change = true, + Boolean $service_enable = true, + Stdlib::Ensure::Service $service_ensure = 'running', + String[1] $service_name = 'memcached_exporter', + Prometheus::Initstyle $init_style = $facts['service_provider'], + String $install_method = $prometheus::install_method, + Boolean $manage_group = true, + Boolean $manage_service = true, + Boolean $manage_user = true, + String[1] $os = downcase($facts['kernel']), + String $extra_options = '', + Optional[String] $download_url = undef, + String[1] $arch = $prometheus::real_arch, + String $bin_dir = $prometheus::bin_dir, + Boolean $export_scrape_job = false, + Stdlib::Port $scrape_port = 9150, + String[1] $scrape_job_name = 'memcached', + Optional[Hash] $scrape_job_labels = undef, + Optional[String[1]] $bin_name = undef, +) inherits prometheus { + + $real_download_url = pick($download_url,"${download_url_base}/download/v${version}/${package_name}-${version}.${os}-${arch}.${download_extension}") + + $notify_service = $restart_on_change ? { + true => Service[$service_name], + default => undef, + } + + prometheus::daemon { $service_name: + install_method => $install_method, + version => $version, + download_extension => $download_extension, + os => $os, + arch => $arch, + real_download_url => $real_download_url, + bin_dir => $bin_dir, + notify_service => $notify_service, + package_name => $package_name, + package_ensure => $package_ensure, + manage_user => $manage_user, + user => $user, + extra_groups => $extra_groups, + group => $group, + manage_group => $manage_group, + purge => $purge_config_dir, + options => $extra_options, + init_style => $init_style, + service_ensure => $service_ensure, + service_enable => $service_enable, + manage_service => $manage_service, + export_scrape_job => $export_scrape_job, + scrape_port => $scrape_port, + scrape_job_name => $scrape_job_name, + scrape_job_labels => $scrape_job_labels, + bin_name => $bin_name, + } +} diff --git a/spec/classes/memcached_exporter_spec.rb b/spec/classes/memcached_exporter_spec.rb new file mode 100644 index 000000000..6c4e5e377 --- /dev/null +++ b/spec/classes/memcached_exporter_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper' + +describe 'prometheus::memcached_exporter' do + on_supported_os.each do |os, facts| + context "on #{os}" do + let(:facts) do + facts.merge(os_specific_facts(facts)) + end + + context 'with all defaults' do + describe 'with all defaults' do + it { is_expected.to compile.with_all_deps } + if facts[:os]['name'] == 'Archlinux' + it { is_expected.to contain_package('memcached_exporter') } + it { is_expected.not_to contain_file('/usr/local/bin/memcached_exporter') } + it { is_expected.not_to contain_archive('/tmp/memcached_exporter-0.6.0.tar.gz') } + else + it { is_expected.to contain_archive('/tmp/memcached_exporter-0.6.0.tar.gz') } + it { is_expected.to contain_file('/usr/local/bin/memcached_exporter').with('target' => '/opt/memcached_exporter-0.6.0.linux-amd64/memcached_exporter') } + it { is_expected.not_to contain_package('memcached_exporter') } + end + it { is_expected.to contain_prometheus__daemon('memcached_exporter') } + it { is_expected.to contain_user('memcached-exporter') } + it { is_expected.to contain_group('memcached-exporter') } + it { is_expected.to contain_service('memcached_exporter') } + it { is_expected.to contain_class('prometheus') } + end + end + end + end +end