From db81d776f1e0b3e7ecbb8ae98d74e55e6d773bb1 Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Fri, 24 Jan 2014 15:25:06 +0100 Subject: [PATCH] Implement notification agent service In Icehouse, ceilometer-agent-notification is a new service which splits ceilometer-collector responsibilites. implement blueprint ceilometer-agent-notification Change-Id: Iccc660814991e30b12a884a6e6ffd4f581c768c4 Signed-off-by: Emilien Macchi --- examples/site.pp | 4 + manifests/agent/notification.pp | 74 ++++++++++++++++ manifests/collector.pp | 7 +- manifests/params.pp | 67 ++++++++------- .../ceilometer_agent_notification_spec.rb | 85 +++++++++++++++++++ spec/classes/ceilometer_collector_spec.rb | 5 +- 6 files changed, 202 insertions(+), 40 deletions(-) create mode 100644 manifests/agent/notification.pp create mode 100644 spec/classes/ceilometer_agent_notification_spec.rb diff --git a/examples/site.pp b/examples/site.pp index 32cbe25..b8dd723 100644 --- a/examples/site.pp +++ b/examples/site.pp @@ -63,4 +63,8 @@ node default { time_to_live => '2592000' } + # Install notification agent + class { 'ceilometer::agent::notification': + } + } diff --git a/manifests/agent/notification.pp b/manifests/agent/notification.pp new file mode 100644 index 0000000..af57573 --- /dev/null +++ b/manifests/agent/notification.pp @@ -0,0 +1,74 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Author: Emilien Macchi +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# == Class: ceilometer::agent::notification +# +# Configure the ceilometer notification agent. +# This configures the plugin for the API server, but does nothing +# about configuring the agents that must also run and share a config +# file with the OVS plugin if both are on the same machine. +# +# === Parameters +# +# [*enabled*] +# (optional) Should the service be started or not +# Defaults to true +# +# [*ack_on_event_error*] +# (optional) Acknowledge message when event persistence fails. +# Defaults to true +# +# [*store_events*] +# (optional) Save event details. +# Defaults to false +# + +class ceilometer::agent::notification ( + $enabled = true, + $ack_on_event_error = true, + $store_events = false +) { + + include ceilometer::params + + Ceilometer_config<||> ~> Service['ceilometer-agent-notification'] + + Package[$::ceilometer::params::agent_notification_package_name] -> Service['ceilometer-agent-notification'] + Package[$::ceilometer::params::agent_notification_package_name] -> Package<| title == 'ceilometer-agent-notification' |> + ensure_packages($::ceilometer::params::agent_notification_package_name) + + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + + Package['ceilometer-common'] -> Service['ceilometer-agent-notification'] + service { 'ceilometer-agent-notification': + ensure => $service_ensure, + name => $::ceilometer::params::agent_notification_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true + } + + ceilometer_config { + 'notification/ack_on_event_error': value => $ack_on_event_error; + 'notification/store_events' : value => $store_events; + } + +} diff --git a/manifests/collector.pp b/manifests/collector.pp index 8ba5321..fe2bf1c 100644 --- a/manifests/collector.pp +++ b/manifests/collector.pp @@ -12,11 +12,8 @@ class ceilometer::collector ( Ceilometer_config<||> ~> Service['ceilometer-collector'] - Package['ceilometer-collector'] -> Service['ceilometer-collector'] - package { 'ceilometer-collector': - ensure => installed, - name => $::ceilometer::params::collector_package_name, - } + Package[$::ceilometer::params::collector_package_name] -> Service['ceilometer-collector'] + ensure_packages($::ceilometer::params::collector_package_name) if $enabled { $service_ensure = 'running' diff --git a/manifests/params.pp b/manifests/params.pp index 89281be..feb1e19 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -9,22 +9,25 @@ class ceilometer::params { case $::osfamily { 'RedHat': { # package names - $agent_central_package_name = 'openstack-ceilometer-central' - $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' + $agent_central_package_name = 'openstack-ceilometer-central' + $agent_compute_package_name = 'openstack-ceilometer-compute' + $api_package_name = 'openstack-ceilometer-api' + $collector_package_name = 'openstack-ceilometer-collector' + $agent_notification_package_name = 'openstack-ceilometer-collector' + # notification agent is included in collector package: + $alarm_package_name = ['openstack-ceilometer-alarm'] + $common_package_name = 'openstack-ceilometer-common' + $client_package_name = 'python-ceilometerclient' # service names - $agent_central_service_name = 'openstack-ceilometer-central' - $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' - $pymongo_package_name = 'python-pymongo' - $psycopg_package_name = 'python-psycopg2' + $agent_central_service_name = 'openstack-ceilometer-central' + $agent_compute_service_name = 'openstack-ceilometer-compute' + $api_service_name = 'openstack-ceilometer-api' + $collector_service_name = 'openstack-ceilometer-collector' + $agent_notification_service_name = 'openstack-ceilometer-agent-notification' + $alarm_notifier_service_name = 'openstack-ceilometer-alarm-notifier' + $alarm_evaluator_service_name = 'openstack-ceilometer-alarm-evaluator' + $pymongo_package_name = 'python-pymongo' + $psycopg_package_name = 'python-psycopg2' # db packages if $::operatingsystem == 'Fedora' and $::operatingsystemrelease >= 18 { # fallback to stdlib version, not provided on fedora @@ -36,24 +39,26 @@ 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' - $alarm_package_name = ['ceilometer-alarm-notifier','ceilometer-alarm-evaluator'] + $agent_central_package_name = 'ceilometer-agent-central' + $agent_compute_package_name = 'ceilometer-agent-compute' + $api_package_name = 'ceilometer-api' + $collector_package_name = 'ceilometer-collector' + $agent_notification_package_name = 'ceilometer-agent-notification' + $common_package_name = 'ceilometer-common' + $client_package_name = 'python-ceilometerclient' + $alarm_package_name = ['ceilometer-alarm-notifier','ceilometer-alarm-evaluator'] # 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' - $alarm_notifier_service_name = 'ceilometer-alarm-notifier' - $alarm_evaluator_service_name = 'ceilometer-alarm-evaluator' + $agent_central_service_name = 'ceilometer-agent-central' + $agent_compute_service_name = 'ceilometer-agent-compute' + $collector_service_name = 'ceilometer-collector' + $api_service_name = 'ceilometer-api' + $agent_notification_service_name = 'ceilometer-agent-notification' + $alarm_notifier_service_name = 'ceilometer-alarm-notifier' + $alarm_evaluator_service_name = 'ceilometer-alarm-evaluator' # db packages - $psycopg_package_name = 'python-psycopg2' - $pymongo_package_name = 'python-pymongo' - $sqlite_package_name = 'python-pysqlite2' + $pymongo_package_name = 'python-pymongo' + $psycopg_package_name = 'python-psycopg2' + $sqlite_package_name = 'python-pysqlite2' # Operating system specific case $::operatingsystem { diff --git a/spec/classes/ceilometer_agent_notification_spec.rb b/spec/classes/ceilometer_agent_notification_spec.rb new file mode 100644 index 0000000..383080c --- /dev/null +++ b/spec/classes/ceilometer_agent_notification_spec.rb @@ -0,0 +1,85 @@ +# +# Copyright (C) 2014 eNovance SAS +# +# Author: Emilien Macchi +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Unit tests for ceilometer::agent::notification +# + +require 'spec_helper' + +describe 'ceilometer::agent::notification' do + + let :pre_condition do + "class { 'ceilometer': metering_secret => 's3cr3t' }" + end + + let :params do + { :ack_on_event_error => true, + :store_events => false } + end + + shared_examples_for 'ceilometer-agent-notification' do + + it { should contain_class('ceilometer::params') } + + it 'installs ceilometer agent notification package' do + should contain_package(platform_params[:agent_notification_package_name]) + end + + it 'configures ceilometer agent notification service' do + should contain_service('ceilometer-agent-notification').with( + :ensure => 'running', + :name => platform_params[:agent_notification_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true + ) + end + + it 'configures notifications parameters in ceilometer.conf' do + should contain_ceilometer_config('notification/ack_on_event_error').with_value( params[:ack_on_event_error] ) + should contain_ceilometer_config('notification/store_events').with_value( params[:store_events] ) + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + let :platform_params do + { :agent_notification_package_name => 'ceilometer-agent-notification', + :agent_notification_service_name => 'ceilometer-agent-notification' } + end + + it_configures 'ceilometer-agent-notification' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + let :platform_params do + { :agent_notification_package_name => 'openstack-ceilometer-collector', + :agent_notification_service_name => 'openstack-ceilometer-agent-notification' } + end + + it_configures 'ceilometer-agent-notification' + end + +end diff --git a/spec/classes/ceilometer_collector_spec.rb b/spec/classes/ceilometer_collector_spec.rb index c89227c..5bb8e20 100644 --- a/spec/classes/ceilometer_collector_spec.rb +++ b/spec/classes/ceilometer_collector_spec.rb @@ -11,10 +11,7 @@ describe 'ceilometer::collector' do it { should contain_class('ceilometer::params') } it 'installs ceilometer-collector package' do - should contain_package('ceilometer-collector').with( - :ensure => 'installed', - :name => platform_params[:collector_package_name] - ) + should contain_package(platform_params[:collector_package_name]) end it 'configures ceilometer-collector service' do -- 2.45.2