Deploy Aodh services, replacing Ceilometer Alarm

Ceilometer Alarm is deprecated in Liberty by Aodh.

This patch:
* manage Aodh Keystone resources
* deploy Aodh API under WSGI, Notifier, Listener and Evaluator
* manage new parameters to customize Aodh deployment
* uses ceilometer DB for the upgrade path
* pacemaker config
* Add migration logic to remove pcs resources

Depends-On: I5333faa72e52d2aa2a622ac2d4b60825aadc52b5
Depends-On: Ib6c9c4c35da3fb55e0ca8e2d5a58ebaf4204d792

Co-Authored-By: Emilien Macchi <emilien@redhat.com>

Change-Id: Ib47a22884afb032ebc1655e1a4a06bfe70249134
This commit is contained in:
Pradeep Kilambi 2016-03-07 11:27:17 -05:00
parent c0cb85170d
commit 2018c38ed4
13 changed files with 328 additions and 3 deletions

View File

@ -5,6 +5,9 @@ parameter_defaults:
SSLKey: |
The contents of the private key go here
EndpointMap:
AodhAdmin: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'}
AodhInternal: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'}
AodhPublic: {protocol: 'https', port: '13042', host: 'CLOUDNAME'}
CeilometerAdmin: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
CeilometerInternal: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
CeilometerPublic: {protocol: 'https', port: '13777', host: 'CLOUDNAME'}

View File

@ -12,3 +12,28 @@
# The migration functions should be idempotent. If the migration has
# been already applied, it should be possible to call the function
# again without damaging the deployment or failing the upgrade.
function remove_ceilometer_alarm {
if pcs status | grep openstack-ceilometer-alarm; then
# Disable pacemaker resources for ceilometer-alarms
pcs resource disable openstack-ceilometer-alarm-evaluator
check_resource openstack-ceilometer-alarm-evaluator stopped 600
pcs resource delete openstack-ceilometer-alarm-evaluator
pcs resource disable openstack-ceilometer-alarm-notifier
check_resource openstack-ceilometer-alarm-notifier stopped 600
pcs resource delete openstack-ceilometer-alarm-notifier
# remove constraints
pcs constraint remove ceilometer-delay-then-ceilometer-alarm-evaluator-constraint
pcs constraint remove ceilometer-alarm-evaluator-with-ceilometer-delay-colocation
pcs constraint remove ceilometer-alarm-evaluator-then-ceilometer-alarm-notifier-constraint
pcs constraint remove ceilometer-alarm-notifier-with-ceilometer-alarm-evaluator-colocation
pcs constraint remove ceilometer-alarm-notifier-then-ceilometer-notification-constraint
pcs constraint remove ceilometer-notification-with-ceilometer-alarm-notifier-colocation
fi
# uninstall openstack-ceilometer-alarm package
yum -y remove openstack-ceilometer-alarm
}

View File

@ -53,12 +53,13 @@ neutron-l3-agent
neutron-metadata-agent
neutron-openvswitch-agent
neutron-server
openstack-ceilometer-alarm-evaluator
openstack-ceilometer-alarm-notifier
openstack-ceilometer-api
openstack-ceilometer-central
openstack-ceilometer-collector
openstack-ceilometer-notification
openstack-aodh-evaluator
openstack-aodh-notifier
openstack-aodh-listener
openstack-cinder-api
openstack-cinder-scheduler
openstack-cinder-volume
@ -107,6 +108,9 @@ openstack-nova-scheduler"
pcs -f $pacemaker_dumpfile constraint order promote redis-master then start openstack-ceilometer-central-clone require-all=false
fi
if ! pcs constraint order show | grep "promote redis-master then start openstack-aodh-evaluator-clone"; then
pcs -f $pacemaker_dumpfile constraint order promote redis-master then start openstack-aodh-evaluator-clone require-all=false
fi
# ensure neutron constraints https://review.openstack.org/#/c/229466
# remove ovs-cleanup after server and add openvswitch-agent instead
if pcs constraint order show | grep "start neutron-server-clone then start neutron-ovs-cleanup-clone"; then

View File

@ -1,6 +1,15 @@
# Data in this file is used to generate the endpoint_map.yaml template.
# Run the script build_endpoint_map.py to regenerate the file.
Aodh:
Internal:
vip_param: AodhApi
Public:
vip_param: Public
Admin:
vip_param: AodhApi
port: 8042
Ceilometer:
Internal:
vip_param: CeilometerApi

View File

