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
This commit is contained in:
Takashi Kajinami
2022-09-09 18:05:15 +09:00
parent fa2b78f2ea
commit 5699fe2418
4 changed files with 194 additions and 33 deletions

View File

@@ -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',
}
}
}

View File

@@ -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'
}

View File

@@ -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.

View File

@@ -44,22 +44,32 @@ describe 'ceilometer::agent::polling' do
should contain_ceilometer_config('compute/resource_cache_expiry').with_value('<SERVICE DEFAULT>')
}
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('<SERVICE DEFAULT>') }
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