Revert "Update 3rdparty rabbitmq module"
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / manifests / init.pp
index 233d391..4e115f9 100644 (file)
-# rabbitmq
-#
-# @summary A module to manage RabbitMQ
-#
-# @example Basic usage
-#  include rabbitmq
-#
-# @example rabbitmq class
-#  class { 'rabbitmq':
-#    service_manage    => false,
-#    port              => '5672',
-#    delete_guest_user => true,
-#  }
-#
-# @example Offline installation from local mirror:
-#
-#  class { 'rabbitmq':
-#    key_content     => template('openstack/rabbit.pub.key'),
-#    package_gpg_key => '/tmp/rabbit.pub.key',
-#  }
-#
-# @example Use external package key source for any (apt/rpm) package provider:
-#  class { 'rabbitmq':
-#    package_gpg_key => 'http://www.some_site.some_domain/some_key.pub.key',
-#  }
-#
-# @example To use RabbitMQ Environment Variables, use the parameters `environment_variables` e.g.:
-#
-#  class { 'rabbitmq':
-#    port                  => '5672',
-#    environment_variables => {
-#      'NODENAME'    => 'node01',
-#      'SERVICENAME' => 'RabbitMQ'
-#    }
-#  }
-#
-# @example Change RabbitMQ Config Variables in rabbitmq.config:
-#
-#  class { 'rabbitmq':
-#    port             => '5672',
-#    config_variables => {
-#      'hipe_compile' => true,
-#      'frame_max'    => 131072,
-#      'log_levels'   => "[{connection, info}]"
-#    }
-#  }
-#
-# @example Change Erlang Kernel Config Variables in rabbitmq.config
-#  class { 'rabbitmq':
-#    port                    => '5672',
-#    config_kernel_variables => {
-#      'inet_dist_listen_min' => 9100,
-#      'inet_dist_listen_max' => 9105,
-#    }
-#  }
-# @example Change Management Plugin Config Variables in rabbitmq.config
-#  class { 'rabbitmq':
-#    config_management_variables => {
-#      'rates_mode' => 'basic',
-#    }
-#  }
-#
-# @example Change Additional Config Variables in rabbitmq.config
-#  class { 'rabbitmq':
-#    config_additional_variables => {
-#      'autocluster' => '[{consul_service, "rabbit"},{cluster_name, "rabbit"}]',
-#      'foo'         => '[{bar, "baz"}]'
-#    }
-#  }
-#  This will result in the following config appended to the config file:
-#  {autocluster, [{consul_service, "rabbit"},{cluster_name, "rabbit"}]},
-#   {foo, [{bar, "baz"}]}
-#  (This is required for the [autocluster plugin](https://github.com/aweber/rabbitmq-autocluster)
-#
-# @example Use RabbitMQ clustering facilities
-#  class { 'rabbitmq':
-#    config_cluster           => true,
-#    cluster_nodes            => ['rabbit1', 'rabbit2'],
-#    cluster_node_type        => 'ram',
-#    erlang_cookie            => 'A_SECRET_COOKIE_STRING',
-#    wipe_db_on_cookie_change => true,
-#  }
-#
-# @param admin_enable If enabled sets up the management interface/plugin for RabbitMQ.
-# @param auth_backends An array specifying authorization/authentication backend to use. Single quotes should be placed around array entries, ex. ['{foo, baz}', 'baz'] Defaults to [rabbit_auth_backend_internal], and if using LDAP defaults to [rabbit_auth_backend_internal, rabbit_auth_backend_ldap].
-# @param cluster_node_type Choose between disc and ram nodes.
-# @param cluster_nodes An array of nodes for clustering.
-# @param cluster_partition_handling Value to set for `cluster_partition_handling` RabbitMQ configuration variable.
-# @param collect_statistics_interval Set the collect_statistics_interval in rabbitmq.config
-# @param config The file to use as the rabbitmq.config template.
-# @param config_additional_variables Additional config variables in rabbitmq.config
-# @param config_cluster Enable or disable clustering support.
-# @param config_kernel_variables Hash of Erlang kernel configuration variables to set (see [Variables Configurable in rabbitmq.config](#variables-configurable-in-rabbitmq.config)).
-# @param config_path The path to write the RabbitMQ configuration file to.
-# @param config_ranch When true, suppress config directives needed for older (<3.6) RabbitMQ versions.
-# @param config_management_variables Hash of configuration variables for the [Management Plugin](https://www.rabbitmq.com/management.html).
-# @param config_stomp Enable or disable stomp.
-# @param config_shovel Enable or disable shovel.
-# @param config_shovel_statics Hash of static shovel configurations
-# @param config_variables To set config variables in rabbitmq.config
-# @param default_user Username to set for the `default_user` in rabbitmq.config.
-# @param default_pass Password to set for the `default_user` in rabbitmq.config.
-# @param delete_guest_user Controls whether default guest user is deleted.
-# @param env_config The template file to use for rabbitmq_env.config.
-# @param env_config_path The path to write the rabbitmq_env.config file to.
-# @param environment_variables RabbitMQ Environment Variables in rabbitmq_env.config
-# @param erlang_cookie The erlang cookie to use for clustering - must be the same between all nodes. This value has no default and must be
-#  set explicitly if using clustering. If you run Pacemaker and you don't want to use RabbitMQ buildin cluster, you can set config_cluster
-#  to 'False' and set 'erlang_cookie'.
-# @param file_limit Set rabbitmq file ulimit. Defaults to 16384. Only available on systems with `$::osfamily == 'Debian'` or
-#  `$::osfamily == 'RedHat'`.
-# @param heartbeat Set the heartbeat timeout interval, default is unset which uses the builtin server defaults of 60 seconds. Setting this
-# @param inetrc_config Template to use for the inetrc config
-# @param inetrc_config_path Path of the file to push the inetrc config to.
-# @param ipv6 Whether to listen on ipv6
-# @param interface Interface to bind to (sets tcp_listeners parameter). By default, bind to all interfaces
-#  to `0` will disable heartbeats.
-# @param key_content Uses content method for Debian OS family. Should be a template for apt::source class. Overrides `package_gpg_key`
-#  behavior, if enabled. Undefined by default.
-# @param ldap_auth Set to true to enable LDAP auth.
-# @param ldap_server LDAP server to use for auth.
-# @param ldap_user_dn_pattern User DN pattern for LDAP auth.
-# @param ldap_other_bind How to bind to the LDAP server. Defaults to 'anon'.
-# @param ldap_config_variables Hash of other LDAP config variables.
-# @param ldap_use_ssl Set to true to use SSL for the LDAP server.
-# @param ldap_port Numeric port for LDAP server.
-# @param ldap_log Set to true to log LDAP auth.
-# @param manage_python If enabled, on platforms that don't provide a Python 2 package by default, ensure that the python package is
-#  installed (for rabbitmqadmin). This will only apply if `admin_enable` and `service_manage` are set.
-# @param management_hostname The hostname for the RabbitMQ management interface.
-# @param management_port The port for the RabbitMQ management interface.
-# @param management_ip_address Allows you to set the IP for management interface to bind to separately. Set to 127.0.0.1 to bind to
-#  localhost only, or 0.0.0.0 to bind to all interfaces.
-# @param management_ssl Enable/Disable SSL for the management port. Has an effect only if ssl => true.
-# @param node_ip_address Allows you to set the IP for RabbitMQ service to bind to. Set to 127.0.0.1 to bind to localhost only, or 0.0.0.0
-#  to bind to all interfaces.
-# @param package_apt_pin Whether to pin the package to a particular source
-# @param package_ensure Determines the ensure state of the package.  Set to installed by default, but could be changed to latest.
-# @param package_gpg_key RPM package GPG key to import. Uses source method. Should be a URL for Debian/RedHat OS family, or a file name for
-#  RedHat OS family. Set to https://packagecloud.io/gpg.key by default. Note, that `key_content`, if specified, would override this
-#  parameter for Debian OS family.
-# @param package_name Name(s) of the package(s) to install
-# @param port The RabbitMQ port.
-# @param repos_ensure Ensure that a repo with the official (and newer) RabbitMQ package is configured, along with its signing key.
-#  Defaults to false (use system packages). This does not ensure that soft dependencies (like EPEL on RHEL systems) are present.
-# @param service_ensure The state of the service.
-# @param service_manage Determines if the service is managed.
-# @param service_name The name of the service to manage.
-# @param $service_restart. Default defined in param.pp. Whether to resetart the service on config change.
-# @param ssl Configures the service for using SSL.
-#  port => UNSET
-# @param ssl_cacert CA cert path to use for SSL.
-# @param ssl_cert Cert to use for SSL.
-# @param ssl_cert_password Password used when generating CSR.
-# @param ssl_depth SSL verification depth.
-# @param ssl_dhfile Use this dhparam file [example: generate with `openssl dhparam -out /etc/rabbitmq/ssl/dhparam.pem 2048`
-# @param ssl_erl_dist Whether to use the erlang package's SSL (relies on the ssl_erl_path fact)
-# @param ssl_honor_cipher_order Force use of server cipher order
-# @param ssl_interface Interface for SSL listener to bind to
-# @param ssl_key Key to use for SSL.
-# @param ssl_only Configures the service to only use SSL.  No cleartext TCP listeners will be created. Requires that ssl => true and
-# @param ssl_management_port SSL management port.
-# @param ssl_port SSL port for RabbitMQ
-# @param ssl_reuse_sessions Reuse ssl sessions
-# @param ssl_secure_renegotiate Use ssl secure renegotiate
-# @param ssl_stomp_port SSL stomp port.
-# @param ssl_verify rabbitmq.config SSL verify setting.
-# @param ssl_fail_if_no_peer_cert rabbitmq.config `fail_if_no_peer_cert` setting.
-# @param ssl_management_verify rabbitmq.config SSL verify setting for rabbitmq_management.
-# @param ssl_manaagement_fail_if_no_peer_cert rabbitmq.config `fail_if_no_peer_cert` setting for rabbitmq_management.
-# @param ssl_versions Choose which SSL versions to enable. Example: `['tlsv1.2', 'tlsv1.1']` Note that it is recommended to disable `sslv3
-#  and `tlsv1` to prevent against POODLE and BEAST attacks. Please see the [RabbitMQ SSL](https://www.rabbitmq.com/ssl.html) documentation
-#  for more information.
-# @param ssl_ciphers Support only a given list of SSL ciphers. Example: `['dhe_rsa,aes_256_cbc,sha','dhe_dss,aes_256_cbc,sha',
-#  'ecdhe_rsa,aes_256_cbc,sha']`. Supported ciphers in your install can be listed with: rabbitmqctl eval 'ssl:cipher_suites().'
-#  Functionality can be tested with cipherscan or similar tool: https://github.com/jvehent/cipherscan.git
-# @param stomp_port The port to use for Stomp.
-# @param stomp_ssl_only Configures STOMP to only use SSL.  No cleartext STOMP TCP listeners will be created. Requires setting
-#  ssl_stomp_port also.
-# @param stomp_ensure Enable to install the stomp plugin.
-# @param tcp_backlog The size of the backlog on TCP connections.
-# @param tcp_keepalive Enable TCP connection keepalive for RabbitMQ service.
-# @param tcp_recbuf Corresponds to recbuf in RabbitMQ `tcp_listen_options`
-# @param tcp_sndbuf Integer, corresponds to sndbuf in RabbitMQ `tcp_listen_options`
-# @param wipe_db_on_cookie_change Boolean to determine if we should DESTROY AND DELETE the RabbitMQ database.
-# @param rabbitmq_user OS dependent, default defined in param.pp. The system user the rabbitmq daemon runs as.
-# @param rabbitmq_group OS dependent, default defined in param.pp. The system group the rabbitmq daemon runs as.
-# @param rabbitmq_home OS dependent. default defined in param.pp. The home directory of the rabbitmq deamon.
-# @param $rabbitmqadmin_package OS dependent. default defined in param.pp. If undef: install rabbitmqadmin via archive, otherwise via package
-# @param $archive_options. default defined in param.pp.  Extra options to Archive resource to download rabbitmqadmin file
-# @param $loopback_users. default defined in param.pp. This option configures a list of users to allow access via the loopback interfaces
+# Main rabbitmq class
 class rabbitmq(
-  Boolean $admin_enable                                                                            = $rabbitmq::params::admin_enable,
-  Enum['ram', 'disk', 'disc'] $cluster_node_type                                                   = $rabbitmq::params::cluster_node_type,
-  Array $cluster_nodes                                                                             = $rabbitmq::params::cluster_nodes,
-  String $config                                                                                   = $rabbitmq::params::config,
-  Boolean $config_cluster                                                                          = $rabbitmq::params::config_cluster,
-  Stdlib::Absolutepath $config_path                                                                = $rabbitmq::params::config_path,
-  Boolean $config_ranch                                                                            = $rabbitmq::params::config_ranch,
-  Boolean $config_stomp                                                                            = $rabbitmq::params::config_stomp,
-  Boolean $config_shovel                                                                           = $rabbitmq::params::config_shovel,
-  Hash $config_shovel_statics                                                                      = $rabbitmq::params::config_shovel_statics,
-  String $default_user                                                                             = $rabbitmq::params::default_user,
-  String $default_pass                                                                             = $rabbitmq::params::default_pass,
-  Boolean $delete_guest_user                                                                       = $rabbitmq::params::delete_guest_user,
-  String $env_config                                                                               = $rabbitmq::params::env_config,
-  Stdlib::Absolutepath $env_config_path                                                            = $rabbitmq::params::env_config_path,
-  Optional[String] $erlang_cookie                                                                  = undef,
-  Optional[String] $interface                                                                      = undef,
-  Optional[String] $management_ip_address                                                          = undef,
-  Integer[1, 65535] $management_port                                                               = $rabbitmq::params::management_port,
-  Boolean $management_ssl                                                                          = $rabbitmq::params::management_ssl,
-  Optional[String] $management_hostname                                                            = undef,
-  Optional[String] $node_ip_address                                                                = undef,
-  Optional[Variant[Numeric, String]] $package_apt_pin                                              = undef,
-  String $package_ensure                                                                           = $rabbitmq::params::package_ensure,
-  Optional[String] $package_gpg_key                                                                = $rabbitmq::params::package_gpg_key,
-  Variant[String, Array] $package_name                                                             = $rabbitmq::params::package_name,
-  Optional[String] $package_source                                                                 = undef,
-  Optional[String] $package_provider                                                               = undef,
-  Boolean $repos_ensure                                                                            = $rabbitmq::params::repos_ensure,
-  Boolean $manage_python                                                                           = $rabbitmq::params::manage_python,
-  String $rabbitmq_user                                                                            = $rabbitmq::params::rabbitmq_user,
-  String $rabbitmq_group                                                                           = $rabbitmq::params::rabbitmq_group,
-  Stdlib::Absolutepath $rabbitmq_home                                                              = $rabbitmq::params::rabbitmq_home,
-  Integer $port                                                                                    = $rabbitmq::params::port,
-  Boolean $tcp_keepalive                                                                           = $rabbitmq::params::tcp_keepalive,
-  Integer $tcp_backlog                                                                             = $rabbitmq::params::tcp_backlog,
-  Optional[Integer] $tcp_sndbuf                                                                    = undef,
-  Optional[Integer] $tcp_recbuf                                                                    = undef,
-  Optional[Integer] $heartbeat                                                                     = undef,
-  Enum['running', 'stopped'] $service_ensure                                                       = $rabbitmq::params::service_ensure,
-  Boolean $service_manage                                                                          = $rabbitmq::params::service_manage,
-  String $service_name                                                                             = $rabbitmq::params::service_name,
-  Boolean $ssl                                                                                     = $rabbitmq::params::ssl,
-  Boolean $ssl_only                                                                                = $rabbitmq::params::ssl_only,
-  Optional[Stdlib::Absolutepath] $ssl_cacert                                                       = undef,
-  Optional[Stdlib::Absolutepath] $ssl_cert                                                         = undef,
-  Optional[Stdlib::Absolutepath] $ssl_key                                                          = undef,
-  Optional[Integer] $ssl_depth                                                                     = undef,
-  Optional[String] $ssl_cert_password                                                              = undef,
-  Integer[1, 65535] $ssl_port                                                                      = $rabbitmq::params::ssl_port,
-  Optional[String] $ssl_interface                                                                  = undef,
-  Integer[1, 65535] $ssl_management_port                                                           = $rabbitmq::params::ssl_management_port,
-  Integer[1, 65535] $ssl_stomp_port                                                                = $rabbitmq::params::ssl_stomp_port,
-  Enum['verify_none','verify_peer'] $ssl_verify                                                    = $rabbitmq::params::ssl_verify,
-  Boolean $ssl_fail_if_no_peer_cert                                                                = $rabbitmq::params::ssl_fail_if_no_peer_cert,
-  Enum['verify_none','verify_peer'] $ssl_management_verify                                         = $rabbitmq::params::ssl_management_verify,
-  Boolean $ssl_management_fail_if_no_peer_cert                                                     = $rabbitmq::params::ssl_management_fail_if_no_peer_cert,
-  Optional[Array] $ssl_versions                                                                    = undef,
-  Boolean $ssl_secure_renegotiate                                                                  = $rabbitmq::params::ssl_secure_renegotiate,
-  Boolean $ssl_reuse_sessions                                                                      = $rabbitmq::params::ssl_reuse_sessions,
-  Boolean $ssl_honor_cipher_order                                                                  = $rabbitmq::params::ssl_honor_cipher_order,
-  Optional[Stdlib::Absolutepath] $ssl_dhfile                                                       = undef,
-  Array $ssl_ciphers                                                                               = $rabbitmq::params::ssl_ciphers,
-  Boolean $stomp_ensure                                                                            = $rabbitmq::params::stomp_ensure,
-  Boolean $ldap_auth                                                                               = $rabbitmq::params::ldap_auth,
-  String $ldap_server                                                                              = $rabbitmq::params::ldap_server,
-  Optional[String] $ldap_user_dn_pattern                                                           = $rabbitmq::params::ldap_user_dn_pattern,
-  String $ldap_other_bind                                                                          = $rabbitmq::params::ldap_other_bind,
-  Boolean $ldap_use_ssl                                                                            = $rabbitmq::params::ldap_use_ssl,
-  Integer[1, 65535] $ldap_port                                                                     = $rabbitmq::params::ldap_port,
-  Boolean $ldap_log                                                                                = $rabbitmq::params::ldap_log,
-  Hash $ldap_config_variables                                                                      = $rabbitmq::params::ldap_config_variables,
-  Integer[1, 65535] $stomp_port                                                                    = $rabbitmq::params::stomp_port,
-  Boolean $stomp_ssl_only                                                                          = $rabbitmq::params::stomp_ssl_only,
-  Boolean $wipe_db_on_cookie_change                                                                = $rabbitmq::params::wipe_db_on_cookie_change,
-  String $cluster_partition_handling                                                               = $rabbitmq::params::cluster_partition_handling,
-  Variant[Integer[-1],Enum['unlimited'],Pattern[/^(infinity|\d+(:(infinity|\d+))?)$/]] $file_limit = $rabbitmq::params::file_limit,
-  Hash $environment_variables                                                                      = $rabbitmq::params::environment_variables,
-  Hash $config_variables                                                                           = $rabbitmq::params::config_variables,
-  Hash $config_kernel_variables                                                                    = $rabbitmq::params::config_kernel_variables,
-  Hash $config_management_variables                                                                = $rabbitmq::params::config_management_variables,
-  Hash $config_additional_variables                                                                = $rabbitmq::params::config_additional_variables,
-  Optional[Array] $auth_backends                                                                   = undef,
-  Optional[String] $key_content                                                                    = undef,
-  Optional[Integer] $collect_statistics_interval                                                   = undef,
-  Boolean $ipv6                                                                                    = $rabbitmq::params::ipv6,
-  String $inetrc_config                                                                            = $rabbitmq::params::inetrc_config,
-  Stdlib::Absolutepath $inetrc_config_path                                                         = $rabbitmq::params::inetrc_config_path,
-  Boolean $ssl_erl_dist                                                                            = $rabbitmq::params::ssl_erl_dist,
-  Optional[String] $rabbitmqadmin_package                                                          = $rabbitmq::params::rabbitmqadmin_package,
-  Array $archive_options                                                                           = $rabbitmq::params::archive_options,
-  Array $loopback_users                                                                            = $rabbitmq::params::loopback_users,
-  Boolean $service_restart                                                                         = $rabbitmq::params::service_restart,
+  $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 $stomp_ssl_only and ! $ssl_stomp_port  {
-    fail('$stomp_ssl_only requires that $ssl_stomp_port be set')
+  if $config_stomp and $ssl_stomp_port and ! $ssl {
+    warning('$ssl_stomp_port requires that $ssl => true and will be ignored')
   }
 
   if $ssl_versions {
-    unless $ssl {
+    if $ssl {
+      validate_array($ssl_versions)
+    } else {
       fail('$ssl_versions requires that $ssl => true')
     }
   }
 
-  if $repos_ensure {
-    case $facts['os']['family'] {
-      'RedHat': {
-        contain rabbitmq::repo::rhel
-        Class['rabbitmq::repo::rhel'] -> Class['rabbitmq::install']
-      }
-      'Debian': {
-        contain rabbitmq::repo::apt
-        Class['rabbitmq::repo::apt'] -> Class['rabbitmq::install']
+  # 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: {
+      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')
   }
 
-  contain rabbitmq::install
-  contain rabbitmq::config
-  contain rabbitmq::service
-  contain rabbitmq::management
+  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'
+    include '::rabbitmq::install::rabbitmqadmin'
 
     rabbitmq_plugin { 'rabbitmq_management':
-      ensure   => present,
-      notify   => Class['rabbitmq::service'],
-      provider => 'rabbitmqplugins',
+      ensure  => present,
+      require => Class['rabbitmq::install'],
+      notify  => Class['rabbitmq::service'],
     }
 
-    Class['rabbitmq::service'] -> Class['rabbitmq::install::rabbitmqadmin']
-    Class['rabbitmq::install::rabbitmqadmin'] -> Rabbitmq_exchange<| |>
+    Class['::rabbitmq::service'] -> Class['::rabbitmq::install::rabbitmqadmin']
+    Class['::rabbitmq::install::rabbitmqadmin'] -> Rabbitmq_exchange<| |>
   }
 
   if $stomp_ensure {
     rabbitmq_plugin { 'rabbitmq_stomp':
-      ensure => present,
-      notify => Class['rabbitmq::service'],
+      ensure  => present,
+      require => Class['rabbitmq::install'],
+      notify  => Class['rabbitmq::service'],
     }
   }
 
   if ($ldap_auth) {
     rabbitmq_plugin { 'rabbitmq_auth_backend_ldap':
-      ensure => present,
-      notify => Class['rabbitmq::service'],
-    }
-  }
-
-  if ($config_shovel) {
-    rabbitmq_plugin { 'rabbitmq_shovel':
-      ensure   => present,
-      notify   => Class['rabbitmq::service'],
-      provider => 'rabbitmqplugins',
-    }
-
-    if ($admin_enable) {
-      rabbitmq_plugin { 'rabbitmq_shovel_management':
-        ensure   => present,
-        notify   => Class['rabbitmq::service'],
-        provider => 'rabbitmqplugins',
-      }
+      ensure  => present,
+      require => Class['rabbitmq::install'],
+      notify  => Class['rabbitmq::service'],
     }
   }
 
-  if ($service_restart) {
-    Class['rabbitmq::config'] ~> Class['rabbitmq::service']
-  }
+  anchor { 'rabbitmq::begin': }
+  anchor { 'rabbitmq::end': }
 
-  Class['rabbitmq::install']
-  -> Class['rabbitmq::config']
-  -> Class['rabbitmq::service']
-  -> Class['rabbitmq::management']
+  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<| |>
+  Class['::rabbitmq::install'] -> Rabbitmq_plugin<| |>
 
 }