228 lines
7.8 KiB
Puppet
228 lines
7.8 KiB
Puppet
#
|
|
# == Class: openstack::ceilometer
|
|
#
|
|
# Installs and configures Ceilometer
|
|
#
|
|
# [use_stderr] Rather or not service should send output to stderr. Optional. Defaults to true.
|
|
#
|
|
|
|
class openstack::ceilometer (
|
|
$keystone_password = 'ceilometer_pass',
|
|
$keystone_user = 'ceilometer',
|
|
$keystone_tenant = 'services',
|
|
$keystone_region = 'RegionOne',
|
|
$metering_secret = 'ceilometer',
|
|
$verbose = false,
|
|
$use_syslog = false,
|
|
$use_stderr = true,
|
|
$syslog_log_facility = 'LOG_LOCAL0',
|
|
$default_log_levels = undef,
|
|
$debug = false,
|
|
$db_type = 'mysql',
|
|
$db_host = 'localhost',
|
|
$db_user = 'ceilometer',
|
|
$db_password = 'ceilometer_pass',
|
|
$db_dbname = 'ceilometer',
|
|
$swift_rados_backend = false,
|
|
$mongo_replicaset = undef,
|
|
$amqp_hosts = '127.0.0.1',
|
|
$amqp_user = 'guest',
|
|
$amqp_password = 'rabbit_pw',
|
|
$rabbit_ha_queues = false,
|
|
$keystone_protocol = 'http',
|
|
$keystone_host = '127.0.0.1',
|
|
$host = '0.0.0.0',
|
|
$port = '8777',
|
|
$primary_controller = false,
|
|
$on_controller = false,
|
|
$on_compute = false,
|
|
$ha_mode = false,
|
|
$ext_mongo = false,
|
|
# ttl is 1 week (3600*24*7)
|
|
$os_endpoint_type = 'internalURL',
|
|
$alarm_history_time_to_live = '604800',
|
|
$event_time_to_live = '604800',
|
|
$metering_time_to_live = '604800',
|
|
$http_timeout = '600',
|
|
$api_workers = '1',
|
|
$collector_workers = '1',
|
|
$notification_workers = '1',
|
|
) {
|
|
|
|
# Add the base ceilometer class & parameters
|
|
# This class is required by ceilometer agents & api classes
|
|
# The metering_secret parameter is mandatory
|
|
class { '::ceilometer':
|
|
http_timeout => $http_timeout,
|
|
event_time_to_live => $event_time_to_live,
|
|
metering_time_to_live => $metering_time_to_live,
|
|
alarm_history_time_to_live => $alarm_history_time_to_live,
|
|
package_ensure => 'present',
|
|
rabbit_hosts => split($amqp_hosts, ','),
|
|
rabbit_userid => $amqp_user,
|
|
rabbit_password => $amqp_password,
|
|
metering_secret => $metering_secret,
|
|
verbose => $verbose,
|
|
debug => $debug,
|
|
use_syslog => $use_syslog,
|
|
use_stderr => $use_stderr,
|
|
log_facility => $syslog_log_facility,
|
|
}
|
|
|
|
# TODO (iberezovskiy): Move to globals (as it is done for sahara)
|
|
# after new sync with upstream because of
|
|
# https://github.com/openstack/puppet-ceilometer/blob/master/manifests/init.pp#L160
|
|
class { '::ceilometer::logging':
|
|
default_log_levels => $default_log_levels,
|
|
}
|
|
|
|
# Configure authentication for agents
|
|
class { '::ceilometer::agent::auth':
|
|
auth_url => "${keystone_protocol}://${keystone_host}:5000/v2.0",
|
|
auth_password => $keystone_password,
|
|
auth_region => $keystone_region,
|
|
auth_tenant_name => $keystone_tenant,
|
|
auth_user => $keystone_user,
|
|
}
|
|
|
|
class { '::ceilometer::client': }
|
|
|
|
if ($on_controller) {
|
|
# Configure the ceilometer database
|
|
# Only needed if ceilometer::agent::central or ceilometer::api are declared
|
|
|
|
if ( !$ext_mongo ) {
|
|
if ( $db_type == 'mysql' ) {
|
|
$current_database_connection = "${db_type}://${db_user}:${db_password}@${db_host}/${db_dbname}?read_timeout=60"
|
|
} else {
|
|
if ( !$mongo_replicaset ) {
|
|
$current_database_connection = "${db_type}://${db_user}:${db_password}@${db_host}/${db_dbname}"
|
|
} else {
|
|
$current_database_connection = "${db_type}://${db_user}:${db_password}@${db_host}/${db_dbname}"
|
|
ceilometer_config {
|
|
'database/mongodb_replica_set' : value => $mongo_replicaset;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$current_database_connection = "${db_type}://${db_user}:${db_password}@${db_host}/${db_dbname}"
|
|
if $mongo_replicaset {
|
|
ceilometer_config {
|
|
'database/mongodb_replica_set' : value => $mongo_replicaset;
|
|
}
|
|
}
|
|
}
|
|
|
|
ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} ->
|
|
Service<| title == 'ceilometer-agent-central'|>
|
|
|
|
class { '::ceilometer::db':
|
|
database_connection => $current_database_connection,
|
|
sync_db => $primary_controller,
|
|
}
|
|
|
|
# Install the ceilometer-api service
|
|
# The keystone_password parameter is mandatory
|
|
class { '::ceilometer::api':
|
|
keystone_protocol => $keystone_protocol,
|
|
keystone_host => $keystone_host,
|
|
keystone_user => $keystone_user,
|
|
keystone_password => $keystone_password,
|
|
keystone_tenant => $keystone_tenant,
|
|
host => $host,
|
|
port => $port,
|
|
api_workers => $api_workers,
|
|
}
|
|
|
|
# Clean up expired data once a week
|
|
class { '::ceilometer::expirer':
|
|
minute => '0',
|
|
hour => '0',
|
|
monthday => '*',
|
|
month => '*',
|
|
weekday => '0',
|
|
}
|
|
|
|
class { '::ceilometer::collector':
|
|
collector_workers => $collector_workers,
|
|
}
|
|
|
|
class { '::ceilometer::agent::central': }
|
|
|
|
class { '::ceilometer::alarm::evaluator':
|
|
evaluation_interval => 60,
|
|
}
|
|
|
|
class { '::ceilometer::alarm::notifier': }
|
|
|
|
class { '::ceilometer::agent::notification':
|
|
notification_workers => $notification_workers,
|
|
store_events => true,
|
|
}
|
|
|
|
if $ha_mode {
|
|
include ceilometer_ha::agent::central
|
|
|
|
Package[$::ceilometer::params::common_package_name] -> Class['::ceilometer_ha::agent::central']
|
|
Package[$::ceilometer::params::agent_central_package_name] -> Class['::ceilometer_ha::agent::central']
|
|
}
|
|
else {
|
|
Package[$::ceilometer::params::common_package_name] -> Service[$::ceilometer::params::agent_central_service_name]
|
|
Package[$::ceilometer::params::agent_central_package_name] -> Service[$::ceilometer::params::agent_central_service_name]
|
|
}
|
|
}
|
|
|
|
if $ha_mode {
|
|
include ceilometer_ha::alarm::evaluator
|
|
|
|
case $::osfamily {
|
|
'RedHat': {
|
|
$alarm_package = $::ceilometer::params::alarm_package_name[0]
|
|
}
|
|
'Debian': {
|
|
$alarm_package = $::ceilometer::params::alarm_package_name[1]
|
|
}
|
|
}
|
|
|
|
Package[$::ceilometer::params::common_package_name] -> Class['ceilometer_ha::alarm::evaluator']
|
|
Package[$alarm_package] -> Class['ceilometer_ha::alarm::evaluator']
|
|
}
|
|
|
|
if ($swift_rados_backend) {
|
|
ceilometer_config {
|
|
'DEFAULT/swift_rados_backend' : value => true;
|
|
}
|
|
}
|
|
|
|
if ($use_syslog) {
|
|
ceilometer_config {
|
|
'DEFAULT/use_syslog_rfc_format': value => true;
|
|
}
|
|
}
|
|
|
|
Package<| title == $::ceilometer::params::alarm_package or
|
|
title == 'ceilometer-common'|> ~>
|
|
Service<| title == 'ceilometer-alarm-evaluator'|>
|
|
|
|
if !defined(Service['ceilometer-alarm-evaluator']) {
|
|
notify{ "Module ${module_name} cannot notify service ceilometer-alarm-evaluator on packages update": }
|
|
}
|
|
|
|
if ($on_compute) {
|
|
if $::operatingsystem == 'Ubuntu' and $::ceilometer::params::libvirt_group {
|
|
# Our libvirt-bin deb package (1.2.9 version) creates 'libvirt' group on Ubuntu
|
|
if (versioncmp($::libvirt_package_version, '1.2.9') >= 0) {
|
|
User<| name == 'ceilometer' |> {
|
|
groups => ['nova', 'libvirt'],
|
|
}
|
|
}
|
|
}
|
|
# Install compute agent
|
|
class { 'ceilometer::agent::compute':
|
|
enabled => true,
|
|
}
|
|
ceilometer_config { 'service_credentials/os_endpoint_type': value => $os_endpoint_type} ->
|
|
Service<| title == 'ceilometer-agent-compute'|>
|
|
}
|
|
}
|