]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Added alarm-notifier and alarm-evaluator services
authorFrancesco Vollero <fvollero@redhat.com>
Wed, 9 Oct 2013 17:54:24 +0000 (19:54 +0200)
committerFrancesco Vollero <fvollero@redhat.com>
Tue, 15 Oct 2013 18:09:16 +0000 (20:09 +0200)
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 [new file with mode: 0644]
manifests/alarm/notifier.pp [new file with mode: 0644]
manifests/params.pp
spec/classes/ceilometer_alarm_evaluator_spec.rb [new file with mode: 0644]
spec/classes/ceilometer_alarm_notifier_spec.rb [new file with mode: 0644]

diff --git a/manifests/alarm/evaluator.pp b/manifests/alarm/evaluator.pp
new file mode 100644 (file)
index 0000000..60f5ac0
--- /dev/null
@@ -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 (file)
index 0000000..8ed81a6
--- /dev/null
@@ -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;
+    }
+  }
+
+}
index 7963c0c23b5557466c577b5284d12bce6ca8f160..7c0f0a6e4db08d6101567f8833b32e8cbfa0f6d3 100644 (file)
@@ -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 (file)
index 0000000..399f82f
--- /dev/null
@@ -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 (file)
index 0000000..1a6775d
--- /dev/null
@@ -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