]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Add support to customize polling meters
authorTobias Urdin <tobias@busybox.se>
Mon, 23 Jul 2018 20:21:21 +0000 (22:21 +0200)
committerTobias Urdin <tobias@busybox.se>
Thu, 26 Jul 2018 13:37:12 +0000 (15:37 +0200)
This adds a new parameter called polling_meters
to the ceilometer::agent::polling class.

If you pass a array of strings this parameter
will then populate the meters in the polling.yaml
file by inserting them in the templated polling file.

The default values that was hardcoded in the template
is still the same but has been moved to the params class
as an array of strings.

Change-Id: Iae2567b5a0f24b2aa80f9640ff10df96cd656922
(cherry picked from commit f236f531df8f342c475973620e3f3913399dc2c0)

manifests/agent/polling.pp
manifests/params.pp
releasenotes/notes/manage-polling-meters-e28386cd03c9d80d.yaml [new file with mode: 0644]
spec/classes/ceilometer_agent_polling_spec.rb
templates/polling.yaml.erb

index dd962b2db8246d72724c9050ba0eb558c00491fd..1344abfa544b71874e93c6ab8a1dac7454ff680a 100644 (file)
 #   (Optional) Number of seconds between polling cycle
 #   Defaults to 600 seconds, used only if manage_polling is true.
 #
