From b4294d2939129d6503aeeede21766069ac40e35f Mon Sep 17 00:00:00 2001 From: Francesco Vollero Date: Wed, 9 Oct 2013 19:54:24 +0200 Subject: [PATCH] Added alarm-notifier and alarm-evaluator services This patch add the two services to the current puppet module to be in line with the havana release. Change-Id: Idfd422078d73aaee6da28cef35d825dd24e8afb8 --- manifests/alarm/evaluator.pp | 56 +++++++++++ manifests/alarm/notifier.pp | 72 ++++++++++++++ manifests/params.pp | 26 +++-- .../ceilometer_alarm_evaluator_spec.rb | 99 +++++++++++++++++++ .../classes/ceilometer_alarm_notifier_spec.rb | 96 ++++++++++++++++++ 5 files changed, 339 insertions(+), 10 deletions(-) create mode 100644 manifests/alarm/evaluator.pp create mode 100644 manifests/alarm/notifier.pp create mode 100644 spec/classes/ceilometer_alarm_evaluator_spec.rb create mode 100644 spec/classes/ceilometer_alarm_notifier_spec.rb diff --git a/manifests/alarm/evaluator.pp b/manifests/alarm/evaluator.pp new file mode 100644 index 0000000..60f5ac0 --- /dev/null +++ b/manifests/alarm/evaluator.pp @@ -0,0 +1,56 @@ +# Installs the ceilometer alarm evaluator service +# +# == Params +# [*enabled*] +# should the service be enabled +# [*evaluation_interval*] +# define the time interval for the alarm evaluator +# [*evaluation_service*] +# define which service use for the evaluator +# [*partition_rpc_topic*] +# define which topic the alarm evaluator should access +# +class ceilometer::alarm::evaluator ( + $enabled = true, + $evaluation_interval = 60, + $evaluation_service = 'ceilometer.alarm.service.SingletonAlarmService', + $partition_rpc_topic = 'alarm_partition_coordination', +) { + + include ceilometer::params + + validate_re($evaluation_interval,'^(\d+)$') + + Ceilometer_config<||> ~> Service['ceilometer-alarm-evaluator'] + + Package['ceilometer-alarm'] -> Service['ceilometer-alarm-evaluator'] + + if !defined(Package['ceilometer-alarm']){ + package { 'ceilometer-alarm': + ensure => installed, + name => $::ceilometer::params::alarm_package_name, + } + } + + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + + Package['ceilometer-common'] -> Service['ceilometer-alarm-evaluator'] + + service { 'ceilometer-alarm-evaluator': + ensure => $service_ensure, + name => $::ceilometer::params::alarm_evaluator_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true + } + + ceilometer_config { + 'alarm/evaluation_interval' : value => $evaluation_interval; + 'alarm/evaluation_service' : value => $evaluation_service; + 'alarm/partition_rpc_topic' : value => $partition_rpc_topic; + } +} diff --git a/manifests/alarm/notifier.pp b/manifests/alarm/notifier.pp new file mode 100644 index 0000000..8ed81a6 --- /dev/null +++ b/manifests/alarm/notifier.pp @@ -0,0 +1,72 @@ +# Installs the ceilometer alarm notifier service +# +# == Params +# [*enabled*] +# should the service be enabled +# [*notifier_rpc_topic*] +# define on which topic the notifier will have +# access +# [*rest_notifier_certificate_key*] +# define the certificate key for the rest service +# [*rest_notifier_certificate_file*] +# define the certificate file for the rest service +# [*rest_notifier_ssl_verify*] +# should the ssl verify parameter be enabled +# +class ceilometer::alarm::notifier ( + $enabled = true, + $notifier_rpc_topic = undef, + $rest_notifier_certificate_key = undef, + $rest_notifier_certificate_file = undef, + $rest_notifier_ssl_verify = true, +) { + + include ceilometer::params + + validate_bool($rest_notifier_ssl_verify) + + Ceilometer_config<||> ~> Service['ceilometer-alarm-notifier'] + + Package['ceilometer-alarm'] -> Service['ceilometer-alarm-notifier'] + + if !defined(Package['ceilometer-alarm']){ + package { 'ceilometer-alarm': + ensure => installed, + name => $::ceilometer::params::alarm_package_name, + } + } + + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + + Package['ceilometer-common'] -> Service['ceilometer-alarm-notifier'] + + service { 'ceilometer-alarm-notifier': + ensure => $service_ensure, + name => $::ceilometer::params::alarm_notifier_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true + } + + if $notifier_rpc_topic != undef { + ceilometer_config { + 'alarm/notifier_rpc_topic' : value => $notifier_rpc_topic; + } + } + if $rest_notifier_certificate_key != undef { + ceilometer_config { + 'alarm/rest_notifier_certificate_key' :value => $rest_notifier_certificate_key; + 'alarm/rest_notifier_ssl_verify' :value => $rest_notifier_ssl_verify; + } + } + if $rest_notifier_certificate_file != undef { + ceilometer_config { + 'alarm/rest_notifier_certificate_file' :value => $rest_notifier_certificate_file; + } + } + +} diff --git a/manifests/params.pp b/manifests/params.pp index 7963c0c..7c0f0a6 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -13,6 +13,7 @@ class ceilometer::params { $agent_compute_package_name = 'openstack-ceilometer-compute' $api_package_name = 'openstack-ceilometer-api' $collector_package_name = 'openstack-ceilometer-collector' + $alarm_package_name = 'openstack-ceilometer-alarm' $common_package_name = 'openstack-ceilometer-common' $client_package_name = 'python-ceilometerclient' # service names @@ -20,6 +21,8 @@ class ceilometer::params { $agent_compute_service_name = 'openstack-ceilometer-compute' $api_service_name = 'openstack-ceilometer-api' $collector_service_name = 'openstack-ceilometer-collector' + $alarm_notifier_service_name = 'openstack-ceilometer-alarm-notifier' + $alarm_evaluator_service_name = 'openstack-ceilometer-alarm-evaluator' # db packages if $::operatingsystem == 'Fedora' and $::operatingsystemrelease >= 18 { # name change in f18 : https://bugzilla.redhat.com/show_bug.cgi?id=954155 @@ -34,17 +37,20 @@ class ceilometer::params { } 'Debian': { # package names - $agent_central_package_name = 'ceilometer-agent-central' - $agent_compute_package_name = 'ceilometer-agent-compute' - $api_package_name = 'ceilometer-api' - $collector_package_name = 'ceilometer-collector' - $common_package_name = 'ceilometer-common' - $client_package_name = 'python-ceilometerclient' + $agent_central_package_name = 'ceilometer-agent-central' + $agent_compute_package_name = 'ceilometer-agent-compute' + $api_package_name = 'ceilometer-api' + $collector_package_name = 'ceilometer-collector' + $common_package_name = 'ceilometer-common' + $client_package_name = 'python-ceilometerclient' + $alarm_package_name = ['ceilometer-alarm-evaluator', 'ceilometer-alarm-notifier' ] # service names - $agent_central_service_name = 'ceilometer-agent-central' - $agent_compute_service_name = 'ceilometer-agent-compute' - $api_service_name = 'ceilometer-api' - $collector_service_name = 'ceilometer-collector' + $agent_central_service_name = 'ceilometer-agent-central' + $agent_compute_service_name = 'ceilometer-agent-compute' + $api_service_name = 'ceilometer-api' + $collector_service_name = 'ceilometer-collector' + $alarm_notifier_service_name = 'ceilometer-alarm-notifier' + $alarm_evaluator_service_name = 'ceilometer-alarm-evaluator' # db packages $pymongo_package_name = 'python-pymongo' $sqlite_package_name = 'python-pysqlite2' diff --git a/spec/classes/ceilometer_alarm_evaluator_spec.rb b/spec/classes/ceilometer_alarm_evaluator_spec.rb new file mode 100644 index 0000000..399f82f --- /dev/null +++ b/spec/classes/ceilometer_alarm_evaluator_spec.rb @@ -0,0 +1,99 @@ +require 'spec_helper' + +describe 'ceilometer::alarm::evaluator' do + + let :pre_condition do + "class { 'ceilometer': metering_secret => 's3cr3t' }" + end + + let :params do + { :evaluation_interval => 60, + :evaluation_service => 'ceilometer.alarm.service.SingletonAlarmService', + :partition_rpc_topic => 'alarm_partition_coordination', + :enabled => true, + } + end + + shared_examples_for 'ceilometer-alarm-evaluator' do + it { should include_class('ceilometer::params') } + + it 'installs ceilometer-alarm package' do + should contain_package('ceilometer-alarm').with( + :ensure => 'installed', + :name => platform_params[:alarm_package_name], + :before => 'Service[ceilometer-alarm-evaluator]' + ) + end + + it 'ensures ceilometer-common is installed before the service' do + should contain_package('ceilometer-common').with( + :before => /Service\[ceilometer-alarm-evaluator\]/ + ) + end + + it 'configures ceilometer-alarm-evaluator service' do + should contain_service('ceilometer-alarm-evaluator').with( + :ensure => 'running', + :name => platform_params[:alarm_evaluator_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true + ) + end + + + it 'configures alarm evaluator' do + should contain_ceilometer_config('alarm/evaluation_interval').with_value( params[:evaluation_interval] ) + should contain_ceilometer_config('alarm/evaluation_service').with_value( params[:evaluation_service] ) + should contain_ceilometer_config('alarm/partition_rpc_topic').with_value (params[:partition_rpc_topic] ) + end + + context 'when overriding parameters' do + before do + params.merge!(:evaluation_interval => 80, + :partition_rpc_topic => 'alarm_partition_coordination', + :evaluation_service => 'ceilometer.alarm.service.SingletonTestAlarmService') + end + it { should contain_ceilometer_config('alarm/evaluation_interval').with_value(params[:evaluation_interval]) } + it { should contain_ceilometer_config('alarm/evaluation_service').with_value(params[:evaluation_service]) } + it { should contain_ceilometer_config('alarm/partition_rpc_topic').with_value(params[:partition_rpc_topic]) } + end + + context 'when override the evaluation interval with a non numeric value' do + before do + params.merge!(:evaluation_interval => 'NaN') + end + + it { expect { should contain_ceilometer_config('alarm/evaluation_interval') }.to\ + raise_error(Puppet::Error, /validate_re\(\): .* does not match/) } + end + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + let :platform_params do + { :alarm_package_name => ['ceilometer-alarm-evaluator', + 'ceilometer-alarm-notifier' ], + :alarm_evaluator_service_name => 'ceilometer-alarm-evaluator' } + end + + it_configures 'ceilometer-alarm-evaluator' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + let :platform_params do + { :alarm_package_name => 'openstack-ceilometer-alarm', + :alarm_evaluator_service_name => 'openstack-ceilometer-alarm-evaluator' } + end + + it_configures 'ceilometer-alarm-evaluator' + end + +end diff --git a/spec/classes/ceilometer_alarm_notifier_spec.rb b/spec/classes/ceilometer_alarm_notifier_spec.rb new file mode 100644 index 0000000..1a6775d --- /dev/null +++ b/spec/classes/ceilometer_alarm_notifier_spec.rb @@ -0,0 +1,96 @@ +require 'spec_helper' + +describe 'ceilometer::alarm::notifier' do + + let :pre_condition do + "class { 'ceilometer': metering_secret => 's3cr3t' }" + end + + let :params do + { + #:notifier_rpc_topic => 'UNSET', + #:rest_notifier_certificate_key => 'UNSET', + #:rest_notifier_certificate_file => 'UNSET', + #:rest_notifier_ssl_verify => true, + :enabled => true, + } + end + + shared_examples_for 'ceilometer-alarm-notifier' do + it { should include_class('ceilometer::params') } + + it 'installs ceilometer-alarm package' do + should contain_package('ceilometer-alarm').with( + :ensure => 'installed', + :name => platform_params[:alarm_package_name], + :before => 'Service[ceilometer-alarm-notifier]' + ) + end + + it 'ensures ceilometer-common is installed before the service' do + should contain_package('ceilometer-common').with( + :before => /Service\[ceilometer-alarm-notifier\]/ + ) + end + + it 'configures ceilometer-alarm-notifier service' do + should contain_service('ceilometer-alarm-notifier').with( + :ensure => 'running', + :name => platform_params[:alarm_notifier_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true + ) + end + + + it 'configures alarm notifier' do + should_not contain_ceilometer_config('alarm/notifier_rpc_topic') + should_not contain_ceilometer_config('alarm/rest_notifier_certificate_key') + should_not contain_ceilometer_config('alarm/rest_notifier_certificate_file') + should_not contain_ceilometer_config('alarm/rest_notifier_ssl_verify') + end + + context 'when overriding parameters' do + before do + params.merge!(:notifier_rpc_topic => 'alarm_notifier', + :rest_notifier_certificate_key => '0xdeadbeef', + :rest_notifier_certificate_file => '/var/file', + :rest_notifier_ssl_verify => true) + end + it { should contain_ceilometer_config('alarm/notifier_rpc_topic').with_value(params[:notifier_rpc_topic]) } + it { should contain_ceilometer_config('alarm/rest_notifier_certificate_key').with_value(params[:rest_notifier_certificate_key]) } + it { should contain_ceilometer_config('alarm/rest_notifier_certificate_file').with_value(params[:rest_notifier_certificate_file]) } + it { should contain_ceilometer_config('alarm/rest_notifier_ssl_verify').with_value(params[:rest_notifier_ssl_verify]) } + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + let :platform_params do + { :alarm_package_name => ['ceilometer-alarm-evaluator', + 'ceilometer-alarm-notifier' ], + :alarm_notifier_service_name => 'ceilometer-alarm-notifier' } + end + + it_configures 'ceilometer-alarm-notifier' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + let :platform_params do + { :alarm_package_name => 'openstack-ceilometer-alarm', + :alarm_notifier_service_name => 'openstack-ceilometer-alarm-notifier' } + end + + it_configures 'ceilometer-alarm-notifier' + end + +end -- 2.45.2