]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Added support for messaging urls
authorMatthew J Black <mjblack@gmail.com>
Fri, 29 Apr 2016 03:36:30 +0000 (23:36 -0400)
committerMatthew J Black <matthew_black@cable.comcast.com>
Wed, 18 May 2016 23:26:20 +0000 (23:26 +0000)
Ceilometer supports multiple notifications. The config
entry in ceilometer.conf allows for a multi-value for
notification/messaging_urls.

Change-Id: Ic1791c7021bf2dbb06269317b8495eebc8d6e7ed
Closes-Bug: 1564061
(cherry picked from commit fd4485d64ea9a0648620756bf871e1ceee79ede0)

lib/puppet/provider/ceilometer_config/ini_setting.rb [deleted file]
lib/puppet/provider/ceilometer_config/openstackconfig.rb [new file with mode: 0644]
lib/puppet/type/ceilometer_config.rb
manifests/agent/notification.pp
manifests/config.pp
releasenotes/notes/added_messaging_urls-fbf1309bf1bfafa4.yaml [new file with mode: 0644]
releasenotes/notes/ceilometer_notifications_messaging_urls-62b27d617a49c609.yaml [new file with mode: 0644]
spec/classes/ceilometer_agent_notification_spec.rb
spec/unit/provider/ceilometer_config/openstackconfig_spec.rb [moved from spec/unit/provider/ceilometer_config/ini_setting_spec.rb with 98% similarity]
spec/unit/type/ceilometer_config_spec.rb

diff --git a/lib/puppet/provider/ceilometer_config/ini_setting.rb b/lib/puppet/provider/ceilometer_config/ini_setting.rb
deleted file mode 100644 (file)
index db180a1..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-Puppet::Type.type(:ceilometer_config).provide(
-  :ini_setting,
-  :parent => Puppet::Type.type(:openstack_config).provider(:ini_setting)
-) do
-
-  def self.file_path
-    '/etc/ceilometer/ceilometer.conf'
-  end
-
-end
diff --git a/lib/puppet/provider/ceilometer_config/openstackconfig.rb b/lib/puppet/provider/ceilometer_config/openstackconfig.rb
new file mode 100644 (file)
index 0000000..bce4c3b
--- /dev/null
@@ -0,0 +1,13 @@
+Puppet::Type.type(:ceilometer_config).provide(
+  :openstackconfig,
+  :parent => Puppet::Type.type(:openstack_config).provider(:ruby)
+) do
+
+  def self.file_path
+    '/etc/ceilometer/ceilometer.conf'
+  end
+
+  def file_path
+    self.class.file_path
+  end
+end
index 88607734b508bd48638d35e2cdad25dbc4b43d5a..404551ce2a0bb6123cbca06348c16902aee265c0 100644 (file)
@@ -7,8 +7,20 @@ Puppet::Type.newtype(:ceilometer_config) do
     newvalues(/\S+\/\S+/)
   end
 
-  newproperty(:value) do
+  newproperty(:value, :array_matching => :all) do
     desc 'The value of the setting to be defined.'
+    def insync?(is)
+      puts is
+      return true if @should.empty?
+      return false unless is.is_a? Array
+      return false unless is.length == @should.length
+      # we don't care about the order of items in array, hence
+      # it is necessary to override insync
+      return (
+        is & @should == is or
+        is & @should.map(&:to_s) == is
+      )
+    end
     munge do |value|
       value = value.to_s.strip
       value.capitalize! if value =~ /^(true|false)$/i
index d4c70e869f1e6afc321483154ff2fd7a7368527c..3b896cc514be0fc5a3713078f5d197028ff37c98 100644 (file)
 #   (Optional) Number of workers for notification service (integer value).
 #   Defaults to $::os_service_default.
 #
+# [*messaging_urls*]
+#   (Optional) Messaging urls to listen for notifications. (Array of urls)
+#   The format should be transport://user:pass@host1:port[,hostN:portN]/virtual_host
+#   Defaults to $::os_service_default.
+#
 # [*package_ensure*]
 #   (Optional) ensure state for package.
 #   Defaults to 'present'.