@ -8,6 +8,7 @@ description: A map of OpenStack endpoints. Since the endpoints are URLs,
parameters come from net_ip_uri_map, which will include these brackets
in IPv6 addresses.
parameters:
AodhApiVirtualIP: {type: string, default: ''}
CeilometerApiVirtualIP: {type: string, default: ''}
CinderApiVirtualIP: {type: string, default: ''}
GlanceApiVirtualIP: {type: string, default: ''}
@ -24,6 +25,9 @@ parameters:
EndpointMap:
type: json
default:
AodhAdmin: {protocol: http, port: '8042', host: IP_ADDRESS}
AodhInternal: {protocol: http, port: '8042', host: IP_ADDRESS}
AodhPublic: {protocol: http, port: '8042', host: IP_ADDRESS}
CeilometerAdmin: {protocol: http, port: '8777', host: IP_ADDRESS}
CeilometerInternal: {protocol: http, port: '8777', host: IP_ADDRESS}
CeilometerPublic: {protocol: http, port: '8777', host: IP_ADDRESS}
@ -71,6 +75,120 @@ parameters:
outputs:
endpoint_map:
value:
AodhAdmin:
host:
str_replace:
template:
get_param: [EndpointMap, AodhAdmin, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: AodhApiVirtualIP}
port:
get_param: [EndpointMap, AodhAdmin, port]
protocol:
get_param: [EndpointMap, AodhAdmin, protocol]
uri:
list_join:
- ''
- - get_param: [EndpointMap, AodhAdmin, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, AodhAdmin, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: AodhApiVirtualIP}
- ':'
- get_param: [EndpointMap, AodhAdmin, port]
uri_no_suffix:
list_join:
- ''
- - get_param: [EndpointMap, AodhAdmin, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, AodhAdmin, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: AodhApiVirtualIP}
- ':'
- get_param: [EndpointMap, AodhAdmin, port]
AodhInternal:
host:
str_replace:
template:
get_param: [EndpointMap, AodhInternal, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: AodhApiVirtualIP}
port:
get_param: [EndpointMap, AodhInternal, port]
protocol:
get_param: [EndpointMap, AodhInternal, protocol]
uri:
list_join:
- ''
- - get_param: [EndpointMap, AodhInternal, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, AodhInternal, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: AodhApiVirtualIP}
- ':'
- get_param: [EndpointMap, AodhInternal, port]
uri_no_suffix:
list_join:
- ''
- - get_param: [EndpointMap, AodhInternal, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, AodhInternal, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: AodhApiVirtualIP}
- ':'
- get_param: [EndpointMap, AodhInternal, port]
AodhPublic:
host:
str_replace:
template:
get_param: [EndpointMap, AodhPublic, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: PublicVirtualIP}
port:
get_param: [EndpointMap, AodhPublic, port]
protocol:
get_param: [EndpointMap, AodhPublic, protocol]
uri:
list_join:
- ''
- - get_param: [EndpointMap, AodhPublic, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, AodhPublic, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: PublicVirtualIP}
- ':'
- get_param: [EndpointMap, AodhPublic, port]
uri_no_suffix:
list_join:
- ''
- - get_param: [EndpointMap, AodhPublic, protocol]
- ://
- str_replace:
template:
get_param: [EndpointMap, AodhPublic, host]
params:
CLOUDNAME: {get_param: CloudName}
IP_ADDRESS: {get_param: PublicVirtualIP}
- ':'
- get_param: [EndpointMap, AodhPublic, port]
CeilometerAdmin:
host:
str_replace:

View File

@ -16,6 +16,11 @@ parameters:
description: The password for the keystone admin account, used for monitoring, querying neutron etc.
type: string
hidden: true
AodhPassword:
default: unset
description: The password for the aodh services.
type: string
hidden: true
CeilometerBackend:
default: 'mongodb'
description: The ceilometer backend type.
@ -665,6 +670,7 @@ parameters:
default:
NeutronTenantNetwork: tenant
CeilometerApiNetwork: internal_api
AodhApiNetwork: internal_api
MongoDbNetwork: internal_api
CinderApiNetwork: internal_api
CinderIscsiNetwork: storage
@ -864,6 +870,7 @@ resources:
properties:
CloudName: {get_param: CloudName}
CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
@ -888,6 +895,7 @@ resources:
properties:
AdminPassword: {get_param: AdminPassword}
AdminToken: {get_param: AdminToken}
AodhPassword: {get_param: AodhPassword}
CeilometerBackend: {get_param: CeilometerBackend}
CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
CeilometerPassword: {get_param: CeilometerPassword}
@ -1000,6 +1008,7 @@ resources:
ServiceNetMap: {get_param: ServiceNetMap}
EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
@ -1233,6 +1242,7 @@ resources:
heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
@ -1353,6 +1363,7 @@ resources:
nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
@ -1635,6 +1646,9 @@ outputs:
PublicVip:
description: Controller VIP for public API endpoints
value: {get_attr: [VipMap, net_ip_map, external]}
AodhInternalVip:
description: VIP for Aodh API internal endpoint
value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
CeilometerInternalVip:
description: VIP for Ceilometer API internal endpoint
value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}

