]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Implement Gnocchi dispatcher
authorEmilien Macchi <emilien@redhat.com>
Fri, 27 Nov 2015 11:11:01 +0000 (12:11 +0100)
committerEmilien Macchi <emilien@redhat.com>
Tue, 1 Dec 2015 21:49:54 +0000 (16:49 -0500)
* Add dispatcher options to ceilometer::collector.
* Create ceilometer::dispatcher::gnocchi class, with current upstream options.
* Add an example of manifest.
* Unit & functional tests.

Note:
This patch implement os_service_defaults only for the new class.
For collector, it will be updated in one patch in another patchset.

Change-Id: Id9364e1e1337708b1e0254b4c6268f1a0b1a42ad
(cherry picked from commit f47c52f26dadc767728ebc8cba5cdfe251d94c2d)

examples/ceilometer_with_gnocchi.pp [new file with mode: 0644]
manifests/collector.pp
manifests/dispatcher/gnocchi.pp [new file with mode: 0644]
spec/acceptance/ceilometer_with_mysql_spec.rb
spec/acceptance/ceilometer_wsgi_apache_spec.rb
spec/classes/ceilometer_collector_spec.rb
spec/classes/ceilometer_dispatcher_gnocchi_spec.rb [new file with mode: 0644]

diff --git a/examples/ceilometer_with_gnocchi.pp b/examples/ceilometer_with_gnocchi.pp
new file mode 100644 (file)
index 0000000..c5a9533
--- /dev/null
@@ -0,0 +1,34 @@
+class { '::ceilometer':
+  metering_secret => 'secrete',
+  rabbit_userid   => 'ceilometer',
+  rabbit_password => 'an_even_bigger_secret',
+  rabbit_host     => '127.0.0.1',
+}
+class { '::ceilometer::db::mysql':
+  password => 'a_big_secret',
+}
+class { '::ceilometer::db':
+  database_connection => 'mysql://ceilometer:a_big_secret@127.0.0.1/ceilometer?charset=utf8',
+}
+class { '::ceilometer::keystone::auth':
+  password => 'a_big_secret',
+}
+class { '::ceilometer::client': }
+class { '::ceilometer::expirer': }
+class { '::ceilometer::agent::central': }
+class { '::ceilometer::agent::notification': }
+class { '::ceilometer::api':
+  enabled               => true,
+  keystone_password     => 'a_big_secret',
+  keystone_identity_uri => 'http://127.0.0.1:35357/',
+  service_name          => 'httpd',
+}
+include ::apache
+class { '::ceilometer::wsgi::apache':
+  ssl => false,
+}
+
+class { '::ceilometer::collector':
+  meter_dispatcher => ['gnocchi'],
+}
+class { '::ceilometer::dispatcher::gnocchi': }
index 8e22a93eba0908d7a93d6909e30d93ebd2efb971..bcddc7e46e106d2fa70ddfc99f1784194a2fb324 100644 (file)
 #    (optional) the ceilometer collector udp bind port.
 #    Defaults to '4952'
 #
+#  [*meter_dispatcher*]
+#    (optional) dispatcher driver(s) to process meter data.
+#    Can be an array or a string.
+#    Defaults to 'database'
+#
+#  [*event_dispatcher*]
+#    (optional) dispatcher driver(s) to process event data.
+#    Can be an array or a string.
+#    Defaults to 'database'
+#
 class ceilometer::collector (
-  $manage_service = true,
-  $enabled        = true,
-  $package_ensure = 'present',
-  $udp_address    = '0.0.0.0',
-  $udp_port       = '4952',
+  $manage_service   = true,
+  $enabled          = true,
+  $package_ensure   = 'present',
+  $udp_address      = '0.0.0.0',
+  $udp_port         = '4952',
+  $meter_dispatcher = 'database',
+  $event_dispatcher = 'database',
 ) {
 
   include ::ceilometer::params
@@ -41,8 +53,10 @@ class ceilometer::collector (
   }
 
   ceilometer_config {
-    'collector/udp_address' : value => $udp_address;
-    'collector/udp_port'    : value => $udp_port;
+    'collector/udp_address':    value => $udp_address;
+    'collector/udp_port':       value => $udp_port;
+    'DEFAULT/meter_dispatcher': value => join(any2array($meter_dispatcher), ',');
+    'DEFAULT/event_dispatcher': value => join(any2array($event_dispatcher), ',');
   }
 
   Package[$::ceilometer::params::collector_package_name] -> Service['ceilometer-collector']
diff --git a/manifests/dispatcher/gnocchi.pp b/manifests/dispatcher/gnocchi.pp
new file mode 100644 (file)
index 0000000..4d348e8
--- /dev/null
@@ -0,0 +1,43 @@
+# Configure Gnocchi dispatcher for Ceilometer
+#
+# == Params
+#
+#  [*filter_service_activity*]
+#    (optional) Filter out samples generated by Gnocchi service activity.
+#    Defaults to undef.
+#
+#  [*filter_project*]
+#    (optional) Gnocchi project used to filter out samples
+#    generated by Gnocchi service activity
+#    Defaults to undef.
+#
+#  [*url*]
+#    (optional) Gnocchi URL
+#    Defaults to undef.
+#
+#  [*archive_policy*]
+#    (optional) The archive policy to use when the dispatcher
+#    Defaults to undef.
+#
+#  [*resources_definition_file*]
+#    (optional) The Yaml file that defines mapping between samples
+#    and gnocchi resources/metrics.
+#    Defaults to undef.
+#
+class ceilometer::dispatcher::gnocchi (
+  $filter_service_activity   = undef,
+  $filter_project            = undef,
+  $url                       = undef,
+  $archive_policy            = undef,
+  $resources_definition_file = undef,
+) {
+
+  ceilometer_config {
+    'dispatcher_gnocchi/filter_service_activity':   value => $filter_service_activity;
+    'dispatcher_gnocchi/filter_project':            value => $filter_project;
+    'dispatcher_gnocchi/url':                       value => $url;
+    'dispatcher_gnocchi/archive_policy':            value => $archive_policy;
+    'dispatcher_gnocchi/resources_definition_file': value => $resources_definition_file;
+  }
+
+}
index 5ef941cf39c5c972aeaa3a37ffd77c881274ab9f..27ce79745a63e0d8d3752eb03b1c46a5bd555c97 100644 (file)
@@ -83,6 +83,7 @@ describe 'ceilometer with mysql' do
         keystone_password     => 'a_big_secret',
         keystone_identity_uri => 'http://127.0.0.1:35357/',
       }
