Akosiaris has submitted this change and it was merged. Change subject: Refactor nrpe to a module ......................................................................
Refactor nrpe to a module Turned the manifests into a module, added/cleaned up documentation, made puppet-lint happy, moved/created templates and/or files. Added unit tests. Also update site.pp/base.pp to not explicitly load nrpe.pp Still needs some love but this will work for starters. Rspec tests have also been added, but fail at this point Change-Id: I64a9f1d60cbabeef3a096981d634d7399d39bc45 --- M manifests/base.pp D manifests/nrpe.pp M manifests/site.pp A modules/nrpe/Rakefile R modules/nrpe/files/check_dpkg A modules/nrpe/manifests/check.pp A modules/nrpe/manifests/init.pp A modules/nrpe/manifests/monitor_service.pp A modules/nrpe/manifests/packages.pp A modules/nrpe/manifests/service.pp A modules/nrpe/spec/classes/nrpe_spec.rb A modules/nrpe/spec/classes/packages_spec.rb A modules/nrpe/spec/classes/service_spec.rb A modules/nrpe/spec/defines/check_spec.rb A modules/nrpe/spec/defines/monitor_service_spec.rb A modules/nrpe/spec/fixtures/manifests/site.pp A modules/nrpe/spec/fixtures/modules/nrpe/files A modules/nrpe/spec/fixtures/modules/nrpe/manifests A modules/nrpe/spec/fixtures/modules/nrpe/templates A modules/nrpe/spec/spec_helper.rb A modules/nrpe/templates/check.erb R modules/nrpe/templates/nrpe_local.cfg.erb A modules/nrpe/tests/Makefile A modules/nrpe/tests/check.pp A modules/nrpe/tests/monitor_service.pp A modules/nrpe/tests/nrpe.pp A modules/nrpe/tests/packages.pp A modules/nrpe/tests/service.pp 28 files changed, 294 insertions(+), 111 deletions(-) Approvals: Akosiaris: Looks good to me, approved jenkins-bot: Verified diff --git a/manifests/base.pp b/manifests/base.pp index 791fbd3..66b4ad7 100644 --- a/manifests/base.pp +++ b/manifests/base.pp @@ -5,7 +5,6 @@ import "ssh.pp" import "sudo.pp" import "nagios.pp" -import "nrpe.pp" # /var/run has moved to /run in newer Ubuntu versions. # See: http://lwn.net/Articles/436012/ diff --git a/manifests/nrpe.pp b/manifests/nrpe.pp deleted file mode 100644 index 81b1b1d..0000000 --- a/manifests/nrpe.pp +++ /dev/null @@ -1,109 +0,0 @@ -# Definition: nrpe::check -# -# Installs a single NRPE check in /etc/nagios/nrpe.d/ -# -# Arguments: -# - $title -# Name of the check, referenced by monitor_service and Nagios check_command -# e.g. check_varnishhtcpd -# - $command -# Command run by NRPE, e.g. "/usr/lib/nagios/plugins/check_procs -c 1:1 -C varnishtcpd" -define nrpe::check($command) { - Class[nrpe::packages] -> Nrpe::Check[$title] - - file { "/etc/nagios/nrpe.d/${title}.cfg": - owner => root, - group => root, - mode => 0444, - content => "command[${title}]=${command}\n", - notify => Service["nagios-nrpe-server"] - } -} - -# Definition: nrpe::monitor_service -# -# Defines a Nagios check for a remote service over NRPE -# -# Also optionally installs a corresponding NRPE check file -# using nrpe::check -# -# Parameters -# $description - Service check description -# $nrpe_command - if defined, installs this NRPE command as check_${title} -# $contact_group -# $retries -# $ensure - Default: "present" -# -define nrpe::monitor_service( - $description, - $nrpe_command = undef, - $contact_group = "admins", - $retries = 3, - $ensure = "present") -{ - if $nrpe_command != undef { - nrpe::check { "check_${title}": - command => $nrpe_command, - before => ::Monitor_service[$title] - } - } - else { - Nrpe::Check["check_${title}"] -> Nrpe::Monitor_service[$title] - } - - ::monitor_service{ $title: - description => $description, - check_command => "nrpe_check!check_${title}", - contact_group => $contact_group, - retries => $retries, - ensure => $ensure, - } -} - -class nrpe { - include nrpe::packages - include nrpe::service - - #Collect virtual NRPE nagios service checks - Monitor_service <| tag == "nrpe" |> -} -class nrpe::packages { - $nrpe_allowed_hosts = $::realm ? { - "production" => "127.0.0.1,208.80.152.185,208.80.152.161,208.80.154.14", - "labs" => "10.4.0.120" - } - - package { [ "nagios-nrpe-server", "nagios-plugins", "nagios-plugins-basic", "nagios-plugins-extra", "nagios-plugins-standard", "libssl0.9.8" ]: - ensure => present; - } - - file { "/etc/nagios/nrpe_local.cfg": - ensure => present, - owner => root, - group => root, - mode => 0444, - content => template("icinga/nrpe_local.cfg.erb"), - require => Package[nagios-nrpe-server], - } - - file { "/usr/lib/nagios/plugins/check_dpkg": - ensure => present, - owner => root, - group => root, - mode => 0555, - source => "puppet:///files/icinga/check_dpkg", - } -} - -class nrpe::service { - Class[nrpe::packages] -> Class[nrpe::service] - - service { 'nagios-nrpe-server': - ensure => running, - pattern => "/usr/sbin/nrpe", - hasrestart => true, - restart => "killall nrpe; sleep 2; /etc/init.d/nagios-nrpe-server start", - require => Package['nagios-nrpe-server'], - subscribe => File['/etc/nagios/nrpe_local.cfg'], - } -} diff --git a/manifests/site.pp b/manifests/site.pp index bb8bf6b..b6c6633 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -25,7 +25,6 @@ import "nagios.pp" import "network.pp" import "nfs.pp" -import "nrpe.pp" import "openstack.pp" import "poolcounter.pp" import "puppetmaster.pp" diff --git a/modules/nrpe/Rakefile b/modules/nrpe/Rakefile new file mode 100644 index 0000000..e6443dc --- /dev/null +++ b/modules/nrpe/Rakefile @@ -0,0 +1,7 @@ +require 'rake' + +require 'rspec/core/rake_task' + +RSpec::Core::RakeTask.new(:spec) do |t| + t.pattern = 'spec/*/*_spec.rb' +end diff --git a/files/icinga/check_dpkg b/modules/nrpe/files/check_dpkg similarity index 100% rename from files/icinga/check_dpkg rename to modules/nrpe/files/check_dpkg diff --git a/modules/nrpe/manifests/check.pp b/modules/nrpe/manifests/check.pp new file mode 100644 index 0000000..20cf66b --- /dev/null +++ b/modules/nrpe/manifests/check.pp @@ -0,0 +1,33 @@ +# Definition: nrpe::check +# +# Installs a single NRPE check in /etc/nagios/nrpe.d/ +# +# Parameters: +# $title (implicit parameter) +# Name of the check, referenced by monitor_service and check_command +# e.g. check_varnishhtcpd +# $command +# Command run by NRPE, +# e.g. "/usr/lib/nagios/plugins/check_procs -c 1:1 -C varnishtcpd" +# Actions: +# Install a NRPE check definition in /etc/nagios/nrpe.d/ +# +# Requires: +# Class[nrpe::packages] +# +# Sample Usage: +# nrpe::check { 'check_myprocess': +# $command => '/usr/lib/nagios/plugins/check_procs -c 1:1 -C myprocess' +# } + +define nrpe::check($command) { + Class[nrpe::packages] -> Nrpe::Check[$title] + + file { "/etc/nagios/nrpe.d/${title}.cfg": + owner => root, + group => root, + mode => '0444', + content => template('nrpe/check.erb'), + notify => Service['nagios-nrpe-server'] + } +} diff --git a/modules/nrpe/manifests/init.pp b/modules/nrpe/manifests/init.pp new file mode 100644 index 0000000..022eda6 --- /dev/null +++ b/modules/nrpe/manifests/init.pp @@ -0,0 +1,27 @@ +# Class: nrpe +# +# This installes nrpe packages, ensures service in running and collects all +# configuration +# +# Parameters: +# +# Actions: +# Install nrpe packages +# Manage nrpe service status +# Collect all needed exported resources +# +# Requires: +# Class[nrpe::packages] +# Class[nrpe::service] +# Define[monitor_service] +# +# Sample Usage: +# include nrpe + +class nrpe { + include nrpe::packages + include nrpe::service + + #Collect virtual NRPE nagios service checks + Monitor_service <| tag == 'nrpe' |> +} diff --git a/modules/nrpe/manifests/monitor_service.pp b/modules/nrpe/manifests/monitor_service.pp new file mode 100644 index 0000000..e2655fb --- /dev/null +++ b/modules/nrpe/manifests/monitor_service.pp @@ -0,0 +1,45 @@ +# Definition: nrpe::monitor_service +# +# Defines a Nagios check for a remote service over NRPE +# +# Also optionally installs a corresponding NRPE check file +# using nrpe::check +# +# Parameters +# $description +# Service check description +# $nrpe_command +# If defined, installs this NRPE command as check_${title} +# $contact_group +# Defaults to admins, the nagios contact groupo for the service +# $retries +# Defaults to 3. The number of times a service will be retried before +# notifying +# $ensure +# Defaults to present +# +define nrpe::monitor_service( + $description, + $nrpe_command = undef, + $contact_group = 'admins', + $retries = 3, + $ensure = 'present') { + if $nrpe_command != undef { + nrpe::check { "check_${title}": + command => $nrpe_command, + before => ::Monitor_service[$title], + } + } + else { + # TODO: Figure out why this is here + Nrpe::Check["check_${title}"] -> Nrpe::Monitor_service[$title] + } + + ::monitor_service{ $title: + ensure => $ensure, + description => $description, + check_command => "nrpe_check!check_${title}", + contact_group => $contact_group, + retries => $retries, + } +} diff --git a/modules/nrpe/manifests/packages.pp b/modules/nrpe/manifests/packages.pp new file mode 100644 index 0000000..0b0b2b8 --- /dev/null +++ b/modules/nrpe/manifests/packages.pp @@ -0,0 +1,50 @@ +# Class: nrpe::packages +# +# Install and configure nrpe package +# +# Parameters: +# +# Actions: +# Install rnpe package +# Configure nrpe +# +# Requires: +# +# Sample Usage: +# include nrpe::packages + +class nrpe::packages { + # TODO: Parameterize this. + $nrpe_allowed_hosts = $::realm ? { + 'production' => '127.0.0.1,208.80.152.185,208.80.152.161,208.80.154.14', + 'labs' => '10.4.0.120', + default => '127.0.0.1', + } + + package { [ 'nagios-nrpe-server', + 'nagios-plugins', + 'nagios-plugins-basic', + 'nagios-plugins-extra', + 'nagios-plugins-standard', + 'libssl0.9.8' ]: + ensure => present, + } + + file { '/etc/nagios/nrpe_local.cfg': + ensure => present, + owner => root, + group => root, + mode => '0444', + content => template('nrpe/nrpe_local.cfg.erb'), + require => Package[nagios-nrpe-server], + } + + # TODO: Move this somewhere else + file { '/usr/lib/nagios/plugins/check_dpkg': + ensure => present, + owner => root, + group => root, + mode => '0555', + source => 'puppet:///modules/nrpe/check_dpkg', + } +} diff --git a/modules/nrpe/manifests/service.pp b/modules/nrpe/manifests/service.pp new file mode 100644 index 0000000..a2f8c88 --- /dev/null +++ b/modules/nrpe/manifests/service.pp @@ -0,0 +1,29 @@ +# Class: nrpe::service +# +# Ensures service is running +# +# Parameters: +# +# Actions: +# Ensure service is running +# +# Requires: +# Class[nrpe::packages] +# +# Sample Usage: +# include nrpe::service + +class nrpe::service { + Class[nrpe::packages] -> Class[nrpe::service] + + # TODO: Clear the pattern, hasrestart, restart parameters because they are + # ugly + service { 'nagios-nrpe-server': + ensure => running, + pattern => '/usr/sbin/nrpe', + hasrestart => true, + restart => 'killall nrpe; sleep 2; /etc/init.d/nagios-nrpe-server start', + require => Package['nagios-nrpe-server'], + subscribe => File['/etc/nagios/nrpe_local.cfg'], + } +} diff --git a/modules/nrpe/spec/classes/nrpe_spec.rb b/modules/nrpe/spec/classes/nrpe_spec.rb new file mode 100644 index 0000000..469a495 --- /dev/null +++ b/modules/nrpe/spec/classes/nrpe_spec.rb @@ -0,0 +1,6 @@ +require 'spec_helper' + +describe 'nrpe', :type => :class do + it { should include_class('nrpe::packages') } + it { should include_class('nrpe::service') } +end diff --git a/modules/nrpe/spec/classes/packages_spec.rb b/modules/nrpe/spec/classes/packages_spec.rb new file mode 100644 index 0000000..6c9fa02 --- /dev/null +++ b/modules/nrpe/spec/classes/packages_spec.rb @@ -0,0 +1,13 @@ +require 'spec_helper' + +describe 'nrpe::packages', :type => :class do + let(:facts) { { :realm => 'production' } } + it { should contain_package('nagios-nrpe-server') } + it { should contain_package('nagios-plugins') } + it { should contain_package('nagios-plugins-basic') } + it { should contain_package('nagios-plugins-extra') } + it { should contain_package('nagios-plugins-standard') } + it { should contain_package('libssl0.9.8') } + it { should contain_file('/etc/nagios/nrpe_local.cfg') } + it { should contain_file('/usr/lib/nagios/plugins/check_dpkg') } +end diff --git a/modules/nrpe/spec/classes/service_spec.rb b/modules/nrpe/spec/classes/service_spec.rb new file mode 100644 index 0000000..e56d804 --- /dev/null +++ b/modules/nrpe/spec/classes/service_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe 'nrpe::service', :type => :class do + it { should contain_service('nagios-nrpe-server') } +end diff --git a/modules/nrpe/spec/defines/check_spec.rb b/modules/nrpe/spec/defines/check_spec.rb new file mode 100644 index 0000000..6bcdee1 --- /dev/null +++ b/modules/nrpe/spec/defines/check_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe 'nrpe::check', :type => :define do + let(:title) { 'something' } + let(:params) { { :command => '/usr/local/bin/mycommand -i this -o that' } } + + it do + should contain_file('/etc/nagios/nrpe.d/something.cfg') + end +end diff --git a/modules/nrpe/spec/defines/monitor_service_spec.rb b/modules/nrpe/spec/defines/monitor_service_spec.rb new file mode 100644 index 0000000..932cba2 --- /dev/null +++ b/modules/nrpe/spec/defines/monitor_service_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe 'nrpe::monitor_service', :type => :define do + let(:title) { 'something' } + let(:params) { { + :description => 'this is a description', + :contact_group => 'noone', + } } + #let(:params) { { :command => '/usr/local/bin/mycommand -i this -o that' } } + + it do + should contain_monitor_service('something').with( + :description => 'this is a description', + :contact_group => 'noone', + :retries => 3, + :ensure => 'present', + :check_command => 'nrpe!check_something' + ) + end +end diff --git a/modules/nrpe/spec/fixtures/manifests/site.pp b/modules/nrpe/spec/fixtures/manifests/site.pp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/modules/nrpe/spec/fixtures/manifests/site.pp diff --git a/modules/nrpe/spec/fixtures/modules/nrpe/files b/modules/nrpe/spec/fixtures/modules/nrpe/files new file mode 120000 index 0000000..84dafe8 --- /dev/null +++ b/modules/nrpe/spec/fixtures/modules/nrpe/files @@ -0,0 +1 @@ +../../../../files \ No newline at end of file diff --git a/modules/nrpe/spec/fixtures/modules/nrpe/manifests b/modules/nrpe/spec/fixtures/modules/nrpe/manifests new file mode 120000 index 0000000..373b992 --- /dev/null +++ b/modules/nrpe/spec/fixtures/modules/nrpe/manifests @@ -0,0 +1 @@ +../../../../manifests \ No newline at end of file diff --git a/modules/nrpe/spec/fixtures/modules/nrpe/templates b/modules/nrpe/spec/fixtures/modules/nrpe/templates new file mode 120000 index 0000000..f8a06d1 --- /dev/null +++ b/modules/nrpe/spec/fixtures/modules/nrpe/templates @@ -0,0 +1 @@ +../../../../templates \ No newline at end of file diff --git a/modules/nrpe/spec/spec_helper.rb b/modules/nrpe/spec/spec_helper.rb new file mode 100644 index 0000000..d3923f8 --- /dev/null +++ b/modules/nrpe/spec/spec_helper.rb @@ -0,0 +1,8 @@ +require 'rspec-puppet' + +fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures')) + +RSpec.configure do |c| + c.module_path = File.join(fixture_path, 'modules') + c.manifest_dir = File.join(fixture_path, 'manifests') +end diff --git a/modules/nrpe/templates/check.erb b/modules/nrpe/templates/check.erb new file mode 100644 index 0000000..b4a0c82 --- /dev/null +++ b/modules/nrpe/templates/check.erb @@ -0,0 +1,2 @@ +# File generated by puppet. DO NOT edit by hand +command[<%= @title -%>]=<%= @command -%> diff --git a/templates/icinga/nrpe_local.cfg.erb b/modules/nrpe/templates/nrpe_local.cfg.erb similarity index 100% rename from templates/icinga/nrpe_local.cfg.erb rename to modules/nrpe/templates/nrpe_local.cfg.erb diff --git a/modules/nrpe/tests/Makefile b/modules/nrpe/tests/Makefile new file mode 100644 index 0000000..76cd656 --- /dev/null +++ b/modules/nrpe/tests/Makefile @@ -0,0 +1,13 @@ +MANIFESTS=$(wildcard *.pp) +OBJS=$(MANIFESTS:.pp=.po) +TESTS_DIR=$(dir $(CURDIR)) +MODULE_DIR=$(TESTS_DIR:/=) +MODULES_DIR=$(dir $(MODULE_DIR)) + +all: test + +test: $(OBJS) + +%.po: %.pp + puppet parser validate $< + puppet apply --noop --modulepath $(MODULES_DIR) $< diff --git a/modules/nrpe/tests/check.pp b/modules/nrpe/tests/check.pp new file mode 100644 index 0000000..74517a1 --- /dev/null +++ b/modules/nrpe/tests/check.pp @@ -0,0 +1,8 @@ +# + +include nrpe::packages +include nrpe::service + +nrpe::check { 'myproc': + command => 'mycommand', +} diff --git a/modules/nrpe/tests/monitor_service.pp b/modules/nrpe/tests/monitor_service.pp new file mode 100644 index 0000000..78f0738 --- /dev/null +++ b/modules/nrpe/tests/monitor_service.pp @@ -0,0 +1,5 @@ +# + +nrpe::monitor_service{ 'my_service': + description => 'my service monitored', +} diff --git a/modules/nrpe/tests/nrpe.pp b/modules/nrpe/tests/nrpe.pp new file mode 100644 index 0000000..b12d6e0 --- /dev/null +++ b/modules/nrpe/tests/nrpe.pp @@ -0,0 +1,3 @@ +# + +include nrpe diff --git a/modules/nrpe/tests/packages.pp b/modules/nrpe/tests/packages.pp new file mode 100644 index 0000000..1f0930d --- /dev/null +++ b/modules/nrpe/tests/packages.pp @@ -0,0 +1,3 @@ +# + +include nrpe::packages diff --git a/modules/nrpe/tests/service.pp b/modules/nrpe/tests/service.pp new file mode 100644 index 0000000..743ef24 --- /dev/null +++ b/modules/nrpe/tests/service.pp @@ -0,0 +1,4 @@ +# + +include nrpe::packages +include nrpe::service -- To view, visit https://gerrit.wikimedia.org/r/77720 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I64a9f1d60cbabeef3a096981d634d7399d39bc45 Gerrit-PatchSet: 4 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Akosiaris <[email protected]> Gerrit-Reviewer: Akosiaris <[email protected]> Gerrit-Reviewer: Andrew Bogott <[email protected]> Gerrit-Reviewer: Lcarr <[email protected]> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