View File

@ -34,6 +34,8 @@ parameters:
type: comma_delimited_list
ceilometer_api_node_ips:
type: comma_delimited_list
aodh_api_node_ips:
type: comma_delimited_list
nova_api_node_ips:
type: comma_delimited_list
nova_metadata_node_ips:
@ -187,6 +189,14 @@ resources:
list_join:
- "','"
- {get_param: ceilometer_api_node_ips}
aodh_api_node_ips:
str_replace:
template: "['SERVERS_LIST']"
params:
SERVERS_LIST:
list_join:
- "','"
- {get_param: aodh_api_node_ips}
nova_api_node_ips:
str_replace:
template: "['SERVERS_LIST']"
@ -272,6 +282,7 @@ resources:
# NOTE(gfidente): interpolation with %{} in the
# hieradata file can't be used as it returns string
ceilometer::rabbit_hosts: *rabbit_nodes_array
aodh::rabbit_hosts: *rabbit_nodes_array
cinder::rabbit_hosts: *rabbit_nodes_array
glance::notify::rabbitmq::rabbit_hosts: *rabbit_nodes_array
heat::rabbit_hosts: *rabbit_nodes_array

View File

@ -17,6 +17,14 @@ parameters:
description: The keystone auth secret and db password.
type: string
hidden: true
AodhApiVirtualIP:
type: string
default: ''
AodhPassword:
default: unset
description: The password for the aodh services.
type: string
hidden: true
CeilometerApiVirtualIP:
type: string
default: ''
@ -1140,6 +1148,7 @@ resources:
ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
ceilometer_password: {get_param: CeilometerPassword}
ceilometer_store_events: {get_param: CeilometerStoreEvents}
aodh_password: {get_param: AodhPassword}
ceilometer_coordination_url:
list_join:
- ''
@ -1232,6 +1241,7 @@ resources:
neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
@ -1536,6 +1546,24 @@ resources:
snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
# Aodh
aodh::rabbit_userid: {get_input: rabbit_username}
aodh::rabbit_password: {get_input: rabbit_password}
aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
aodh::rabbit_port: {get_input: rabbit_client_port}
aodh::debug: {get_input: debug}
aodh::wsgi::apache::ssl: false
aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
aodh::api::service_name: 'httpd'
aodh::api::host: {get_input: aodh_api_network}
aodh::api::keystone_password: {get_input: aodh_password}
aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri}
aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri}
aodh::auth::auth_password: {get_input: aodh_password}
aodh::db::mysql::password: {get_input: aodh_password}
# for a migration path from ceilometer-alarm to aodh, we use the same database & coordination
aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url}
# Nova
nova::rabbit_userid: {get_input: rabbit_username}
nova::rabbit_password: {get_input: rabbit_password}

View File

@ -5,6 +5,9 @@ ssh::server::storeconfigs_enabled: false
ceilometer::agent::auth::auth_region: 'regionOne'
ceilometer::agent::auth::auth_tenant_name: 'service'
aodh::auth::auth_region: 'regionOne'
aodh::auth::auth_tenant_name: 'service'
nova::api::admin_tenant_name: 'service'
nova::network::neutron::neutron_project_name: 'service'
nova::network::neutron::neutron_username: 'neutron'

View File

@ -31,6 +31,7 @@ redis::sentinel::notification_script: '/usr/local/bin/redis-notifications.sh'
# service tenant
glance::api::keystone_tenant: 'service'
aodh::api::keystone_tenant: 'service'
glance::registry::keystone_tenant: 'service'
neutron::server::auth_tenant: 'service'
neutron::agents::metadata::auth_tenant: 'service'
@ -143,6 +144,7 @@ tripleo::loadbalancer::redis: true
tripleo::loadbalancer::sahara: true
tripleo::loadbalancer::swift_proxy_server: true
tripleo::loadbalancer::ceilometer: true
tripleo::loadbalancer::aodh: true
tripleo::loadbalancer::heat_api: true
tripleo::loadbalancer::heat_cloudwatch: true
tripleo::loadbalancer::heat_cfn: true
@ -255,3 +257,7 @@ tripleo::firewall::firewall_rules:
'127 snmp':
port: 161
proto: 'udp'
'128 aodh':
port:
- 8042
- 13042

