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
This commit is contained in:
Ryota MIBU 2017-01-10 04:30:32 +00:00
parent f3226f8dde
commit 3838010aaf
4 changed files with 33 additions and 3 deletions

View File

@ -0,0 +1,13 @@
---
sources:
- name: event_source
events:
- "*"
sinks:
- event_sink
sinks:
- name: event_sink
transformers:
publishers:
- notifier://
- notifier://?topic=alarm.all

View File

@ -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():

View File

@ -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 }}

View File

@ -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')