]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Support separate polling agents
authorTakashi Kajinami <tkajinam@redhat.com>
Fri, 9 Sep 2022 09:05:15 +0000 (18:05 +0900)
committerTakashi Kajinami <tkajinam@redhat.com>
Wed, 15 Feb 2023 08:21:23 +0000 (17:21 +0900)
This change introduces capability to use separate polling agents
(central, compute and ipmi) instead of the single polling service.

Change-Id: Idaa46ad71f4bedaca91b75a732649de967663659

manifests/agent/polling.pp
manifests/params.pp
releasenotes/notes/separate-agents-be9220cfe6cf473c.yaml [new file with mode: 0644]
spec/classes/ceilometer_agent_polling_spec.rb

index 8305c95bdf315b1458149da98412b5cb5c693dc1..631979b24c9ded82821ad6fc0bef1a2d070fbf0d 100644 (file)
 #   (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',
+      }
     }
   }
 
index 600c24cbb1d679dcb89845c22cb2fa0c59aca3db..48e1b88aaed4dc081b6834206fdb45780321f960 100644 (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'
     }
diff --git a/releasenotes/notes/separate-agents-be9220cfe6cf473c.yaml b/releasenotes/notes/separate-agents-be9220cfe6cf473c.yaml
new file mode 100644 (file)
index 0000000..17d4fdc
--- /dev/null
@@ -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.
index e1c5fc13ccbadf0744aaf9eef70a88441daf2061..80a285cb35f27c1620b4a7d54da1e6c14f72c623 100644 (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