From: Takashi Kajinami Date: Fri, 9 Sep 2022 09:05:15 +0000 (+0900) Subject: Support separate polling agents X-Git-Tag: 22.0.0~4 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=5699fe241898b6bf81de74f3c2e63ff3b5334200;p=puppet-modules%2Fpuppet-ceilometer.git Support separate polling agents This change introduces capability to use separate polling agents (central, compute and ipmi) instead of the single polling service. Change-Id: Idaa46ad71f4bedaca91b75a732649de967663659 --- diff --git a/manifests/agent/polling.pp b/manifests/agent/polling.pp index 8305c95..631979b 100644 --- a/manifests/agent/polling.pp +++ b/manifests/agent/polling.pp @@ -12,6 +12,10 @@ # (Optional) Whether the service should be managed by Puppet. # Defaults to true. # +# [*separate_services*] +# (Optional) Use separate services for individual namespace. +# Defaults to false. +# # [*package_ensure*] # (Optional) ensure state for package. # Defaults to 'present' @@ -80,6 +84,7 @@ class ceilometer::agent::polling ( $manage_service = true, $enabled = true, + $separate_services = false, $package_ensure = 'present', $manage_user = true, $central_namespace = true, @@ -161,10 +166,37 @@ class ceilometer::agent::polling ( $ipmi_namespace_name = undef } - package { 'ceilometer-polling': - ensure => $package_ensure, - name => $::ceilometer::params::agent_polling_package_name, - tag => ['openstack', 'ceilometer-package'], + if $separate_services { + if $central_namespace { + package { 'ceilometer-central': + ensure => $package_ensure, + name => $::ceilometer::params::agent_central_package_name, + tag => ['openstack', 'ceilometer-package'], + } + } + + if $compute_namespace { + package { 'ceilometer-compute': + ensure => $package_ensure, + name => $::ceilometer::params::agent_compute_package_name, + tag => ['openstack', 'ceilometer-package'], + } + } + + if $ipmi_namespace { + package { 'ceilometer-ipmi': + ensure => $package_ensure, + name => $::ceilometer::params::agent_ipmi_package_name, + tag => ['openstack', 'ceilometer-package'], + } + } + + } else { + package { 'ceilometer-polling': + ensure => $package_ensure, + name => $::ceilometer::params::agent_polling_package_name, + tag => ['openstack', 'ceilometer-package'], + } } $namespaces_real = delete_undef_values([ @@ -173,7 +205,7 @@ class ceilometer::agent::polling ( $ipmi_namespace_name ]) - if empty($namespaces_real) { + if empty($namespaces_real) or $separate_services { ceilometer_config { 'DEFAULT/polling_namespaces': ensure => absent } @@ -194,13 +226,46 @@ class ceilometer::agent::polling ( $service_ensure = 'stopped' } - service { 'ceilometer-polling': - ensure => $service_ensure, - name => $::ceilometer::params::agent_polling_service_name, - enable => $enabled, - hasstatus => true, - hasrestart => true, - tag => 'ceilometer-service', + if $separate_services { + if $central_namespace { + service { 'ceilometer-central': + ensure => $service_ensure, + name => $::ceilometer::params::agent_central_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => 'ceilometer-service', + } + } + if $compute_namespace { + service { 'ceilometer-compute': + ensure => $service_ensure, + name => $::ceilometer::params::agent_compute_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => 'ceilometer-service', + } + } + if $ipmi_namespace { + service { 'ceilometer-ipmi': + ensure => $service_ensure, + name => $::ceilometer::params::agent_ipmi_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => 'ceilometer-service', + } + } + } else { + service { 'ceilometer-polling': + ensure => $service_ensure, + name => $::ceilometer::params::agent_polling_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => 'ceilometer-service', + } } } diff --git a/manifests/params.pp b/manifests/params.pp index 600c24c..48e1b88 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -54,20 +54,32 @@ class ceilometer::params { 'RedHat': { # package names $agent_polling_package_name = 'openstack-ceilometer-polling' + $agent_central_package_name = 'openstack-ceilometer-central' + $agent_compute_package_name = 'openstack-ceilometer-compute' + $agent_ipmi_package_name = 'openstack-ceilometer-ipmi' $agent_notification_package_name = 'openstack-ceilometer-notification' $common_package_name = 'openstack-ceilometer-common' # service names $agent_polling_service_name = 'openstack-ceilometer-polling' + $agent_central_service_name = 'openstack-ceilometer-central' + $agent_compute_service_name = 'openstack-ceilometer-compute' + $agent_ipmi_service_name = 'openstack-ceilometer-ipmi' $agent_notification_service_name = 'openstack-ceilometer-notification' $libvirt_group = undef } 'Debian': { # package names $agent_polling_package_name = 'ceilometer-polling' + $agent_central_package_name = 'ceilometer-agent-central' + $agent_compute_package_name = 'ceilometer-agent-compute' + $agent_ipmi_package_name = 'ceilometer-agent-ipmi' $agent_notification_package_name = 'ceilometer-agent-notification' $common_package_name = 'ceilometer-common' # service names $agent_polling_service_name = 'ceilometer-polling' + $agent_central_service_name = 'ceilometer-agent-central' + $agent_compute_service_name = 'ceilometer-agent-compute' + $agent_ipmi_service_name = 'ceilometer-agent-ipmi' $agent_notification_service_name = 'ceilometer-agent-notification' $libvirt_group = 'libvirt' } diff --git a/releasenotes/notes/separate-agents-be9220cfe6cf473c.yaml b/releasenotes/notes/separate-agents-be9220cfe6cf473c.yaml new file mode 100644 index 0000000..17d4fdc --- /dev/null +++ b/releasenotes/notes/separate-agents-be9220cfe6cf473c.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The ``ceilometer::agents::polling::separate_services`` parameter has been + added. When this parameter is set to `true`, the class configures separate + agent services for individual namespaces, instead of the single polling + agent service. diff --git a/spec/classes/ceilometer_agent_polling_spec.rb b/spec/classes/ceilometer_agent_polling_spec.rb index e1c5fc1..80a285c 100644 --- a/spec/classes/ceilometer_agent_polling_spec.rb +++ b/spec/classes/ceilometer_agent_polling_spec.rb @@ -44,22 +44,32 @@ describe 'ceilometer::agent::polling' do should contain_ceilometer_config('compute/resource_cache_expiry').with_value('') } - it { should contain_package('ceilometer-polling').with( - :ensure => 'present', - :name => platform_params[:agent_package_name], - :tag => ['openstack', 'ceilometer-package'], - )} + it 'shoud install the polling package' do + should contain_package('ceilometer-polling').with( + :ensure => 'present', + :name => platform_params[:agent_polling_package_name], + :tag => ['openstack', 'ceilometer-package'], + ) + should_not contain_package('ceilometer-central') + should_not contain_package('ceilometer-compute') + should_not contain_package('ceilometer-ipmi') + end it { should contain_ceilometer_config('DEFAULT/polling_namespaces').with_value('central,compute,ipmi') } - it { should contain_service('ceilometer-polling').with( - :ensure => 'running', - :name => platform_params[:agent_service_name], - :enable => true, - :hasstatus => true, - :hasrestart => true, - :tag => 'ceilometer-service', - )} + it 'should enable the polling service' do + should contain_service('ceilometer-polling').with( + :ensure => 'running', + :name => platform_params[:agent_polling_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true, + :tag => 'ceilometer-service', + ) + should_not contain_service('ceilometer-central') + should_not contain_service('ceilometer-compute') + should_not contain_service('ceilometer-ipmi') + end it { should contain_ceilometer_config('polling/batch_size').with_value('') } it { should_not contain_file('polling') } @@ -161,7 +171,7 @@ describe 'ceilometer::agent::polling' do it { should contain_service('ceilometer-polling').with( :ensure => 'stopped', - :name => platform_params[:agent_service_name], + :name => platform_params[:agent_polling_service_name], :enable => false, :hasstatus => true, :hasrestart => true, @@ -295,6 +305,61 @@ sources: it { should contain_ceilometer_config('polling/batch_size').with_value(50) } end + + context 'with separate agents' do + before do + params.merge!( :separate_services => true ) + end + + it 'should install the agent packages' do + should_not contain_package('ceilometer-polling') + should contain_package('ceilometer-central').with( + :ensure => 'present', + :name => platform_params[:agent_central_package_name], + :tag => ['openstack', 'ceilometer-package'], + ) + should contain_package('ceilometer-compute').with( + :ensure => 'present', + :name => platform_params[:agent_compute_package_name], + :tag => ['openstack', 'ceilometer-package'], + ) + should contain_package('ceilometer-ipmi').with( + :ensure => 'present', + :name => platform_params[:agent_ipmi_package_name], + :tag => ['openstack', 'ceilometer-package'], + ) + end + + it { should contain_ceilometer_config('DEFAULT/polling_namespaces').with_ensure('absent') } + + it 'should enable the agent services' do + should_not contain_service('ceilometer-polling') + should contain_service('ceilometer-central').with( + :ensure => 'running', + :name => platform_params[:agent_central_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true, + :tag => 'ceilometer-service', + ) + should contain_service('ceilometer-compute').with( + :ensure => 'running', + :name => platform_params[:agent_compute_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true, + :tag => 'ceilometer-service', + ) + should contain_service('ceilometer-ipmi').with( + :ensure => 'running', + :name => platform_params[:agent_ipmi_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true, + :tag => 'ceilometer-service', + ) + end + end end on_supported_os({ @@ -309,16 +374,28 @@ sources: case facts[:osfamily] when 'Debian' { - :agent_package_name => 'ceilometer-polling', - :agent_service_name => 'ceilometer-polling', - :libvirt_group => 'libvirt', - :ceilometer_groups => ['nova', 'libvirt'], + :agent_polling_package_name => 'ceilometer-polling', + :agent_polling_service_name => 'ceilometer-polling', + :agent_central_package_name => 'ceilometer-agent-central', + :agent_central_service_name => 'ceilometer-agent-central', + :agent_compute_package_name => 'ceilometer-agent-compute', + :agent_compute_service_name => 'ceilometer-agent-compute', + :agent_ipmi_package_name => 'ceilometer-agent-ipmi', + :agent_ipmi_service_name => 'ceilometer-agent-ipmi', + :libvirt_group => 'libvirt', + :ceilometer_groups => ['nova', 'libvirt'], } when 'RedHat' { - :agent_package_name => 'openstack-ceilometer-polling', - :agent_service_name => 'openstack-ceilometer-polling', - :ceilometer_groups => ['nova'], + :agent_polling_package_name => 'openstack-ceilometer-polling', + :agent_polling_service_name => 'openstack-ceilometer-polling', + :agent_central_package_name => 'openstack-ceilometer-central', + :agent_central_service_name => 'openstack-ceilometer-central', + :agent_compute_package_name => 'openstack-ceilometer-compute', + :agent_compute_service_name => 'openstack-ceilometer-compute', + :agent_ipmi_package_name => 'openstack-ceilometer-ipmi', + :agent_ipmi_service_name => 'openstack-ceilometer-ipmi', + :ceilometer_groups => ['nova'], } end end