+      class { '::ceilometer::dispatcher::gnocchi': }
       EOS
 
 
index 998fb914a847cc47cd82070ce6bc2a611d4a395d..16e000ac0d14dac68272b638715e240778000533 100644 (file)
@@ -60,6 +60,7 @@ describe 'ceilometer with mysql' do
       class { '::ceilometer::wsgi::apache':
         ssl => false,
       }
+      class { '::ceilometer::dispatcher::gnocchi': }
       EOS
 
 
index 00c83d4ffc6fba5d850fcac2ccf30a0f9139595b..b3bbfff802734c77e8f7c7ffd73e61d8751b6fb4 100644 (file)
@@ -53,6 +53,8 @@ describe 'ceilometer::collector' do
       it 'configures ceilometer-collector server' do
         is_expected.to contain_ceilometer_config('collector/udp_address').with_value( '0.0.0.0' )
         is_expected.to contain_ceilometer_config('collector/udp_port').with_value( '4952' )
+        is_expected.to contain_ceilometer_config('DEFAULT/meter_dispatcher').with_value( 'database' )
+        is_expected.to contain_ceilometer_config('DEFAULT/event_dispatcher').with_value( 'database' )
       end
 
       it 'installs ceilometer-collector package' do
diff --git a/spec/classes/ceilometer_dispatcher_gnocchi_spec.rb b/spec/classes/ceilometer_dispatcher_gnocchi_spec.rb
new file mode 100644 (file)
index 0000000..24c158c
--- /dev/null
@@ -0,0 +1,54 @@
+require 'spec_helper'
+
+describe 'ceilometer::dispatcher::gnocchi' do
+
+  let :pre_condition do
+    "class { 'ceilometer': metering_secret => 's3cr3t' }"
+  end
+
+  let :params do
+    {}
+  end
+
+  shared_examples_for 'ceilometer-gnocchi-dispatcher' do
+    it 'configures gnocchi dispatcher' do
+      is_expected.to contain_ceilometer_config('dispatcher_gnocchi/filter_service_activity').with_value(nil)
+      is_expected.to contain_ceilometer_config('dispatcher_gnocchi/filter_project').with_value(nil)
+      is_expected.to contain_ceilometer_config('dispatcher_gnocchi/url').with_value(nil)
+      is_expected.to contain_ceilometer_config('dispatcher_gnocchi/archive_policy').with_value(nil)
+      is_expected.to contain_ceilometer_config('dispatcher_gnocchi/resources_definition_file').with_value(nil)
+    end
+
+    context 'when overriding parameters' do
+      before do
+        params.merge!(:filter_service_activity   => false,
+                      :filter_project            => true,
+                      :url                       => 'http://foo',
+                      :archive_policy            => 'high',
+                      :resources_definition_file => 'foo')
+      end
+      it { is_expected.to contain_ceilometer_config('dispatcher_gnocchi/filter_service_activity').with_value('false') }
+      it { is_expected.to contain_ceilometer_config('dispatcher_gnocchi/filter_project').with_value('true') }
+      it { is_expected.to contain_ceilometer_config('dispatcher_gnocchi/url').with_value('http://foo') }
+      it { is_expected.to contain_ceilometer_config('dispatcher_gnocchi/archive_policy').with_value('high') }
+      it { is_expected.to contain_ceilometer_config('dispatcher_gnocchi/resources_definition_file').with_value('foo') }
+    end
+  end
+
+  context 'on Debian platforms' do
+    let :facts do
+      { :osfamily => 'Debian' }
+    end
+
+    it_configures 'ceilometer-gnocchi-dispatcher'
+  end
+
+  context 'on RedHat platforms' do
+    let :facts do
+      { :osfamily => 'RedHat' }
+    end
+
+    it_configures 'ceilometer-gnocchi-dispatcher'
+  end
+
+end