From 220d2e6b5986547d0205d146dd1abe7fc5e2b4bd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mathieu=20Gagne=CC=81?= Date: Mon, 8 Apr 2013 16:45:25 -0400 Subject: [PATCH] Fix Ubuntu support for ceilometer::agent::compute The libvirt group is libvirtd on Ubuntu and libvirt on Debian. --- .fixtures.yml | 1 + manifests/agent/compute.pp | 7 +- manifests/params.pp | 12 +- spec/classes/ceilometer_agent_compute_spec.rb | 121 ++++++++++++++++++ 4 files changed, 137 insertions(+), 4 deletions(-) create mode 100644 spec/classes/ceilometer_agent_compute_spec.rb diff --git a/.fixtures.yml b/.fixtures.yml index a116e6b..6e9ec08 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -2,6 +2,7 @@ fixtures: repositories: "stdlib": "git://github.com/puppetlabs/puppetlabs-stdlib.git" "keystone": "git://github.com/puppetlabs/puppetlabs-keystone.git" + "nova": "git://github.com/puppetlabs/puppetlabs-nova.git" "mysql": "git://github.com/puppetlabs/puppetlabs-mysql.git" "stdlib": "git://github.com/puppetlabs/puppetlabs-stdlib.git" "inifile": "git://github.com/cprice-puppet/puppetlabs-inifile" diff --git a/manifests/agent/compute.pp b/manifests/agent/compute.pp index df1b244..f031653 100644 --- a/manifests/agent/compute.pp +++ b/manifests/agent/compute.pp @@ -19,10 +19,13 @@ class ceilometer::agent::compute ( name => $::ceilometer::params::agent_compute_package_name, } - User['ceilometer'] { - groups +> ['libvirt'] + if $::ceilometer::params::libvirt_group { + User['ceilometer'] { + groups +> [$::ceilometer::params::libvirt_group] + } } + if $enabled { $service_ensure = 'running' } else { diff --git a/manifests/params.pp b/manifests/params.pp index 916774e..dfcdf8e 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -1,7 +1,7 @@ # class ceilometer::params { - $dbsync_command = "ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf" + $dbsync_command = 'ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf' $log_dir = '/var/log/ceilometer' case $::osfamily { @@ -18,7 +18,6 @@ class ceilometer::params { $agent_compute_service_name = 'openstack-ceilometer-compute' $api_service_name = 'openstack-ceilometer-api' $collector_service_name = 'openstack-ceilometer-collector' - } 'Debian': { # package names @@ -33,6 +32,15 @@ class ceilometer::params { $agent_compute_service_name = 'ceilometer-agent-compute' $api_service_name = 'ceilometer-api' $collector_service_name = 'ceilometer-collector' + # Operating system specific + case $::operatingsystem { + 'Ubuntu': { + $libvirt_group = 'libvirtd' + } + default: { + $libvirt_group = 'libvirt' + } + } } default: { fail("Unsupported osfamily: ${::osfamily} operatingsystem: ${::operatingsystem}, module ${module_name} only support osfamily RedHat and Debian") diff --git a/spec/classes/ceilometer_agent_compute_spec.rb b/spec/classes/ceilometer_agent_compute_spec.rb new file mode 100644 index 0000000..3ae3597 --- /dev/null +++ b/spec/classes/ceilometer_agent_compute_spec.rb @@ -0,0 +1,121 @@ +require 'spec_helper' + +describe 'ceilometer::agent::compute' do + + let :pre_condition do + "include nova\n" + + "include nova::compute\n" + + "class { 'ceilometer': metering_secret => 's3cr3t' }" + end + + let :params do + { :auth_url => 'http://localhost:5000/v2.0', + :auth_region => 'RegionOne', + :auth_user => 'ceilometer', + :auth_password => 'password', + :auth_tenant_name => 'services', + :enabled => true, + } + end + + shared_examples_for 'ceilometer-agent-compute' do + + it { should include_class('ceilometer::params') } + + it 'installs ceilometer-agent-compute package' do + should contain_package('ceilometer-agent-compute').with( + :ensure => 'installed', + :name => platform_params[:agent_package_name], + :before => 'Service[ceilometer-agent-compute]' + ) + end + + it 'adds ceilometer user to libvirt group if required' do + if platform_params[:libvirt_group] + should contain_user('ceilometer').with_groups(/#{platform_params[:libvirt_group]}/) + end + end + + it 'ensures ceilometer-common is installed before the service' do + should contain_package('ceilometer-common').with( + :before => /Service\[ceilometer-agent-compute\]/ + ) + end + + it 'configures ceilometer-agent-compute service' do + should contain_service('ceilometer-agent-compute').with( + :ensure => 'running', + :name => platform_params[:agent_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true + ) + end + + it 'configures authentication' do + should contain_ceilometer_config('DEFAULT/os_auth_url').with_value('http://localhost:5000/v2.0') + should contain_ceilometer_config('DEFAULT/os_auth_region').with_value('RegionOne') + should contain_ceilometer_config('DEFAULT/os_username').with_value('ceilometer') + should contain_ceilometer_config('DEFAULT/os_password').with_value('password') + should contain_ceilometer_config('DEFAULT/os_tenant_name').with_value('services') + end + + it 'configures instance usage audit in nova' do + should contain_nova_config('instance_usage_audit').with_value('True') + should contain_nova_config('instance_usage_audit_period').with_value('hour') + end + + it 'configures nova notification driver' do + should contain_file_line('nova-notification-driver-common').with( + :line => 'notification_driver=nova.openstack.common.notifier.rabbit_notifier', + :path => '/etc/nova/nova.conf' + ) + should contain_file_line('nova-notification-driver-ceilometer').with( + :line => 'notification_driver=ceilometer.compute.nova_notifier', + :path => '/etc/nova/nova.conf' + ) + end + end + + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + let :platform_params do + { :agent_package_name => 'ceilometer-agent-compute', + :agent_service_name => 'ceilometer-agent-compute' } + end + + context 'on Ubuntu operating systems' do + before do + facts.merge!( :operatingsystem => 'Ubuntu' ) + platform_params.merge!( :libvirt_group => 'libvirtd' ) + end + + it_configures 'ceilometer-agent-compute' + end + + context 'on other operating systems' do + before do + platform_params.merge!( :libvirt_group => 'libvirt' ) + end + + it_configures 'ceilometer-agent-compute' + end + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + let :platform_params do + { :agent_package_name => 'openstack-ceilometer-compute', + :agent_service_name => 'openstack-ceilometer-compute' } + end + + it_configures 'ceilometer-agent-compute' + end +end -- 2.45.2