--- /dev/null
+# 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,
+ $interface = $rabbitmq::params::interface,
+ $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,
+ $rabbitmq_user = $rabbitmq::params::rabbitmq_user,
+ $rabbitmq_group = $rabbitmq::params::rabbitmq_group,
+ $rabbitmq_home = $rabbitmq::params::rabbitmq_home,
+ $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_interface = $rabbitmq::params::ssl_interface,
+ $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,
+ $ssl_versions = $rabbitmq::params::ssl_versions,
+ $ssl_ciphers = $rabbitmq::params::ssl_ciphers,
+ $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_other_bind = $rabbitmq::params::ldap_other_bind,
+ $ldap_use_ssl = $rabbitmq::params::ldap_use_ssl,
+ $ldap_port = $rabbitmq::params::ldap_port,
+ $ldap_log = $rabbitmq::params::ldap_log,
+ $ldap_config_variables = $rabbitmq::params::ldap_config_variables,
+ $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,
+ $file_limit = $rabbitmq::params::file_limit,
+ $environment_variables = $rabbitmq::params::environment_variables,
+ $config_variables = $rabbitmq::params::config_variables,
+ $config_kernel_variables = $rabbitmq::params::config_kernel_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)
+ if ! is_integer($management_port) {
+ validate_re($management_port, '\d+')
+ }
+ validate_string($node_ip_address)
+ validate_absolute_path($plugin_dir)
+ if ! is_integer($port) {
+ validate_re($port, ['\d+','UNSET'])
+ }
+ if ! is_integer($stomp_port) {
+ validate_re($stomp_port, '\d+')
+ }
+ validate_bool($wipe_db_on_cookie_change)
+ validate_bool($tcp_keepalive)
+ if ! is_integer($file_limit) {
+ validate_re($file_limit, '^(unlimited|infinity)$', '$file_limit must be an integer, \'unlimited\', or \'infinity\'.')
+ }
+ # 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_array($ssl_ciphers)
+ if ! is_integer($ssl_port) {
+ validate_re($ssl_port, '\d+')
+ }
+ if ! is_integer($ssl_management_port) {
+ validate_re($ssl_management_port, '\d+')
+ }
+ if ! is_integer($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_string($ldap_other_bind)
+ validate_hash($ldap_config_variables)
+ 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)
+
+ 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')
+ }
+
+ if $ssl_versions {
+ if $ssl {
+ validate_array($ssl_versions)
+ } else {
+ fail('$ssl_versions requires that $ssl => true')
+ }
+ }
+
+ # 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:
+ { }
+ }
+ }
+
+ if $admin_enable and $service_manage {
+ include '::rabbitmq::install::rabbitmqadmin'
+
+ rabbitmq_plugin { 'rabbitmq_management':
+ ensure => present,
+ require => Class['rabbitmq::install'],
+ notify => Class['rabbitmq::service'],
+ }
+
+ Class['::rabbitmq::service'] -> Class['::rabbitmq::install::rabbitmqadmin']
+ Class['::rabbitmq::install::rabbitmqadmin'] -> Rabbitmq_exchange<| |>
+ }
+
+ if $stomp_ensure {
+ rabbitmq_plugin { 'rabbitmq_stomp':
+ ensure => present,
+ require => Class['rabbitmq::install'],
+ notify => Class['rabbitmq::service'],
+ }
+ }
+
+ if ($ldap_auth) {
+ rabbitmq_plugin { 'rabbitmq_auth_backend_ldap':
+ ensure => present,
+ require => Class['rabbitmq::install'],
+ notify => Class['rabbitmq::service'],
+ }
+ }
+
+ 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'] -> Rabbitmq_plugin<| |>
+
+}