--- /dev/null
+# 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;
+ }
+}
--- /dev/null
+# 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;
+ }
+ }
+
+}
$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
$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
}
'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'
--- /dev/null
+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
--- /dev/null
+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