f0ce9c4e4a
The stats collector falls behind under high load on the messaging system. The suggested optimization is to increase the stats polling and disable rates processing in management UI: rabbit.collect_statistics_interval=30000 rabbitmq_management.rates_mode=none. The new hiera parameter rabbit_config_management_variables may be used to override the rates_mode to other values. Related upstream PR https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/407 DocImpact Closes-bug: #1510835 Change-Id: I9a3179a4f002064c9b6d2621a49bb0aa9aa707c7 Signed-off-by: Bogdan Dobrelya <bdobrelia@mirantis.com>
217 lines
9.2 KiB
Puppet
217 lines
9.2 KiB
Puppet
# Main rabbitmq class
|
|
class rabbitmq(
|
|
$admin_enable = $rabbitmq::params::admin_enable,
|
|
$cluster_node_type = $rabbitmq::params::cluster_node_type,
|
|
$cluster_nodes = $rabbitmq::params::cluster_nodes,
|
|
$config = $rabbitmq::params::config,
|
|
$config_cluster = $rabbitmq::params::config_cluster,
|
|
$config_path = $rabbitmq::params::config_path,
|
|
$config_stomp = $rabbitmq::params::config_stomp,
|
|
$default_user = $rabbitmq::params::default_user,
|
|
$default_pass = $rabbitmq::params::default_pass,
|
|
$delete_guest_user = $rabbitmq::params::delete_guest_user,
|
|
$env_config = $rabbitmq::params::env_config,
|
|
$env_config_path = $rabbitmq::params::env_config_path,
|
|
$erlang_cookie = $rabbitmq::params::erlang_cookie,
|
|
$management_port = $rabbitmq::params::management_port,
|
|
$node_ip_address = $rabbitmq::params::node_ip_address,
|
|
$package_apt_pin = $rabbitmq::params::package_apt_pin,
|
|
$package_ensure = $rabbitmq::params::package_ensure,
|
|
$package_gpg_key = $rabbitmq::params::package_gpg_key,
|
|
$package_name = $rabbitmq::params::package_name,
|
|
$package_provider = $rabbitmq::params::package_provider,
|
|
$package_source = undef,
|
|
$repos_ensure = $rabbitmq::params::repos_ensure,
|
|
$manage_repos = $rabbitmq::params::manage_repos,
|
|
$plugin_dir = $rabbitmq::params::plugin_dir,
|
|
$port = $rabbitmq::params::port,
|
|
$tcp_keepalive = $rabbitmq::params::tcp_keepalive,
|
|
$service_ensure = $rabbitmq::params::service_ensure,
|
|
$service_manage = $rabbitmq::params::service_manage,
|
|
$service_name = $rabbitmq::params::service_name,
|
|
$ssl = $rabbitmq::params::ssl,
|
|
$ssl_only = $rabbitmq::params::ssl_only,
|
|
$ssl_cacert = $rabbitmq::params::ssl_cacert,
|
|
$ssl_cert = $rabbitmq::params::ssl_cert,
|
|
$ssl_key = $rabbitmq::params::ssl_key,
|
|
$ssl_port = $rabbitmq::params::ssl_port,
|
|
$ssl_management_port = $rabbitmq::params::ssl_management_port,
|
|
$ssl_stomp_port = $rabbitmq::params::ssl_stomp_port,
|
|
$ssl_verify = $rabbitmq::params::ssl_verify,
|
|
$ssl_fail_if_no_peer_cert = $rabbitmq::params::ssl_fail_if_no_peer_cert,
|
|
$stomp_ensure = $rabbitmq::params::stomp_ensure,
|
|
$ldap_auth = $rabbitmq::params::ldap_auth,
|
|
$ldap_server = $rabbitmq::params::ldap_server,
|
|
$ldap_user_dn_pattern = $rabbitmq::params::ldap_user_dn_pattern,
|
|
$ldap_use_ssl = $rabbitmq::params::ldap_use_ssl,
|
|
$ldap_port = $rabbitmq::params::ldap_port,
|
|
$ldap_log = $rabbitmq::params::ldap_log,
|
|
$stomp_port = $rabbitmq::params::stomp_port,
|
|
$version = $rabbitmq::params::version,
|
|
$wipe_db_on_cookie_change = $rabbitmq::params::wipe_db_on_cookie_change,
|
|
$cluster_partition_handling = $rabbitmq::params::cluster_partition_handling,
|
|
$environment_variables = $rabbitmq::params::environment_variables,
|
|
$config_variables = $rabbitmq::params::config_variables,
|
|
$config_kernel_variables = $rabbitmq::params::config_kernel_variables,
|
|
$config_rabbitmq_management_variables = $rabbitmq::config_rabbitmq_management_variables,
|
|
$key_content = undef,
|
|
) inherits rabbitmq::params {
|
|
|
|
validate_bool($admin_enable)
|
|
# Validate install parameters.
|
|
validate_re($package_apt_pin, '^(|\d+)$')
|
|
validate_string($package_ensure)
|
|
validate_string($package_gpg_key)
|
|
validate_string($package_name)
|
|
validate_string($package_provider)
|
|
validate_bool($repos_ensure)
|
|
validate_re($version, '^\d+\.\d+\.\d+(-\d+)*$') # Allow 3 digits and optional -n postfix.
|
|
# Validate config parameters.
|
|
validate_re($cluster_node_type, '^(ram|disc|disk)$') # Both disc and disk are valid http://www.rabbitmq.com/clustering.html
|
|
validate_array($cluster_nodes)
|
|
validate_string($config)
|
|
validate_absolute_path($config_path)
|
|
validate_bool($config_cluster)
|
|
validate_bool($config_stomp)
|
|
validate_string($default_user)
|
|
validate_string($default_pass)
|
|
validate_bool($delete_guest_user)
|
|
validate_string($env_config)
|
|
validate_absolute_path($env_config_path)
|
|
validate_string($erlang_cookie)
|
|
validate_re($management_port, '\d+')
|
|
validate_string($node_ip_address)
|
|
validate_absolute_path($plugin_dir)
|
|
validate_re($port, ['\d+','UNSET'])
|
|
validate_re($stomp_port, '\d+')
|
|
validate_bool($wipe_db_on_cookie_change)
|
|
validate_bool($tcp_keepalive)
|
|
# Validate service parameters.
|
|
validate_re($service_ensure, '^(running|stopped)$')
|
|
validate_bool($service_manage)
|
|
validate_string($service_name)
|
|
validate_bool($ssl)
|
|
validate_bool($ssl_only)
|
|
validate_string($ssl_cacert)
|
|
validate_string($ssl_cert)
|
|
validate_string($ssl_key)
|
|
validate_re($ssl_port, '\d+')
|
|
validate_re($ssl_management_port, '\d+')
|
|
validate_string($ssl_stomp_port)
|
|
validate_re($ssl_stomp_port, '\d+')
|
|
validate_bool($stomp_ensure)
|
|
validate_bool($ldap_auth)
|
|
validate_string($ldap_server)
|
|
validate_string($ldap_user_dn_pattern)
|
|
validate_bool($ldap_use_ssl)
|
|
validate_re($ldap_port, '\d+')
|
|
validate_bool($ldap_log)
|
|
validate_hash($environment_variables)
|
|
validate_hash($config_variables)
|
|
validate_hash($config_kernel_variables)
|
|
validate_hash($config_rabbitmq_management_variables)
|
|
|
|
if $ssl_only and ! $ssl {
|
|
fail('$ssl_only => true requires that $ssl => true')
|
|
}
|
|
|
|
if $config_stomp and $ssl_stomp_port and ! $ssl {
|
|
warning('$ssl_stomp_port requires that $ssl => true and will be ignored')
|
|
}
|
|
|
|
# This needs to happen here instead of params.pp because
|
|
# $package_source needs to override the constructed value in params.pp
|
|
if $package_source { # $package_source was specified by user so use that one
|
|
$real_package_source = $package_source
|
|
# NOTE(bogdando) do not enforce the source value for yum provider #MODULES-1631
|
|
} elsif $package_provider != 'yum' {
|
|
# package_source was not specified, so construct it, unless the provider is 'yum'
|
|
case $::osfamily {
|
|
'RedHat', 'SUSE': {
|
|
$base_version = regsubst($version,'^(.*)-\d$','\1')
|
|
$real_package_source = "http://www.rabbitmq.com/releases/rabbitmq-server/v${base_version}/rabbitmq-server-${version}.noarch.rpm"
|
|
}
|
|
default: { # Archlinux and Debian
|
|
$real_package_source = ''
|
|
}
|
|
}
|
|
} else { # for yum provider, use the source as is
|
|
$real_package_source = $package_source
|
|
}
|
|
|
|
include '::rabbitmq::install'
|
|
include '::rabbitmq::config'
|
|
include '::rabbitmq::service'
|
|
include '::rabbitmq::management'
|
|
|
|
if $manage_repos != undef {
|
|
warning('$manage_repos is now deprecated. Please use $repos_ensure instead')
|
|
}
|
|
|
|
if $manage_repos != false {
|
|
case $::osfamily {
|
|
'RedHat', 'SUSE':
|
|
{ include '::rabbitmq::repo::rhel' }
|
|
'Debian': {
|
|
class { '::rabbitmq::repo::apt' :
|
|
key_source => $package_gpg_key,
|
|
key_content => $key_content,
|
|
}
|
|
}
|
|
default:
|
|
{ }
|
|
}
|
|
}
|
|
|
|
# Start epmd as rabbitmq so it doesn't run as root when installing plugins
|
|
exec { 'epmd_daemon':
|
|
command => 'epmd -daemon',
|
|
path => '/bin:/sbin:/usr/bin:/usr/sbin',
|
|
user => 'rabbitmq',
|
|
group => 'rabbitmq',
|
|
unless => 'pgrep epmd',
|
|
}
|
|
|
|
if $admin_enable and $service_manage {
|
|
include '::rabbitmq::install::rabbitmqadmin'
|
|
|
|
rabbitmq_plugin { 'rabbitmq_management':
|
|
ensure => present,
|
|
require => Class['rabbitmq::install'],
|
|
notify => Class['rabbitmq::service'],
|
|
provider => 'rabbitmqplugins'
|
|
}
|
|
|
|
Class['::rabbitmq::service'] -> Class['::rabbitmq::install::rabbitmqadmin']
|
|
}
|
|
|
|
if $stomp_ensure {
|
|
rabbitmq_plugin { 'rabbitmq_stomp':
|
|
ensure => present,
|
|
require => Class['rabbitmq::install'],
|
|
notify => Class['rabbitmq::service'],
|
|
provider => 'rabbitmqplugins'
|
|
}
|
|
}
|
|
|
|
if ($ldap_auth) {
|
|
rabbitmq_plugin { 'rabbitmq_auth_backend_ldap':
|
|
ensure => present,
|
|
require => Class['rabbitmq::install'],
|
|
notify => Class['rabbitmq::service'],
|
|
provider => 'rabbitmqplugins',
|
|
}
|
|
}
|
|
|
|
anchor { 'rabbitmq::begin': }
|
|
anchor { 'rabbitmq::end': }
|
|
|
|
Anchor['rabbitmq::begin'] -> Class['::rabbitmq::install']
|
|
-> Class['::rabbitmq::config'] ~> Class['::rabbitmq::service']
|
|
-> Class['::rabbitmq::management'] -> Anchor['rabbitmq::end']
|
|
|
|
# Make sure the various providers have their requirements in place.
|
|
Class['::rabbitmq::install'] -> Exec['epmd_daemon']
|
|
-> Rabbitmq_plugin<| |> -> Rabbitmq_exchange<| |>
|
|
}
|