+@@ -1276,7 +1418,7 @@ if hiera('step') >= 4 {
+ Pacemaker::Resource::Service[$::nova::params::conductor_service_name]],
+ }
+
+- # Ceilometer
++ # Ceilometer and Aodh
+ case downcase(hiera('ceilometer_backend')) {
+ /mysql/: {
+ pacemaker::resource::service { $::ceilometer::params::agent_central_service_name :
+@@ -1298,10 +1440,19 @@ if hiera('step') >= 4 {
+ pacemaker::resource::service { $::ceilometer::params::api_service_name :
+ clone_params => 'interleave=true',
+ }
+- pacemaker::resource::service { $::ceilometer::params::alarm_evaluator_service_name :
++ pacemaker::resource::service { $::aodh::params::notifier_service_name :
+ clone_params => 'interleave=true',
+ }
+- pacemaker::resource::service { $::ceilometer::params::alarm_notifier_service_name :
++ pacemaker::resource::service { $::aodh::params::expirer_package_serice :
++ clone_params => 'interleave=true',
++ }
++ pacemaker::resource::service { $::aodh::params::listener_service_name :
++ clone_params => 'interleave=true',
++ }
++ pacemaker::resource::service { $::aodh::params::api_service_name :
++ clone_params => 'interleave=true',
++ }
++ pacemaker::resource::service { $::aodh::params::evaluator_service_name :
+ clone_params => 'interleave=true',
+ }
+ pacemaker::resource::service { $::ceilometer::params::agent_notification_service_name :
+@@ -1315,8 +1466,19 @@ if hiera('step') >= 4 {
+ # Fedora doesn't know `require-all` parameter for constraints yet
+ if $::operatingsystem == 'Fedora' {
+ $redis_ceilometer_constraint_params = undef
++ $redis_aodh_constraint_params = undef
+ } else {
+ $redis_ceilometer_constraint_params = 'require-all=false'
++ $redis_aodh_constraint_params = 'require-all=false'
++ }
++ pacemaker::constraint::base { 'keystone-then-aodh-api-constraint':
++ constraint_type => 'order',
++ first_resource => "${::keystone::params::service_name}-clone",
++ second_resource => "${::aodh::params::api_service_name}-clone",
++ first_action => 'start',
++ second_action => 'start',
++ require => [Pacemaker::Resource::Service[$::aodh::params::api_service_name],
++ Pacemaker::Resource::Service[$::keystone::params::service_name]],
+ }
+ pacemaker::constraint::base { 'redis-then-ceilometer-central-constraint':
+ constraint_type => 'order',
+@@ -1328,6 +1490,16 @@ if hiera('step') >= 4 {
+ require => [Pacemaker::Resource::Ocf['redis'],
+ Pacemaker::Resource::Service[$::ceilometer::params::agent_central_service_name]],
+ }
++ pacemaker::constraint::base { 'redis-then-aodh-evaluator-constraint':
++ constraint_type => 'order',
++ first_resource => 'redis-master',
++ second_resource => "${::aodh::params::evaluator_service_name}-clone",
++ first_action => 'promote',
++ second_action => 'start',
++ constraint_params => $redis_aodh_constraint_params,
++ require => [Pacemaker::Resource::Ocf['redis'],
++ Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name]],
++ }
+ pacemaker::constraint::base { 'keystone-then-ceilometer-central-constraint':
+ constraint_type => 'order',
+ first_resource => "${::keystone::params::service_name}-clone",
+@@ -1378,53 +1550,37 @@ if hiera('step') >= 4 {
+ require => [Pacemaker::Resource::Service[$::ceilometer::params::api_service_name],
+ Pacemaker::Resource::Ocf['delay']],
+ }
+- pacemaker::constraint::base { 'ceilometer-delay-then-ceilometer-alarm-evaluator-constraint':
++ pacemaker::constraint::base { 'aodh-delay-then-aodh-evaluator-constraint':
+ constraint_type => 'order',
+ first_resource => 'delay-clone',
+- second_resource => "${::ceilometer::params::alarm_evaluator_service_name}-clone",
++ second_resource => "${::aodh::params::evaluator_service_name}-clone",
+ first_action => 'start',
+ second_action => 'start',
+- require => [Pacemaker::Resource::Service[$::ceilometer::params::alarm_evaluator_service_name],
++ require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name],
+ Pacemaker::Resource::Ocf['delay']],
+ }
+- pacemaker::constraint::colocation { 'ceilometer-alarm-evaluator-with-ceilometer-delay-colocation':
+- source => "${::ceilometer::params::alarm_evaluator_service_name}-clone",
++ pacemaker::constraint::colocation { 'aodh-evaluator-with-aodh-delay-colocation':
++ source => "${::aodh::params::evaluator_service_name}-clone",
+ target => 'delay-clone',
+ score => 'INFINITY',
+- require => [Pacemaker::Resource::Service[$::ceilometer::params::api_service_name],
++ require => [Pacemaker::Resource::Service[$::horizon::params::http_service],
+ Pacemaker::Resource::Ocf['delay']],
+ }
+- pacemaker::constraint::base { 'ceilometer-alarm-evaluator-then-ceilometer-alarm-notifier-constraint':
+- constraint_type => 'order',
+- first_resource => "${::ceilometer::params::alarm_evaluator_service_name}-clone",
+- second_resource => "${::ceilometer::params::alarm_notifier_service_name}-clone",
+- first_action => 'start',
+- second_action => 'start',
+- require => [Pacemaker::Resource::Service[$::ceilometer::params::alarm_evaluator_service_name],
+- Pacemaker::Resource::Service[$::ceilometer::params::alarm_notifier_service_name]],
+- }
+- pacemaker::constraint::colocation { 'ceilometer-alarm-notifier-with-ceilometer-alarm-evaluator-colocation':
+- source => "${::ceilometer::params::alarm_notifier_service_name}-clone",
+- target => "${::ceilometer::params::alarm_evaluator_service_name}-clone",
+- score => 'INFINITY',
+- require => [Pacemaker::Resource::Service[$::ceilometer::params::alarm_evaluator_service_name],
+- Pacemaker::Resource::Service[$::ceilometer::params::alarm_notifier_service_name]],
+- }
+- pacemaker::constraint::base { 'ceilometer-alarm-notifier-then-ceilometer-notification-constraint':
++ pacemaker::constraint::base { 'aodh-evaluator-then-aodh-notifier-constraint':
+ constraint_type => 'order',
+- first_resource => "${::ceilometer::params::alarm_notifier_service_name}-clone",
+- second_resource => "${::ceilometer::params::agent_notification_service_name}-clone",
++ first_resource => "${::aodh::params::evaluator_service_name}-clone",
++ second_resource => "${::aodh::params::notifier_service_name}-clone",
+ first_action => 'start',
+ second_action => 'start',
+- require => [Pacemaker::Resource::Service[$::ceilometer::params::agent_notification_service_name],
+- Pacemaker::Resource::Service[$::ceilometer::params::alarm_notifier_service_name]],
++ require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name],
++ Pacemaker::Resource::Service[$::aodh::params::notifier_service_name]],
+ }
+- pacemaker::constraint::colocation { 'ceilometer-notification-with-ceilometer-alarm-notifier-colocation':
+- source => "${::ceilometer::params::agent_notification_service_name}-clone",
+- target => "${::ceilometer::params::alarm_notifier_service_name}-clone",
++ pacemaker::constraint::colocation { 'aodh-notifier-with-aodh-evaluator-colocation':
++ source => "${::aodh::params::notifier_service_name}-clone",
++ target => "${::aodh::params::evaluator_service_name}-clone",
+ score => 'INFINITY',
+- require => [Pacemaker::Resource::Service[$::ceilometer::params::agent_notification_service_name],
+- Pacemaker::Resource::Service[$::ceilometer::params::alarm_notifier_service_name]],
++ require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name],
++ Pacemaker::Resource::Service[$::aodh::params::notifier_service_name]],
+ }
+ if downcase(hiera('ceilometer_backend')) == 'mongodb' {
+ pacemaker::constraint::base { 'mongodb-then-ceilometer-central-constraint':