Merge "Fix typo in README.rst"
diff --git a/nova/files/liberty/nova-compute.conf.Debian b/nova/files/liberty/nova-compute.conf.Debian
index 9ed941e..acb4679 100644
--- a/nova/files/liberty/nova-compute.conf.Debian
+++ b/nova/files/liberty/nova-compute.conf.Debian
@@ -87,13 +87,18 @@
 service_down_time = 90
 
 {% if pillar.ceilometer is defined %}
-
 instance_usage_audit = True
 instance_usage_audit_period = hour
-notify_on_state_change = vm_and_task_state
-
 {% endif %}
 
+{%- if compute.get('notification', {}).notify_on is defined %}
+{%- for key, value in compute.notification.notify_on.iteritems() %}
+notify_on_{{ key }} = {{ value }}
+{%- endfor %}
+{%- elif pillar.ceilometer is defined %}
+notify_on_state_change = vm_and_task_state
+{%- endif %}
+
 {%- if compute.notification is defined %}
 notification_driver = {{ compute.notification.driver }}
 
diff --git a/nova/files/liberty/nova-controller.conf.Debian b/nova/files/liberty/nova-controller.conf.Debian
index 864a778..d979217 100644
--- a/nova/files/liberty/nova-controller.conf.Debian
+++ b/nova/files/liberty/nova-controller.conf.Debian
@@ -116,6 +116,16 @@
 
 lock_path = /var/lib/nova/tmp
 
+[oslo_messaging_notifications]
+{%- if controller.notification is mapping %}
+driver = {{ controller.notification.get('driver', 'messagingv2') }}
+{%- if controller.notification.topics is defined %}
+topics = {{ controller.notification.topics }}
+{%- endif %}
+{%- elif controller.notification %}
+driver=messagingv2
+{%- endif %}
+
 [oslo_messaging_rabbit]
 {%- if controller.message_queue.members is defined %}
 rabbit_hosts = {% for member in controller.message_queue.members -%}
diff --git a/nova/files/mitaka/nova-compute.conf.Debian b/nova/files/mitaka/nova-compute.conf.Debian
index 4721236..3cd526e 100644
--- a/nova/files/mitaka/nova-compute.conf.Debian
+++ b/nova/files/mitaka/nova-compute.conf.Debian
@@ -52,19 +52,28 @@
 service_down_time = 90
 
 {% if pillar.ceilometer is defined %}
-
 instance_usage_audit = True
 instance_usage_audit_period = hour
+{%- endif %}
+
+{%- if compute.get('notification', {}).notify_on is defined %}
+{%- for key, value in compute.notification.notify_on.iteritems() %}
+notify_on_{{ key }} = {{ value }}
+{%- endfor %}
+{%- elif pillar.ceilometer is defined %}
 notify_on_state_change = vm_and_task_state
-notification_topics=notifications
-instance_usage_audit_period=hour
-{% endif %}
+{%- endif %}
 
 [oslo_concurrency]
 lock_path = /var/lib/nova/tmp
 
 [oslo_messaging_notifications]
-{%- if compute.notification is defined %}
+{%- if compute.notification is mapping %}
+driver = {{ compute.notification.get('driver', 'messagingv2') }}
+{%- if compute.notification.topics is defined %}
+topics = {{ compute.notification.topics }}
+{%- endif %}
+{%- elif compute.notification %}
 driver = messagingv2
 {%- endif %}
 
diff --git a/nova/files/mitaka/nova-controller.conf.Debian b/nova/files/mitaka/nova-controller.conf.Debian
index a01be60..5d533b6 100644
--- a/nova/files/mitaka/nova-controller.conf.Debian
+++ b/nova/files/mitaka/nova-controller.conf.Debian
@@ -92,6 +92,16 @@
 
 lock_path = /var/lib/nova/tmp
 
+[oslo_messaging_notifications]
+{%- if controller.notification is mapping %}
+driver = {{ controller.notification.get('driver', 'messagingv2') }}
+{%- if controller.notification.topics is defined %}
+topics = {{ controller.notification.topics }}
+{%- endif %}
+{%- elif controller.notification %}
+driver=messagingv2
+{%- endif %}
+
 [oslo_messaging_rabbit]
 {%- if controller.message_queue.members is defined %}
 rabbit_hosts = {% for member in controller.message_queue.members -%}
diff --git a/nova/map.jinja b/nova/map.jinja
index 718f255..2c2d16f 100644
--- a/nova/map.jinja
+++ b/nova/map.jinja
@@ -10,6 +10,7 @@
         'pkgs': ['nova-consoleproxy', 'novnc', 'nova-api', 'nova-cert', 'nova-conductor', 'nova-consoleauth', 'nova-doc', 'nova-scheduler', 'python-novaclient', 'python-memcache', 'gettext-base', 'python-pycadf'],
         'services': ['nova-api', 'nova-cert', 'nova-consoleauth', 'nova-scheduler', 'nova-conductor', 'nova-novncproxy'],
         'debug': false,
+        'notification': false,
         'audit': {
           'enabled': false
         },
@@ -18,6 +19,7 @@
         'pkgs': ['openstack-nova-novncproxy', 'python-nova', 'openstack-nova-api', 'openstack-nova-console', 'openstack-nova-scheduler', 'python-novaclient', 'openstack-nova-common', 'openstack-nova-conductor', 'openstack-nova-cert', 'python-pycadf'],
         'services': ['openstack-nova-api', 'openstack-nova-cert', 'openstack-nova-consoleauth', 'openstack-nova-scheduler', 'openstack-nova-conductor', 'openstack-nova-novncproxy'],
         'debug': false,
+        'notification': false,
         'audit': {
           'enabled': false
         },
@@ -32,6 +34,7 @@
         'libvirt_service': 'libvirtd',
         'bind': compute_bind_defaults,
         'debug': false,
+        'notification': false,
         'identity': {
             'region': 'RegionOne'
         },
@@ -48,6 +51,7 @@
         'libvirt_service': 'libvirtd',
         'bind': compute_bind_defaults,
         'debug': false,
+        'notification': false,
         'identity': {
             'region': 'RegionOne'
         },
diff --git a/nova/meta/heka.yml b/nova/meta/heka.yml
index c6cd75c..2535ecf 100644
--- a/nova/meta/heka.yml
+++ b/nova/meta/heka.yml
@@ -157,12 +157,12 @@
         window: 60
         periods: 0
         function: last
-      - metric: openstack_nova_services
+      - metric: openstack_nova_services_percent
         field:
           service: {{ nova_service }}
-          state: '== down || == disabled'
-        relational_operator: '>'
-        threshold: 0
+          state: up
+        relational_operator: '<'
+        threshold: 100
         window: 60
         periods: 0
         function: last