=== modified file 'actions/actions.py'
--- actions/actions.py	2015-10-16 13:01:34 +0000
+++ actions/actions.py	2016-01-06 21:38:36 +0000
@@ -6,7 +6,9 @@
 from charmhelpers.core.host import service_pause, service_resume
 from charmhelpers.core.hookenv import action_fail, status_set
 from charmhelpers.core.unitdata import kv
-from ceilometer_utils import CEILOMETER_SERVICES, assess_status
+from ceilometer_utils import (
+    CEILOMETER_BASE_SERVICES, assess_status, ceilometer_release_services,
+)
 from ceilometer_hooks import CONFIGS
 
 
@@ -15,7 +17,8 @@
 
     @raises Exception should the service fail to stop.
     """
-    for service in CEILOMETER_SERVICES:
+    services = CEILOMETER_BASE_SERVICES + ceilometer_release_services()
+    for service in services:
         if not service_pause(service):
             raise Exception("Failed to %s." % service)
 
@@ -32,7 +35,8 @@
     """Resume the Ceilometer services.
 
     @raises Exception should the service fail to start."""
-    for service in CEILOMETER_SERVICES:
+    services = CEILOMETER_BASE_SERVICES + ceilometer_release_services()
+    for service in services:
         if not service_resume(service):
             raise Exception("Failed to resume %s." % service)
 

=== modified file 'lib/ceilometer_utils.py'
--- lib/ceilometer_utils.py	2015-10-16 12:29:41 +0000
+++ lib/ceilometer_utils.py	2016-01-06 21:38:36 +0000
@@ -33,19 +33,29 @@
     "openstack_https_frontend.conf"
 CLUSTER_RES = 'grp_ceilometer_vips'
 
-CEILOMETER_SERVICES = [
+CEILOMETER_BASE_SERVICES = [
     'ceilometer-agent-central',
     'ceilometer-collector',
     'ceilometer-api',
-    'ceilometer-alarm-evaluator',
-    'ceilometer-alarm-notifier',
     'ceilometer-agent-notification',
 ]
 
+ICEHOUSE_SERVICES = [
+    'ceilometer-alarm-notifier',
+    'ceilometer-alarm-evaluator',
+    'ceilometer-agent-notification'
+]
+
+MITAKA_SERVICES = [
+    'aodh-notifier',
+    'aodh-evaluator',
+    'ceilometer-agent-notification'
+]
+
 CEILOMETER_DB = "ceilometer"
 CEILOMETER_SERVICE = "ceilometer"
 
-CEILOMETER_PACKAGES = [
+CEILOMETER_BASE_PACKAGES = [
     'haproxy',
     'apache2',
     'ceilometer-agent-central',
@@ -60,9 +70,9 @@
     'ceilometer-agent-notification'
 ]
 
-ICEHOUSE_SERVICES = [
-    'ceilometer-alarm-notifier',
-    'ceilometer-alarm-evaluator',
+MITAKA_PACKAGES = [
+    'aodh-notifier',
+    'aodh-evaluator',
     'ceilometer-agent-notification'
 ]
 
@@ -85,7 +95,7 @@
                           CeilometerContext(),
                           context.SyslogContext(),
                           HAProxyContext()],
-        'services': CEILOMETER_SERVICES
+        'services': CEILOMETER_BASE_SERVICES
     }),
     (HAPROXY_CONF, {
         'hook_contexts': [context.HAProxyContext(singlenode_mode=True),
@@ -121,10 +131,9 @@
     configs = templating.OSConfigRenderer(templates_dir=TEMPLATES,
                                           openstack_release=release)
 
-    if (get_os_codename_install_source(
-            config('openstack-origin')) >= 'icehouse'):
-        CONFIG_FILES[CEILOMETER_CONF]['services'] = \
-            CONFIG_FILES[CEILOMETER_CONF]['services'] + ICEHOUSE_SERVICES
+    CONFIG_FILES[CEILOMETER_CONF]['services'] = (
+        CONFIG_FILES[CEILOMETER_CONF]['services'] +
+        ceilometer_release_services())
 
     for conf in CONFIG_FILES:
         configs.register(conf, CONFIG_FILES[conf]['hook_contexts'])
@@ -151,8 +160,12 @@
         svcs = []
         for svc in ctxt['services']:
             svcs.append(svc)
+        if f == CEILOMETER_CONF:
+            for svc in ceilometer_release_services():
+                svcs.append(svc)
         if svcs:
             _map[f] = svcs
+
     return _map
 
 
@@ -200,11 +213,29 @@
     configs.set_release(openstack_release=new_os_rel)
 
 
+def ceilometer_release_services():
+    codename = get_os_codename_install_source(config('openstack-origin'))
+    if codename >= 'mitaka':
+        return MITAKA_SERVICES
+    elif codename >= 'icehouse':
+        return ICEHOUSE_SERVICES
+    else:
+        return []
+
+
+def ceilometer_release_packages():
+    codename = get_os_codename_install_source(config('openstack-origin'))
+    if codename >= 'mitaka':
+        return MITAKA_PACKAGES
+    elif codename >= 'icehouse':
+        return ICEHOUSE_PACKAGES
+    else:
+        return []
+
+
 def get_packages():
-    packages = deepcopy(CEILOMETER_PACKAGES)
-    if (get_os_codename_install_source(
-            config('openstack-origin')) >= 'icehouse'):
-        packages = packages + ICEHOUSE_PACKAGES
+    packages = (deepcopy(CEILOMETER_BASE_PACKAGES) +
+                ceilometer_release_packages())
     return packages
 
 

=== modified file 'unit_tests/test_actions_openstack_upgrade.py'
--- unit_tests/test_actions_openstack_upgrade.py	2015-10-16 11:59:37 +0000
+++ unit_tests/test_actions_openstack_upgrade.py	2016-01-06 21:38:36 +0000
@@ -4,7 +4,8 @@
 os.environ['JUJU_UNIT_NAME'] = 'ceilometer'
 
 with patch('ceilometer_utils.register_configs') as register_configs:
-    import openstack_upgrade
+    with patch('ceilometer_utils.ceilometer_release_services') as rel_services:
+        import openstack_upgrade
 
 from test_utils import (
     CharmTestCase

=== modified file 'unit_tests/test_ceilometer_hooks.py'
--- unit_tests/test_ceilometer_hooks.py	2015-10-10 22:53:35 +0000
+++ unit_tests/test_ceilometer_hooks.py	2016-01-06 21:38:36 +0000
@@ -44,9 +44,10 @@
     def setUp(self):
         super(CeilometerHooksTest, self).setUp(hooks, TO_PATCH)
         self.config.side_effect = self.test_config.get
-        self.get_packages.return_value = ceilometer_utils.CEILOMETER_PACKAGES
+        self.get_packages.return_value = \
+            ceilometer_utils.CEILOMETER_BASE_PACKAGES
         self.filter_installed_packages.return_value = \
-            ceilometer_utils.CEILOMETER_PACKAGES
+            ceilometer_utils.CEILOMETER_BASE_PACKAGES
         self.lsb_release.return_value = {'DISTRIB_CODENAME': 'precise'}
 
     @patch('charmhelpers.payload.execd.default_execd_dir',
@@ -68,7 +69,7 @@
         self.open_port.assert_called_with(hooks.CEILOMETER_PORT)
         self.apt_update.assert_called_with(fatal=True)
         self.apt_install.assert_called_with(
-            ceilometer_utils.CEILOMETER_PACKAGES,
+            ceilometer_utils.CEILOMETER_BASE_PACKAGES,
             fatal=True
         )
 
@@ -83,7 +84,7 @@
         self.open_port.assert_called_with(hooks.CEILOMETER_PORT)
         self.apt_update.assert_called_with(fatal=True)
         self.apt_install.assert_called_with(
-            ceilometer_utils.CEILOMETER_PACKAGES,
+            ceilometer_utils.CEILOMETER_BASE_PACKAGES,
             fatal=True
         )
 

=== modified file 'unit_tests/test_ceilometer_utils.py'
--- unit_tests/test_ceilometer_utils.py	2015-10-10 22:37:50 +0000
+++ unit_tests/test_ceilometer_utils.py	2016-01-06 21:38:36 +0000
@@ -45,8 +45,6 @@
                 'ceilometer-agent-central',
                 'ceilometer-collector',
                 'ceilometer-api',
-                'ceilometer-alarm-evaluator',
-                'ceilometer-alarm-notifier',
                 'ceilometer-agent-notification'],
              '/etc/haproxy/haproxy.cfg': ['haproxy'],
              "/etc/apache2/sites-available/openstack_https_frontend": [
@@ -82,7 +80,7 @@
             '--option', 'Dpkg::Options::=--force-confdef',
         ]
         self.apt_install.assert_called_with(
-            packages=utils.CEILOMETER_PACKAGES,
+            packages=utils.CEILOMETER_BASE_PACKAGES,
             options=dpkg_opts, fatal=True
         )
         self.configure_installation_source.assert_called_with(
@@ -92,9 +90,16 @@
     def test_get_packages(self):
         self.get_os_codename_install_source.return_value = 'havana'
         self.assertEqual(utils.get_packages(),
-                         utils.CEILOMETER_PACKAGES)
+                         utils.CEILOMETER_BASE_PACKAGES)
 
     def test_get_packages_icehouse(self):
         self.get_os_codename_install_source.return_value = 'icehouse'
         self.assertEqual(utils.get_packages(),
-                         utils.CEILOMETER_PACKAGES + utils.ICEHOUSE_PACKAGES)
+                         utils.CEILOMETER_BASE_PACKAGES +
+                         utils.ICEHOUSE_PACKAGES)
+
+    def test_get_packages_mitaka(self):
+        self.get_os_codename_install_source.return_value = 'mitaka'
+        self.assertEqual(utils.get_packages(),
+                         utils.CEILOMETER_BASE_PACKAGES +
+                         utils.MITAKA_PACKAGES)

