]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Add event_pipeline.yaml management
authorMichael Chapman <woppin@gmail.com>
Wed, 24 Feb 2016 02:46:08 +0000 (13:46 +1100)
committerMichael Chapman <woppin@gmail.com>
Tue, 9 Aug 2016 05:52:18 +0000 (15:52 +1000)
Allow event_pipeline.yaml to have publishers specified. This is
required to support aodh event alarms by pushing notifications
to an alarm queue as described here:

http://docs.openstack.org/developer/aodh/event-alarm.html

Change-Id: If367192f9c0214b3b4462788024dd9222dff558e
Signed-off-by: Michael Chapman <woppin@gmail.com>
manifests/agent/notification.pp
manifests/params.pp
releasenotes/notes/event-pipeline-d49e4bb90fddbb0b.yaml [new file with mode: 0644]
spec/classes/ceilometer_agent_notification_spec.rb
templates/event_pipeline.yaml.erb [new file with mode: 0644]

index 3b896cc514be0fc5a3713078f5d197028ff37c98..e13e676c4e76c67a5181f1e31cfb8d5f83071c47 100644 (file)
 #   (Optional) ensure state for package.
 #   Defaults to 'present'.
 #
+# [*manage_event_pipeline*]
+#   (Optional) Whether to manage event_pipeline.yaml
+#   Defaults to false
+#
+# [*event_pipeline_publishers*]
+#   (Optional) A list of publishers to put in event_pipeline.yaml
+#   Add 'notifier://?topic=alarm.all' to the list if you are using Aodh
+#   for alarms.
+#   Defaults to ['notifier://'],
+#
 class ceilometer::agent::notification (
   $manage_service            = true,
   $enabled                   = true,
@@ -66,6 +76,8 @@ class ceilometer::agent::notification (
   $notification_workers      = $::os_service_default,
   $messaging_urls            = $::os_service_default,
   $package_ensure            = 'present',
+  $manage_event_pipeline     = false,
+  $event_pipeline_publishers = ['notifier://'],
 ) {
 
   include ::ceilometer::params
@@ -100,6 +112,20 @@ class ceilometer::agent::notification (
     tag        => 'ceilometer-service'
   }
 
+  if ($manage_event_pipeline) {
+    validate_array($event_pipeline_publishers)
+
+    file { 'event_pipeline':
+      ensure                  => present,
+      path                    => $::ceilometer::params::event_pipeline,
+      content                 => template('ceilometer/event_pipeline.yaml.erb'),
+      selinux_ignore_defaults => true
+    }
+
+    Package<| tag == 'ceilometer-package' |> -> File['event_pipeline']
+    File['event_pipeline'] ~> Service['ceilometer-agent-notification']
+  }
+
   ceilometer_config {
     'notification/ack_on_event_error'       : value => $ack_on_event_error;
     'notification/store_events'             : value => $store_events;
index d6daa526bacf1ea07b3ade60891275184008dc1b..645196d1b21bfdfd7647ecffb5db44d8d363cd95 100644 (file)
@@ -9,6 +9,7 @@ class ceilometer::params {
   $dbsync_command  = 'ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf'
   $expirer_command = 'ceilometer-expirer'
   $user            = 'ceilometer'
+  $event_pipeline  = '/etc/ceilometer/event_pipeline.yaml'
 
   case $::osfamily {
     'RedHat': {
diff --git a/releasenotes/notes/event-pipeline-d49e4bb90fddbb0b.yaml b/releasenotes/notes/event-pipeline-d49e4bb90fddbb0b.yaml
new file mode 100644 (file)
index 0000000..25195d2
--- /dev/null
@@ -0,0 +1,3 @@
+---
+features:
+  - Add the ability to manage publishers in event_pipeline.yaml
index da8fd01c7d6cadfef11dcaf8d8a6eda2e0ebe869..c172234e47d9b07f4daf6f27a534f40ddbf26716 100644 (file)
@@ -111,6 +111,65 @@ describe 'ceilometer::agent::notification' do
         )
       end
     end
+
+    context "with event_pipeline management enabled" do
+      before { params.merge!(
+        :manage_event_pipeline => true
+      ) }
+
+      it { is_expected.to contain_file('event_pipeline').with(
+        'path' => '/etc/ceilometer/event_pipeline.yaml',
+      ) }
+
+      it { 'configures event_pipeline with the default notifier'
+        verify_contents(catalogue, 'event_pipeline', [
+          "---",
+          "sources:",
+          "    - name: event_source",
+          "      events:",
+          "          - \"*\"",
+          "      sinks:",
+          "          - event_sink",
+          "sinks:",
+          "    - name: event_sink",
+          "      transformers:",
+          "      triggers:",
+          "      publishers:",
+          "          - notifier://",
+      ])}
+    end
+
+    context "with multiple event_pipeline publishers specified" do
+      before { params.merge!(
+        :manage_event_pipeline => true,
+        :event_pipeline_publishers => ['notifier://', 'notifier://?topic=alarm.all']
+      ) }
+
+      it { 'configures event_pipeline with multiple publishers'
+        verify_contents(catalogue, 'event_pipeline', [
+          "---",
+          "sources:",
+          "    - name: event_source",
+          "      events:",
+          "          - \"*\"",
+          "      sinks:",
+          "          - event_sink",
+          "sinks:",
+          "    - name: event_sink",
+          "      transformers:",
+          "      triggers:",
+          "      publishers:",
+          "          - notifier://",
+          "          - notifier://?topic=alarm.all",
+      ])}
+    end
+
+    context "with event_pipeline management disabled" do
+      before { params.merge!(
+        :manage_event_pipeline => false
+      ) }
+        it { is_expected.not_to contain_file('event_pipeline') }
+    end
   end
 
   context 'on Debian platforms' do
diff --git a/templates/event_pipeline.yaml.erb b/templates/event_pipeline.yaml.erb
new file mode 100644 (file)
index 0000000..fecdd60
--- /dev/null
@@ -0,0 +1,15 @@
+---
+sources:
+    - name: event_source
+      events:
+          - "*"
+      sinks:
+          - event_sink
+sinks:
+    - name: event_sink
+      transformers:
+      triggers:
+      publishers:
+<% @event_pipeline_publishers.each do |publisher| -%>
+          - <%= publisher %>
+<% end -%>