+# [*polling_meters*]
+#   (Optional) Array of strings with meters to add to
+#   the polling.yaml file, used only if manage_polling is true.
+#   Defaults to $::ceilometer::params::polling_meters
+#
 class ceilometer::agent::polling (
   $manage_service            = true,
   $enabled                   = true,
@@ -59,6 +64,7 @@ class ceilometer::agent::polling (
   $instance_discovery_method = $::os_service_default,
   $manage_polling            = false,
   $polling_interval          = 600,
+  $polling_meters            = $::ceilometer::params::polling_meters,
 ) inherits ceilometer {
 
   include ::ceilometer::deps
index 459e1688a2fee04fd91b83fc37d9626e509d783a..e4abba8d2afb7942ef3fa30edb8bb016b443f913 100644 (file)
@@ -6,13 +6,40 @@
 class ceilometer::params {
   include ::openstacklib::defaults
 
-  $dbsync_command      = 'ceilometer-upgrade'
-  $expirer_command     = 'ceilometer-expirer'
-  $user                = 'ceilometer'
-  $event_pipeline      = '/etc/ceilometer/event_pipeline.yaml'
-  $pipeline            = '/etc/ceilometer/pipeline.yaml'
-  $polling             = '/etc/ceilometer/polling.yaml'
-  $group               = 'ceilometer'
+  $dbsync_command  = 'ceilometer-upgrade'
+  $expirer_command = 'ceilometer-expirer'
+  $user            = 'ceilometer'
+  $event_pipeline  = '/etc/ceilometer/event_pipeline.yaml'
+  $pipeline        = '/etc/ceilometer/pipeline.yaml'
+  $polling         = '/etc/ceilometer/polling.yaml'
+  $group           = 'ceilometer'
+  $polling_meters  = [
+    'cpu',
+    'cpu_l3_cache',
+    'memory.usage',
+    'network.incoming.bytes',
+    'network.incoming.packets',
+    'network.outgoing.bytes',
+    'network.outgoing.packets',
+    'disk.read.bytes',
+    'disk.read.requests',
+    'disk.write.bytes',
+    'disk.write.requests',
+    'volume.size',
+    'volume.snapshot.size',
+    'volume.backup.size',
+    'hardware.cpu.util',
+    'hardware.memory.used',
+    'hardware.memory.total',
+    'hardware.memory.buffer',
+    'hardware.memory.cached',
+    'hardware.memory.swap.avail',
+    'hardware.memory.swap.total',
+    'hardware.system_stats.io.outgoing.blocks',
+    'hardware.system_stats.io.incoming.blocks',
+    'hardware.network.ip.incoming.datagrams',
+    'hardware.network.ip.outgoing.datagrams',
+  ]
 
   case $::osfamily {
     'RedHat': {
diff --git a/releasenotes/notes/manage-polling-meters-e28386cd03c9d80d.yaml b/releasenotes/notes/manage-polling-meters-e28386cd03c9d80d.yaml
new file mode 100644 (file)
index 0000000..223e79a
--- /dev/null
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    New parameter ceilometer::agent::polling::polling_meters can now be used to
+    populate the list of pollers in the ceilometer polling.yaml file. The default
+    values in this file is still the same.
index 306c69ba813a1275800f6c4eb82c3fec182d4a89..4e2575540fbaa672c1d2b072118f618c1c359bb0 100644 (file)
@@ -3,142 +3,180 @@ require 'spec_helper'
 describe 'ceilometer::agent::polling' do
 
   let :pre_condition do
-    "include nova\n" +
-    "include nova::compute\n" +
-    "class { 'ceilometer': telemetry_secret => 's3cr3t' }"
+    "include nova
+    include nova::compute
+    class { 'ceilometer': telemetry_secret => 's3cr3t' }"
   end
 
   let :params do
-    { :enabled           => true,
-      :manage_service    => true,
-      :package_ensure    => 'latest',
-      :central_namespace => true,
-      :compute_namespace => true,
-      :ipmi_namespace    => true,
-      :coordination_url  => 'redis://localhost:6379',
-    }
+    {}
   end
 
-  shared_examples_for 'ceilometer-polling' do
+  shared_examples 'ceilometer::agent::polling' do
+    context 'with default params' do
+      it { should contain_class('ceilometer::deps') }
+      it { should contain_class('ceilometer::params') }
 
-    it { is_expected.to contain_class('ceilometer::deps') }
-    it { is_expected.to contain_class('ceilometer::params') }
-
-    context 'when compute_namespace => true' do
-      it 'adds ceilometer user to nova group and, if required, to libvirt group' do
+      it {
         if platform_params[:libvirt_group]
-          is_expected.to contain_user('ceilometer').with_groups(['nova', "#{platform_params[:libvirt_group]}"])
+          should contain_user('ceilometer').with_groups(['nova', "#{platform_params[:libvirt_group]}"])
         else
-          is_expected.to contain_user('ceilometer').with_groups(['nova'])
+          should contain_user('ceilometer').with_groups(['nova'])
         end
-      end
+      }
 
-      it 'ensures nova-common is installed before the package ceilometer-common' do
-          is_expected.to contain_package('nova-common').with(
-              :before => /Package\[ceilometer-common\]/
-          )
-      end
+      it { should contain_package('nova-common').with(
+       :before => /Package\[ceilometer-common\]/
+      )}
 
-      it 'configures agent compute' do
-        is_expected.to contain_ceilometer_config('compute/instance_discovery_method').with_value('<SERVICE DEFAULT>')
-      end
-    end
+      it { should contain_ceilometer_config('compute/instance_discovery_method').with_value('<SERVICE DEFAULT>') }
 
-    it 'installs ceilometer-polling package' do
-      is_expected.to contain_package('ceilometer-polling').with(
-        :ensure => 'latest',
+      it { should contain_package('ceilometer-polling').with(
+        :ensure => 'present',
         :name   => platform_params[:agent_package_name],
         :tag    => ['openstack', 'ceilometer-package'],
-      )
-    end
+      )}
 
-    it 'configures polling namespaces' do
-      is_expected.to contain_ceilometer_config('DEFAULT/polling_namespaces').with_value('central,compute,ipmi')
-    end
+      it { should contain_ceilometer_config('DEFAULT/polling_namespaces').with_value('central,compute,ipmi') }
 
-    [{:enabled => true}, {:enabled => false}].each do |param_hash|
-      context "when service should be #{param_hash[:enabled] ? 'enabled' : 'disabled'}" do
-        before do
-          params.merge!(param_hash)
-        end
+      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 'configures ceilometer-polling service' do
-          is_expected.to contain_service('ceilometer-polling').with(
-            :ensure     => (params[:manage_service] && params[:enabled]) ? 'running' : 'stopped',
-            :name       => platform_params[:agent_service_name],
-            :enable     => params[:enabled],
-            :hasstatus  => true,
-            :hasrestart => true,
-            :tag        => 'ceilometer-service',
-          )
-        end
-      end
+      it { should_not contain_ceilometer_config('coordination/backend_url') }
+      it { should_not contain_file('polling') }
     end
 
+    context 'when setting package_ensure' do
+      before do
+        params.merge!( :package_ensure => 'latest' )
+      end
+
+      it { should contain_package('ceilometer-polling').with(
+        :ensure => 'latest',
+      )}
+    end
 
     context 'when setting instance_discovery_method' do
       before do
-        params.merge!({ :instance_discovery_method   => 'naive' })
+        params.merge!( :instance_discovery_method => 'naive' )
       end
 
-      it 'configures agent compute instance discovery' do
-        is_expected.to contain_ceilometer_config('compute/instance_discovery_method').with_value('naive')
-      end
+      it { should contain_ceilometer_config('compute/instance_discovery_method').with_value('naive') }
     end
 
     context 'with central and ipmi polling namespaces disabled' do
       before do
-        params.merge!({
-          :central_namespace => false,
-          :ipmi_namespace    => false })
+        params.merge!( :central_namespace => false,
+                       :ipmi_namespace    => false )
       end
 
-      it 'configures compute polling namespace' do
-        is_expected.to contain_ceilometer_config('DEFAULT/polling_namespaces').with_value('compute')
-      end
+      it { should contain_ceilometer_config('DEFAULT/polling_namespaces').with_value('compute') }
     end
 
     context 'with disabled service managing' do
       before do
-        params.merge!({
-          :manage_service => false,
-          :enabled        => false })
+        params.merge!( :manage_service => false,
+                       :enabled        => false )
       end
 
-      it 'configures ceilometer-polling service' do
-        is_expected.to contain_service('ceilometer-polling').with(
-          :ensure     => nil,
-          :name       => platform_params[:agent_service_name],
-          :enable     => false,
-          :hasstatus  => true,
-          :hasrestart => true,
-          :tag        => 'ceilometer-service',
-        )
-      end
+      it { should contain_service('ceilometer-polling').with(
+        :ensure     => nil,
+        :name       => platform_params[:agent_service_name],
+        :enable     => false,
+        :hasstatus  => true,
+        :hasrestart => true,
+        :tag        => 'ceilometer-service',
+      )}
     end
 
-    context "with polling management enabled" do
-      before { params.merge!(
-        :manage_polling   => true
-      ) }
-
-      it { is_expected.to contain_file('polling').with(
-        'path' => '/etc/ceilometer/polling.yaml',
-      ) }
+    context 'with polling management enabled and default meters' do
+      before do
+        params.merge!( :manage_polling => true )
+     end
+
+      it { should contain_file('polling').with(
+        :ensure                  => 'present',
+        :path                    => '/etc/ceilometer/polling.yaml',
+        :content                 => '---
+sources:
+    - name: some_pollsters
+      interval: 600
+      meters:
+        - cpu
+        - cpu_l3_cache
+        - memory.usage
+        - network.incoming.bytes
+        - network.incoming.packets
+        - network.outgoing.bytes
+        - network.outgoing.packets
+        - disk.read.bytes
+        - disk.read.requests
+        - disk.write.bytes
+        - disk.write.requests
+        - volume.size
+        - volume.snapshot.size
+        - volume.backup.size
+        - hardware.cpu.util
+        - hardware.memory.used
+        - hardware.memory.total
+        - hardware.memory.buffer
+        - hardware.memory.cached
+        - hardware.memory.swap.avail
+        - hardware.memory.swap.total
+        - hardware.system_stats.io.outgoing.blocks
+        - hardware.system_stats.io.incoming.blocks
+        - hardware.network.ip.incoming.datagrams
+        - hardware.network.ip.outgoing.datagrams
+',
+        :selinux_ignore_defaults => true,
+        :tag                     => 'ceilometer-yamls',
+      )}
     end
 
-    context "with polling management disabled" do
-      before { params.merge!(
-        :manage_polling   => false
-      ) }
+    context 'with polling and custom config' do
+      before do
+        params.merge!( :manage_polling   => true,
+                       :polling_interval => 30,
+                       :polling_meters   => ['meter1', 'meter2'] )
+      end
 
-      it { is_expected.not_to contain_file('polling') }
+      it { should contain_file('polling').with(
+        :ensure  => 'present',
+        :path    => '/etc/ceilometer/polling.yaml',
+        :content                 => '---
+sources:
+    - name: some_pollsters
+      interval: 30
+      meters:
+        - meter1
+        - meter2
+',
+        :selinux_ignore_defaults => true,
+        :tag                     => 'ceilometer-yamls',
+      )}
     end
 
-    it 'configures central agent' do
-      is_expected.to contain_ceilometer_config('coordination/backend_url').with_value( params[:coordination_url] )
+    context 'with polling management disabled' do
+      before do
+        params.merge!( :manage_polling => false )
+      end
+
+      it { should_not contain_file('polling') }
     end
 
+    context 'when setting coordination_url' do
+      before do
+        params.merge!( :coordination_url => 'redis://localhost:6379' )
+      end
+
+      it { should contain_ceilometer_config('coordination/backend_url').with_value('redis://localhost:6379') }
+    end
   end
 
   on_supported_os({
@@ -152,16 +190,20 @@ describe 'ceilometer::agent::polling' do
       let :platform_params do
         case facts[:osfamily]
         when 'Debian'
-            { :agent_package_name => 'ceilometer-polling',
+            {
+              :agent_package_name => 'ceilometer-polling',
               :agent_service_name => 'ceilometer-polling',
-              :libvirt_group      => 'libvirt' }
+              :libvirt_group      => 'libvirt'
+            }
         when 'RedHat'
-            { :agent_package_name => 'openstack-ceilometer-polling',
-              :agent_service_name => 'openstack-ceilometer-polling' }
+            {
+              :agent_package_name => 'openstack-ceilometer-polling',
+              :agent_service_name => 'openstack-ceilometer-polling'
+            }
         end
       end
 
-      it_behaves_like 'ceilometer-polling'
+      it_behaves_like 'ceilometer::agent::polling'
     end
   end
 
index 0a648d5913b79b8614a02196d8bbe72d77ad010f..0b62d8ecb47cdf60f0c9d010c7d0fb080e64c3c5 100644 (file)
@@ -3,28 +3,6 @@ sources:
     - name: some_pollsters
       interval: <%= @polling_interval %>
       meters:
-        - cpu
-        - cpu_l3_cache
-        - memory.usage
-        - network.incoming.bytes
-        - network.incoming.packets
-        - network.outgoing.bytes
-        - network.outgoing.packets
-        - disk.read.bytes
-        - disk.read.requests
-        - disk.write.bytes
-        - disk.write.requests
-        - volume.size
-        - volume.snapshot.size
-        - volume.backup.size
-        - hardware.cpu.util
-        - hardware.memory.used
-        - hardware.memory.total
-        - hardware.memory.buffer
-        - hardware.memory.cached
-        - hardware.memory.swap.avail
-        - hardware.memory.swap.total
-        - hardware.system_stats.io.outgoing.blocks
-        - hardware.system_stats.io.incoming.blocks
-        - hardware.network.ip.incoming.datagrams
-        - hardware.network.ip.outgoing.datagrams
+<% @polling_meters.each do |meter| -%>
+        - <%= meter %>
+<% end -%>