Skip to content

Commit

Permalink
node_exporter 0.15.0 compatibiity
Browse files Browse the repository at this point in the history
fixes voxpupuli#70
fixes voxpupuli#33

change collector parameterization to be compatible with node_exporter 0.15.0

this should be released with a major version since it breaks paramter compatinbility

for two step migration of profiles and roles using this keep node_exporter::collectors paramter as noop with deprecation warning for at least one release
  • Loading branch information
TheMeier committed Oct 19, 2017
1 parent 44a0127 commit 187447a
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 42 deletions.
15 changes: 5 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
| ---------------- | ----------------------------------- |
| >= 0.16.2 | latest |

node_exporter >= 0.15.0


## Background

Expand Down Expand Up @@ -82,26 +84,19 @@ alertrules:
On the monitored nodes:

```puppet
class { '::prometheus::node_exporter':
collectors => ['diskstats','filesystem','loadavg','meminfo','netdev','stat','time']
}
include prometheus::node_exporter
```

or:

```puppet
class { 'prometheus::node_exporter':
version => '0.12.0',
collectors => ['diskstats','filesystem','loadavg','meminfo','logind','netdev','netstat','stat','time','interrupts','ntp','tcpstat'],
extra_options => '-collector.ntp.server ntp1.orange.intra',
collectors_disable => ['loadavg','mdadm' ],
extra_options => '--collector.ntp.server ntp1.orange.intra',
}
```

or simply:
```puppet
include ::prometheus::node_exporter
```

For more information regarding class parameters please take a look at class docstring.

## Limitations/Known issues
Expand Down
82 changes: 51 additions & 31 deletions manifests/node_exporter.pp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,16 @@
# Directory where binaries are located
#
# [*collectors*]
# The set of node node_exporter collectors. Use default collectors if empty.
# deprecated, unused kept for migration scenatrios
# will be removed in next release
#
# [*collectors_enable*]
# Collectors to enable, addtionally to the defaults
# https://github.com/prometheus/node_exporter#enabled-by-default
#
# [*collectors_disbale*]
# disable collectors which are enabled by default
# https://github.com/prometheus/node_exporter#enabled-by-default
#
# [*download_extension*]
# Extension for the release binary archive
Expand Down Expand Up @@ -76,30 +85,32 @@
# [*version*]
# The binary release version
class prometheus::node_exporter (
$arch = $::prometheus::params::arch,
$bin_dir = $::prometheus::params::bin_dir,
$collectors = $::prometheus::params::node_exporter_collectors,
$download_extension = $::prometheus::params::node_exporter_download_extension,
$download_url = undef,
$download_url_base = $::prometheus::params::node_exporter_download_url_base,
$extra_groups = $::prometheus::params::node_exporter_extra_groups,
$extra_options = '',
$group = $::prometheus::params::node_exporter_group,
$init_style = $::prometheus::params::init_style,
$install_method = $::prometheus::params::install_method,
$manage_group = true,
$manage_service = true,
$manage_user = true,
$os = $::prometheus::params::os,
$package_ensure = $::prometheus::params::node_exporter_package_ensure,
$package_name = $::prometheus::params::node_exporter_package_name,
$purge_config_dir = true,
$restart_on_change = true,
$service_enable = true,
$service_ensure = 'running',
$service_name = 'node_exporter',
$user = $::prometheus::params::node_exporter_user,
$version = $::prometheus::params::node_exporter_version,
$arch = $::prometheus::params::arch,
$bin_dir = $::prometheus::params::bin_dir,
$collectors = undef,
Array[String] $collectors_enable = [],
Array[String] $collectors_disable = [],
$download_extension = $::prometheus::params::node_exporter_download_extension,
$download_url = undef,
$download_url_base = $::prometheus::params::node_exporter_download_url_base,
$extra_groups = $::prometheus::params::node_exporter_extra_groups,
$extra_options = '',
$group = $::prometheus::params::node_exporter_group,
$init_style = $::prometheus::params::init_style,
$install_method = $::prometheus::params::install_method,
$manage_group = true,
$manage_service = true,
$manage_user = true,
$os = $::prometheus::params::os,
$package_ensure = $::prometheus::params::node_exporter_package_ensure,
$package_name = $::prometheus::params::node_exporter_package_name,
$purge_config_dir = true,
$restart_on_change = true,
$service_enable = true,
$service_ensure = 'running',
$service_name = 'node_exporter',
$user = $::prometheus::params::node_exporter_user,
$version = $::prometheus::params::node_exporter_version,
) inherits prometheus::params {
# Prometheus added a 'v' on the realease name at 0.13.0
if versioncmp ($version, '0.13.0') >= 0 {
Expand All @@ -113,19 +124,28 @@
validate_bool($manage_user)
validate_bool($manage_service)
validate_bool($restart_on_change)
validate_array($collectors)
if $collectors != undef {
warning('Use of $collectors parameter is deprecated')
}

$notify_service = $restart_on_change ? {
true => Service[$service_name],
default => undef,
}

if empty($collectors) {
$options = $extra_options
} else {
$str_collectors = join($collectors, ',')
$options = "-collectors.enabled=${str_collectors} ${extra_options}"
$cmd_collectors_enable = $collectors_enable.map |$collector| {
"--collector.${collector}"
}

$cmd_collectors_disable = $collectors_disable.map |$collector| {
"--no-collector.${collector}"
}


$options = join([$extra_options,
join($cmd_collectors_enable, ' '),
join($cmd_collectors_disable, ' ') ], ' ')

prometheus::daemon { $service_name :
install_method => $install_method,
version => $version,
Expand Down
1 change: 0 additions & 1 deletion manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@
$mongodb_exporter_package_name = 'mongodb_exporter'
$mongodb_exporter_user = 'mongodb-exporter'
$mongodb_exporter_version = '0.3.1'
$node_exporter_collectors = ['diskstats','filesystem','loadavg','meminfo','netdev','stat','time']
$node_exporter_download_extension = 'tar.gz'
$node_exporter_download_url_base = 'https://github.com/prometheus/node_exporter/releases'
$node_exporter_extra_groups = []
Expand Down
27 changes: 27 additions & 0 deletions spec/classes/node_exporter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,33 @@
facts
end

context 'without parameters' do
it { is_expected.to contain_prometheus__daemon('node_exporter').with(options: ' ') }
end

context 'without collector parameters' do
let(:params) do
{
collectors_enable: %w[foo bar],
collectors_disable: %w[baz qux]
}
end

it { is_expected.to contain_prometheus__daemon('node_exporter').with(options: ' --collector.foo --collector.bar --no-collector.baz --no-collector.qux') }
end

context 'without collector parameters and extra options' do
let(:params) do
{
collectors_enable: %w[foo bar],
collectors_disable: %w[baz qux],
extra_options: '--path.procfs /host/proc --path.sysfs /host/sys'
}
end

it { is_expected.to contain_prometheus__daemon('node_exporter').with(options: '--path.procfs /host/proc --path.sysfs /host/sys --collector.foo --collector.bar --no-collector.baz --no-collector.qux') }
end

context 'with version specified' do
let(:params) do
{
Expand Down

0 comments on commit 187447a

Please sign in to comment.