@@ -59,6 +64,7 @@ class ceilometer::agent::notification (
   $store_events              = false,
   $disable_non_metric_meters = $::os_service_default,
   $notification_workers      = $::os_service_default,
+  $messaging_urls            = $::os_service_default,
   $package_ensure            = 'present',
 ) {
 
@@ -99,6 +105,6 @@ class ceilometer::agent::notification (
     'notification/store_events'             : value => $store_events;
     'notification/disable_non_metric_meters': value => $disable_non_metric_meters;
     'notification/workers'                  : value => $notification_workers;
+    'notification/messaging_urls'           : value => $messaging_urls;
   }
-
 }
index 9c46bcdfdb889bcbef0a2ae1eaae985383ea6646..255dab2084898c21a4f73a51a86d30250e2552e3 100644 (file)
@@ -26,8 +26,8 @@
 #   or Puppet catalog compilation will fail with duplicate resources.
 #
 class ceilometer::config (
-  $ceilometer_config        = {},
-  $ceilometer_api_paste_ini = {},
+  $ceilometer_config           = {},
+  $ceilometer_api_paste_ini    = {},
 ) {
 
   validate_hash($ceilometer_config)
diff --git a/releasenotes/notes/added_messaging_urls-fbf1309bf1bfafa4.yaml b/releasenotes/notes/added_messaging_urls-fbf1309bf1bfafa4.yaml
new file mode 100644 (file)
index 0000000..0234226
--- /dev/null
@@ -0,0 +1,4 @@
+---
+features:
+  - Added messaging_urls parameter to ceilometer agents notification. 
+    The parameter accepts an array.
diff --git a/releasenotes/notes/ceilometer_notifications_messaging_urls-62b27d617a49c609.yaml b/releasenotes/notes/ceilometer_notifications_messaging_urls-62b27d617a49c609.yaml
new file mode 100644 (file)
index 0000000..736637a
--- /dev/null
@@ -0,0 +1,6 @@
+---
+features:
+  - Switched ceilometer_config from ini_setting type to openstack_config type.
+  - Added the ability to pass in messaging_urls into notifications agent. This
+    will allow a user to configure ceilometer to talk to different virtualhosts
+    or entirely different messaging queues.
index 40a031aef0e3354f399a43f54ac4dcddb282386f..5e24bdf8c127fc2eb85a1766e6a70f52662459f0 100644 (file)
@@ -98,6 +98,19 @@ describe 'ceilometer::agent::notification' do
       end
     end
 
+    context 'with multiple messaging urls' do
+      before do
+        params.merge!({
+          :messaging_urls => ['rabbit://rabbit_user:password@localhost/nova',
+                              'rabbit://rabbit_user:password@localhost/neutron'] })
+      end
+
+      it 'configures two messaging urls' do
+        is_expected.to contain_ceilometer_config('notification/messaging_urls').with_value(
+          ['rabbit://rabbit_user:password@localhost/nova', 'rabbit://rabbit_user:password@localhost/neutron']
+        )
+      end
+    end
   end
 
   context 'on Debian platforms' do
similarity index 98%
rename from spec/unit/provider/ceilometer_config/ini_setting_spec.rb
rename to spec/unit/provider/ceilometer_config/openstackconfig_spec.rb
index e69a3a919ec7ea7c65b558a99a6e88ecc9714199..dd5e5d49883221ae356158f8de55869711dd6f29 100644 (file)
@@ -23,7 +23,7 @@ $LOAD_PATH.push(
 
 require 'spec_helper'
 
-provider_class = Puppet::Type.type(:ceilometer_config).provider(:ini_setting)
+provider_class = Puppet::Type.type(:ceilometer_config).provider(:openstackconfig)
 
 describe provider_class do
 
index 368347904407123ccd2c094c34a8405d50f89cdc..8ccfd8681be39fcb06f2691599cdfc1229c1e06e 100644 (file)
@@ -30,12 +30,12 @@ describe 'Puppet::Type.type(:ceilometer_config)' do
 
   it 'should accept a valid value' do
     @ceilometer_config[:value] = 'bar'
-    expect(@ceilometer_config[:value]).to eq('bar')
+    expect(@ceilometer_config[:value]).to eq(['bar'])
   end
 
   it 'should not accept a value with whitespace' do
     @ceilometer_config[:value] = 'b ar'
-    expect(@ceilometer_config[:value]).to eq('b ar')
+    expect(@ceilometer_config[:value]).to eq(['b ar'])
   end
 
   it 'should accept valid ensure values' do