View File

@ -113,6 +113,7 @@ if hiera('step') >= 2 {
include ::sahara::db::mysql
if downcase(hiera('ceilometer_backend')) == 'mysql' {
include ::ceilometer::db::mysql
include ::aodh::db::mysql
}
$rabbit_nodes = hiera('rabbit_node_ips')
@ -568,6 +569,21 @@ if hiera('step') >= 3 {
Cron <| title == 'ceilometer-expirer' |> { command => "sleep $((\$(od -A n -t d -N 3 /dev/urandom) % 86400)) && ${::ceilometer::params::expirer_command}" }
# Aodh
class { '::aodh' :
database_connection => $ceilometer_database_connection,
}
include ::aodh::db::sync
# To manage the upgrade:
Exec['ceilometer-dbsync'] -> Exec['aodh-db-sync']
include ::aodh::auth
include ::aodh::api
include ::aodh::wsgi::apache
include ::aodh::evaluator
include ::aodh::notifier
include ::aodh::listener
include ::aodh::client
# Heat
class { '::heat' :
notification_driver => 'messaging',

View File

@ -1090,6 +1090,32 @@ if hiera('step') >= 3 {
neutron_options => $neutron_options,
}
# Aodh
class { '::aodh' :
database_connection => $ceilometer_database_connection,
}
include ::aodh::config
include ::aodh::auth
include ::aodh::client
include ::aodh::wsgi::apache
class { '::aodh::api':
manage_service => false,
enabled => false,
service_name => 'httpd',
}
class { '::aodh::evaluator':
manage_service => false,
enabled => false,
}
class { '::aodh::notifier':
manage_service => false,
enabled => false,
}
class { '::aodh::listener':
manage_service => false,
enabled => false,
}
$snmpd_user = hiera('snmpd_readonly_user_name')
snmp::snmpv3_user { $snmpd_user:
authtype => 'MD5',
@ -1580,7 +1606,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:
@ -1613,8 +1639,10 @@ 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 { 'redis-then-ceilometer-central-constraint':
constraint_type => 'order',
@ -1626,6 +1654,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 => 'openstack-core-clone',
@ -1676,6 +1714,55 @@ if hiera('step') >= 4 {
require => [Pacemaker::Resource::Service[$::ceilometer::params::api_service_name],
Pacemaker::Resource::Ocf['delay']],
}
# Aodh
pacemaker::resource::service { $::aodh::params::evaluator_service_name :
clone_params => 'interleave=true',
}
pacemaker::resource::service { $::aodh::params::notifier_service_name :
clone_params => 'interleave=true',
}
pacemaker::resource::service { $::aodh::params::listener_service_name :
clone_params => 'interleave=true',
}
pacemaker::constraint::base { 'aodh-delay-then-aodh-evaluator-constraint':
constraint_type => 'order',
first_resource => 'delay-clone',
second_resource => "${::aodh::params::evaluator_service_name}-clone",
first_action => 'start',
second_action => 'start',
require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name],
Pacemaker::Resource::Ocf['delay']],
}
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[$::aodh::params::evaluator_service_name],
Pacemaker::Resource::Ocf['delay']],
}
pacemaker::constraint::base { 'aodh-evaluator-then-aodh-notifier-constraint':
constraint_type => 'order',
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[$::aodh::params::evaluator_service_name],
Pacemaker::Resource::Service[$::aodh::params::notifier_service_name]],
}
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[$::aodh::params::evaluator_service_name],
Pacemaker::Resource::Service[$::aodh::params::notifier_service_name]],
}
pacemaker::constraint::colocation { 'aodh-listener-with-aodh-evaluator-colocation':
source => "${::aodh::params::listener_service_name}-clone",
target => "${::aodh::params::evaluator_service_name}-clone",
score => 'INFINITY',
require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name],
Pacemaker::Resource::Service[$::aodh::params::listener_service_name]],
}
if downcase(hiera('ceilometer_backend')) == 'mongodb' {
pacemaker::constraint::base { 'mongodb-then-ceilometer-central-constraint':
constraint_type => 'order',

View File

@ -26,6 +26,7 @@ resources:
nova_api_vip: {get_input: nova_api_vip}
nova_metadata_vip: {get_input: nova_metadata_vip}
ceilometer_api_vip: {get_input: ceilometer_api_vip}
aodh_api_vip: {get_input: aodh_api_vip}
heat_api_vip: {get_input: heat_api_vip}
horizon_vip: {get_input: horizon_vip}
redis_vip: {get_input: redis_vip}