From 3838010aaf5d56a50b4b64be0bcca8ce0f2052b1 Mon Sep 17 00:00:00 2001 From: Ryota MIBU <r-mibu@cq.jp.nec.com> Date: Tue, 10 Jan 2017 04:30:32 +0000 Subject: [PATCH] Add Aodh event-alarm support 'alarm-listener' in Aodh would be deployed if you use charm-aodh. It expects that ceilometer publish events with 'alarm.all' topic, then it can evaluate alarm criteria pre-configured by users. This patch makes ceilometer publish events for event-driven alarm evaluation in Aodh. Change-Id: Id536c9d847ac9c08b9d7d309b4639606e6860a17 --- files/event_pipeline_alarm.yaml | 13 +++++++++++++ hooks/ceilometer_hooks.py | 9 +++++++++ templates/mitaka/ceilometer.conf | 1 + unit_tests/test_ceilometer_hooks.py | 13 ++++++++++--- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 files/event_pipeline_alarm.yaml diff --git a/files/event_pipeline_alarm.yaml b/files/event_pipeline_alarm.yaml new file mode 100644 index 0000000..626006f --- /dev/null +++ b/files/event_pipeline_alarm.yaml @@ -0,0 +1,13 @@ +--- +sources: + - name: event_source + events: + - "*" + sinks: + - event_sink +sinks: + - name: event_sink + transformers: + publishers: + - notifier:// + - notifier://?topic=alarm.all diff --git a/hooks/ceilometer_hooks.py b/hooks/ceilometer_hooks.py index 7f18c0a..afd6cd0 100755 --- a/hooks/ceilometer_hooks.py +++ b/hooks/ceilometer_hooks.py @@ -184,6 +184,7 @@ def config_changed(): if openstack_upgrade_available('ceilometer-common'): status_set('maintenance', 'Upgrading to new OpenStack release') do_openstack_upgrade(CONFIGS) + install_event_pipeline_setting() update_nrpe_config() CONFIGS.write_all() # NOTE(jamespage): Drop when charm switches to apache2+mod_wsgi @@ -204,6 +205,14 @@ def config_changed(): ha_joined(rid) +def install_event_pipeline_setting(): + src_file = 'files/event_pipeline_alarm.yaml' + dest_file = '/etc/ceilometer/event_pipeline_alarm.yaml' + if not os.path.isdir(os.path.dirname(dest_file)): + os.makedirs(os.path.dirname(dest_file)) + shutil.copy(src_file, dest_file) + + @hooks.hook('upgrade-charm') @harden() def upgrade_charm(): diff --git a/templates/mitaka/ceilometer.conf b/templates/mitaka/ceilometer.conf index dc64536..6c7c920 100644 --- a/templates/mitaka/ceilometer.conf +++ b/templates/mitaka/ceilometer.conf @@ -8,6 +8,7 @@ debug = {{ debug }} verbose = {{ verbose }} use_syslog = {{ use_syslog }} +event_pipeline_cfg_file = /etc/ceilometer/event_pipeline_alarm.yaml [api] port = {{ port }} diff --git a/unit_tests/test_ceilometer_hooks.py b/unit_tests/test_ceilometer_hooks.py index 878496a..5bd4f82 100644 --- a/unit_tests/test_ceilometer_hooks.py +++ b/unit_tests/test_ceilometer_hooks.py @@ -147,44 +147,51 @@ class CeilometerHooksTest(CharmTestCase): self.assertTrue(changed.called) self.assertTrue(install.called) + @patch.object(hooks, 'install_event_pipeline_setting') @patch('charmhelpers.core.hookenv.config') @patch.object(hooks, 'ceilometer_joined') @patch.object(hooks, 'install_ceilometer_ocf') def test_config_changed_no_upgrade(self, ocf, - joined, mock_config): + joined, mock_config, event_pipe): self.openstack_upgrade_available.return_value = False hooks.hooks.execute(['hooks/config-changed']) self.openstack_upgrade_available.\ assert_called_with('ceilometer-common') self.assertFalse(self.do_openstack_upgrade.called) + self.assertTrue(event_pipe.called) self.assertTrue(self.CONFIGS.write_all.called) self.assertTrue(joined.called) self.assertTrue(self.reload_systemd.called) self.assertTrue(ocf.called) + @patch.object(hooks, 'install_event_pipeline_setting') @patch('charmhelpers.core.hookenv.config') @patch.object(hooks, 'ceilometer_joined') @patch.object(hooks, 'install_ceilometer_ocf') def test_config_changed_upgrade(self, ocf, - joined, mock_config): + joined, mock_config, event_pipe): self.openstack_upgrade_available.return_value = True hooks.hooks.execute(['hooks/config-changed']) self.openstack_upgrade_available.\ assert_called_with('ceilometer-common') self.assertTrue(self.do_openstack_upgrade.called) + self.assertTrue(event_pipe.called) self.assertTrue(self.CONFIGS.write_all.called) self.assertTrue(joined.called) self.assertTrue(self.reload_systemd.called) self.assertTrue(ocf.called) + @patch.object(hooks, 'install_event_pipeline_setting') @patch.object(hooks, 'install_ceilometer_ocf') - def test_config_changed_with_openstack_upgrade_action(self, ocf): + def test_config_changed_with_openstack_upgrade_action(self, ocf, + event_pipe): self.openstack_upgrade_available.return_value = True self.test_config.set('action-managed-upgrade', True) hooks.hooks.execute(['hooks/config-changed']) self.assertFalse(self.do_openstack_upgrade.called) + self.assertTrue(event_pipe.called) self.assertTrue(ocf.called) @patch.object(hooks, 'canonical_url') -- GitLab