From 725b82463a37ddd6522aecbb6ac9b680391e646d Mon Sep 17 00:00:00 2001 From: William Yardley Date: Tue, 9 Aug 2016 13:17:05 -0700 Subject: [PATCH 1/2] Extensive changes to how package and repo management works. Remove EL5 support. Remove tests for ancient RMQ version. Rework how $package_gpg_key is used. Remove some checks that tie to deprecated params. Default $repos_ensure to false. Switch to integers for ports and other numeric values --- README.md | 79 ++----- manifests/config.pp | 8 +- manifests/init.pp | 80 ++----- manifests/install.pp | 19 +- manifests/params.pp | 41 +--- manifests/repo/apt.pp | 9 +- manifests/repo/rhel.pp | 27 ++- manifests/server.pp | 6 +- metadata.json | 2 - spec/acceptance/class_spec.rb | 60 +++--- spec/acceptance/delete_guest_user_spec.rb | 2 +- spec/acceptance/nodesets/centos-6-x64.yml | 10 + spec/acceptance/parameter_spec.rb | 2 +- spec/acceptance/policy_spec.rb | 2 +- spec/acceptance/queue_spec.rb | 8 +- spec/acceptance/user_spec.rb | 2 +- spec/acceptance/vhost_spec.rb | 2 +- spec/acceptance/zz281_spec.rb | 197 ----------------- spec/classes/rabbitmq_spec.rb | 248 +++++----------------- spec/spec_helper_local.rb | 3 +- 20 files changed, 191 insertions(+), 616 deletions(-) create mode 100644 spec/acceptance/nodesets/centos-6-x64.yml delete mode 100644 spec/acceptance/zz281_spec.rb diff --git a/README.md b/README.md index f80cd187f..aad960367 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,9 @@ This module manages RabbitMQ (www.rabbitmq.com) The rabbitmq module sets up rabbitmq and has a number of providers to manage everything from vhosts to exchanges after setup. -This module has been tested against 2.7.1 and is known to not support -all features against earlier versions. +This module has been tested against 3.5.x and 3.6.x (as well as earlier +versions) and is known to not support all features against versions +prior to 2.7.1. ## Setup @@ -60,23 +61,6 @@ class { '::rabbitmq': } ``` -Or such as offline installation from intranet or local mirrors: - -```puppet -class { '::rabbitmq': - key_content => template('openstack/rabbit.pub.key'), - package_gpg_key => '/tmp/rabbit.pub.key', -} -``` - -And this one will use external package key source for any (apt/rpm) package provider: - -```puppet -class { '::rabbitmq': - package_gpg_key => 'http://www.some_site.some_domain/some_key.pub.key', -} -``` - ### Environment Variables To use RabbitMQ Environment Variables, use the parameters `environment_variables` e.g.: @@ -295,7 +279,7 @@ defaultsof 60 seconds. Setting this to `0` will disable heartbeats. ####`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. +class. Undefined by default. ####`ldap_auth` @@ -329,10 +313,6 @@ Numeric port for LDAP server. Boolean, set to true to log LDAP auth. -####`manage_repos` - -Boolean, whether or not to manage package repositories. - ####`management_ip_address` Will fall back to `node_ip_address` if not explicitly set; allows configuring @@ -364,12 +344,10 @@ Use 0.0.0.0 to bind to all interfaces. Determines the ensure state of the package. Set to installed by default, but could be changed to latest. -####`package_gpg_key` +###`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 http://www.rabbitmq.com/rabbitmq-signing-key-public.asc by default. -Note, that `key_content`, if specified, would override this parameter for Debian OS family. +This should generally be left as default. If using a package not signed by the +RabbitMQ signing key, you can use this parameter to override the expected key. ####`package_name` @@ -379,24 +357,16 @@ The name of the package to install. What provider to use to install the package. -####`package_source` - -Where should the package be installed from? - -On Debian- and Arch-based systems using the default package provider, -this parameter is ignored and the package is installed from the -rabbitmq repository, if enabled with manage_repo => true, or from the -system repository otherwise. If you want to use dpkg as the -package_provider, you must specify a local package_source. - -####`plugin_dir` - -Location of RabbitMQ plugins. - ####`port` The RabbitMQ port. +####`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. + ####`service_ensure` The state of the service. @@ -497,15 +467,6 @@ Integer, corresponds to recbuf in RabbitMQ `tcp_listen_options` Integer, corresponds to sndbuf in RabbitMQ `tcp_listen_options` -####`version` - -Sets the version to install. - -On Debian- and Arch-based operating systems, the version parameter is -ignored and the latest version is installed from the rabbitmq -repository, if enabled with manage_repo => true, or from the system -repository otherwise. - ####`wipe_db_on_cookie_change` Boolean to determine if we should DESTROY AND DELETE the RabbitMQ database. @@ -701,20 +662,24 @@ This module has been built on and tested against Puppet 3.x. The module has been tested on: -* RedHat Enterprise Linux 5/6 -* Debian 6/7 -* CentOS 5/6 +* RedHat Enterprise Linux 6/7 +* Debian 7/8 +* CentOS 6/7 * Ubuntu 12.04/14.04 Testing on other platforms has been light and cannot be guaranteed. +Support for EL / CentOS 5 is deprecated. ### Apt module compatibility -While this module supports both 1.x and 2.x versions of the puppetlabs-apt module, it does not support puppetlabs-apt 2.0.0 or 2.0.1. +While this module supports both 1.x and 2.x versions of the +puppetlabs-apt module, it does not support puppetlabs-apt 2.0.0 or +2.0.1. ### Module dependencies -If running CentOS/RHEL, and using the yum provider, ensure the epel repo is present. +If running CentOS/RHEL, ensure the epel repo, or another repo containing +a suitable Erlang version, is present. To have a suitable erlang version installed on RedHat and Debian systems, you have to install another puppet module from http://forge.puppetlabs.com/garethr/erlang with: diff --git a/manifests/config.pp b/manifests/config.pp index e0de44c81..1c5d84250 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -22,7 +22,6 @@ $management_ssl = $rabbitmq::management_ssl $management_hostname = $rabbitmq::management_hostname $node_ip_address = $rabbitmq::node_ip_address - $plugin_dir = $rabbitmq::plugin_dir $rabbitmq_user = $rabbitmq::rabbitmq_user $rabbitmq_group = $rabbitmq::rabbitmq_group $rabbitmq_home = $rabbitmq::rabbitmq_home @@ -118,8 +117,11 @@ } # Get ranch (socket acceptor pool) availability, - # use init class variable for that since version from the fact comes too late. - $ranch = versioncmp($rabbitmq::version, '3.6') >= 0 + # Now that we have to rely on the fact, this may cause some chicken / egg + # or idempotency problems + if $::rabbitmq_version { + $ranch = versioncmp($::rabbitmq_version, '3.6') >= 0 + } file { '/etc/rabbitmq': ensure => directory, diff --git a/manifests/init.pp b/manifests/init.pp index 3a1408518..1b8145437 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -33,15 +33,13 @@ String $package_ensure = $rabbitmq::params::package_ensure, String $package_gpg_key = $rabbitmq::params::package_gpg_key, String $package_name = $rabbitmq::params::package_name, - Optional[String] $package_provider = $rabbitmq::params::package_provider, - $package_source = undef, + Optional[String] $package_source = undef, Boolean $repos_ensure = $rabbitmq::params::repos_ensure, $manage_repos = undef, - Stdlib::Absolutepath $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, + Integer $port = $rabbitmq::params::port, Boolean $tcp_keepalive = $rabbitmq::params::tcp_keepalive, Integer $tcp_backlog = $rabbitmq::params::tcp_backlog, Optional[Integer] $tcp_sndbuf = undef, @@ -59,8 +57,8 @@ Optional[String] $ssl_cert_password = undef, $ssl_port = $rabbitmq::params::ssl_port, Optional[String] $ssl_interface = undef, - $ssl_management_port = $rabbitmq::params::ssl_management_port, - $ssl_stomp_port = $rabbitmq::params::ssl_stomp_port, + Integer $ssl_management_port = $rabbitmq::params::ssl_management_port, + Integer $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, Optional[Array] $ssl_versions = undef, @@ -74,12 +72,12 @@ $ldap_port = $rabbitmq::params::ldap_port, Boolean $ldap_log = $rabbitmq::params::ldap_log, Hash $ldap_config_variables = $rabbitmq::params::ldap_config_variables, - $stomp_port = $rabbitmq::params::stomp_port, + Integer $stomp_port = $rabbitmq::params::stomp_port, Boolean $stomp_ssl_only = $rabbitmq::params::stomp_ssl_only, - $version = $rabbitmq::params::version, + Optional[String] $version = undef, Boolean $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, + Variant[Integer, String] $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, @@ -95,32 +93,11 @@ # Validate install parameters. validate_re($package_apt_pin, '^(|\d+)$') - validate_re($version, '^\d+\.\d+\.\d+(-\d+)*$') # Allow 3 digits and optional -n postfix. - # Validate config parameters. - if ! is_integer($management_port) { - validate_re($management_port, '\d+') - } - if $port and ! is_integer($port) { - validate_re($port, '\d+') - } - if ! is_integer($stomp_port) { - validate_re($stomp_port, '\d+') - } # using sprintf for conversion to string, because "${file_limit}" doesn't # pass lint, despite being nicer validate_re(sprintf('%s', $file_limit), '^(\d+|-1|unlimited|infinity)$', '$file_limit must be a positive integer, \'-1\', \'unlimited\', or \'infinity\'.') - 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_re($ldap_port, '\d+') if $ssl_only and ! $ssl { fail('$ssl_only => true requires that $ssl => true') @@ -136,53 +113,34 @@ } } - # 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" - } - 'OpenBSD': { - # We just use the default OpenBSD package from a mirror - $real_package_source = undef - } - default: { # Archlinux and Debian - $real_package_source = undef - } - } - } else { # for yum provider, use the source as is - $real_package_source = $package_source + if $package_source != undef { + warning('$package_source is now deprecated. Please use yum installation or handle outside of this module.') } if $manage_repos != undef { - warning('$manage_repos is now deprecated. Please use $repos_ensure instead') + warning('$manage_repos is now deprecated. Please use $repos_ensure instead.') } - if $manage_repos != false { + if $version != undef { + warning('$version is now deprecated, and will not have any effect. If you need to pin to a particular version, use $package_ensure') + } + + if $repos_ensure { case $::osfamily { - 'RedHat', 'SUSE': { - include '::rabbitmq::repo::rhel' - $package_require = undef + 'RedHat': { + class { '::rabbitmq::repo::rhel': + key_source => $package_gpg_key, + } } 'Debian': { class { '::rabbitmq::repo::apt' : key_source => $package_gpg_key, key_content => $key_content, } - $package_require = Class['apt::update'] } default: { - $package_require = undef } } - } else { - $package_require = undef } include '::rabbitmq::install' diff --git a/manifests/install.pp b/manifests/install.pp index a10fa655e..cd11ba6c0 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -1,26 +1,15 @@ # Class rabbitmq::install -# Ensures the rabbitmq-server exists +# Ensures that rabbitmq-server exists class rabbitmq::install { $package_ensure = $rabbitmq::package_ensure $package_name = $rabbitmq::package_name - $package_provider = $rabbitmq::package_provider - $package_require = $rabbitmq::package_require - $package_source = $rabbitmq::real_package_source $rabbitmq_group = $rabbitmq::rabbitmq_group package { 'rabbitmq-server': - ensure => $package_ensure, - name => $package_name, - provider => $package_provider, - notify => Class['rabbitmq::service'], - require => $package_require, - } - - if $package_source { - Package['rabbitmq-server'] { - source => $package_source, - } + ensure => $package_ensure, + name => $package_name, + notify => Class['rabbitmq::service'], } if $rabbitmq::environment_variables['MNESIA_BASE'] { diff --git a/manifests/params.pp b/manifests/params.pp index 279e7b96d..aa8f54bb1 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -1,64 +1,41 @@ - # Class: rabbitmq::params +# Class: rabbitmq::params # # The RabbitMQ Module configuration settings. # class rabbitmq::params { case $::osfamily { - 'Archlinux': { - $package_ensure = 'installed' - $package_name = 'rabbitmq' - $service_name = 'rabbitmq' - $package_provider = undef - $version = '3.1.3-1' - $rabbitmq_user = 'rabbitmq' - $rabbitmq_group = 'rabbitmq' - $rabbitmq_home = '/var/lib/rabbitmq' - $plugin_dir = "/usr/lib/rabbitmq/lib/rabbitmq_server-${version}/plugins" - } 'Debian': { $package_ensure = 'installed' $package_name = 'rabbitmq-server' $service_name = 'rabbitmq-server' - $package_provider = 'apt' - $version = '3.1.5' $rabbitmq_user = 'rabbitmq' $rabbitmq_group = 'rabbitmq' $rabbitmq_home = '/var/lib/rabbitmq' - $plugin_dir = "/usr/lib/rabbitmq/lib/rabbitmq_server-${version}/plugins" } 'OpenBSD': { $package_ensure = 'installed' $package_name = 'rabbitmq' $service_name = 'rabbitmq' - $package_provider = 'openbsd' - $version = '3.4.2' $rabbitmq_user = '_rabbitmq' $rabbitmq_group = '_rabbitmq' $rabbitmq_home = '/var/rabbitmq' - $plugin_dir = '/usr/local/lib/rabbitmq/plugins' } 'RedHat': { $package_ensure = 'installed' $package_name = 'rabbitmq-server' $service_name = 'rabbitmq-server' - $package_provider = 'yum' - $version = '3.1.5-1' $rabbitmq_user = 'rabbitmq' $rabbitmq_group = 'rabbitmq' $rabbitmq_home = '/var/lib/rabbitmq' - $plugin_dir = "/usr/lib/rabbitmq/lib/rabbitmq_server-${version}/plugins" } 'SUSE': { $package_ensure = 'installed' $package_name = 'rabbitmq-server' $service_name = 'rabbitmq-server' - $package_provider = 'zypper' - $version = '3.1.5-1' $rabbitmq_user = 'rabbitmq' $rabbitmq_group = 'rabbitmq' $rabbitmq_home = '/var/lib/rabbitmq' - $plugin_dir = "/usr/lib/rabbitmq/lib/rabbitmq_server-${version}/plugins" } default: { fail("The ${module_name} module is not supported on an ${::osfamily} based system.") @@ -67,11 +44,11 @@ #install $admin_enable = true - $management_port = '15672' + $management_port = 15672 $management_ssl = true $package_apt_pin = '' $package_gpg_key = 'https://www.rabbitmq.com/rabbitmq-release-signing-key.asc' - $repos_ensure = true + $repos_ensure = false $service_ensure = 'running' $service_manage = true #config @@ -88,14 +65,14 @@ $delete_guest_user = false $env_config = 'rabbitmq/rabbitmq-env.conf.erb' $env_config_path = '/etc/rabbitmq/rabbitmq-env.conf' - $port = '5672' + $port = 5672 $tcp_keepalive = false $tcp_backlog = 128 $ssl = false $ssl_only = false - $ssl_port = '5671' - $ssl_management_port = '15671' - $ssl_stomp_port = '6164' + $ssl_port = 5671 + $ssl_management_port = 15671 + $ssl_stomp_port = 6164 $ssl_verify = 'verify_none' $ssl_fail_if_no_peer_cert = false $ssl_ciphers = [] @@ -105,10 +82,10 @@ $ldap_user_dn_pattern = 'cn=username,ou=People,dc=example,dc=com' $ldap_other_bind = 'anon' $ldap_use_ssl = false - $ldap_port = '389' + $ldap_port = 389 $ldap_log = false $ldap_config_variables = {} - $stomp_port = '6163' + $stomp_port = 6163 $stomp_ssl_only = false $wipe_db_on_cookie_change = false $cluster_partition_handling = 'ignore' diff --git a/manifests/repo/apt.pp b/manifests/repo/apt.pp index 1d2fa4fee..1cf28f9d2 100644 --- a/manifests/repo/apt.pp +++ b/manifests/repo/apt.pp @@ -7,7 +7,7 @@ $repos = 'main', $include_src = false, $key = '0A9AF2115F4687BD29803A206B73A36E6026DFCA', - $key_source = 'https://www.rabbitmq.com/rabbitmq-release-signing-key.asc', + $key_source = $rabbitmq::key_source, $key_content = undef, $architecture = undef, ) { @@ -19,13 +19,8 @@ -> Class['apt::update'] -> Package<| title == 'rabbitmq-server' |> - $ensure_source = $rabbitmq::repos_ensure ? { - false => 'absent', - default => 'present', - } - apt::source { 'rabbitmq': - ensure => $ensure_source, + ensure => present, location => $location, release => $release, repos => $repos, diff --git a/manifests/repo/rhel.pp b/manifests/repo/rhel.pp index 49050a71b..4688aa94a 100644 --- a/manifests/repo/rhel.pp +++ b/manifests/repo/rhel.pp @@ -1,16 +1,23 @@ # Class: rabbitmq::repo::rhel -# Imports the gpg key if it doesn't already exist. -class rabbitmq::repo::rhel { +# Makes sure that the Packagecloud repo is installed +class rabbitmq::repo::rhel( + $location = 'https://packagecloud.io/rabbitmq/rabbitmq-server/el/$releasever/$basearch', + $key_source = 'https://www.rabbitmq.com/rabbitmq-release-signing-key.asc', + ) { - if $rabbitmq::repos_ensure { + Class['rabbitmq::repo::rhel'] -> Package<| title == 'rabbitmq-server' |> - $package_gpg_key = $rabbitmq::package_gpg_key - - Class['rabbitmq::repo::rhel'] -> Package<| title == 'rabbitmq-server' |> + yumrepo { 'rabbitmq': + ensure => present, + name => 'rabbitmq_rabbitmq-server', + baseurl => $location, + gpgkey => $key_source, + enabled => 1, + } - exec { "rpm --import ${package_gpg_key}": - path => ['/bin','/usr/bin','/sbin','/usr/sbin'], - unless => 'rpm -q gpg-pubkey-6026dfca-573adfde 2>/dev/null', - } + # This may still be needed to prevent warnings + exec { "rpm --import ${key_source}": + path => ['/bin','/usr/bin','/sbin','/usr/sbin'], + unless => 'rpm -q gpg-pubkey-6026dfca-573adfde 2>/dev/null', } } diff --git a/manifests/server.pp b/manifests/server.pp index 05de184fc..f979f5be3 100644 --- a/manifests/server.pp +++ b/manifests/server.pp @@ -5,7 +5,7 @@ # Parameters: # [*port*] - port where rabbitmq server is hosted # [*delete_guest_user*] - rather or not to delete the default user -# [*version*] - version of rabbitmq-server to install +# [*version*] - deprecated -- does nothing # [*package_name*] - name of rabbitmq package # [*service_name*] - name of rabbitmq service # [*service_ensure*] - desired ensure state for service @@ -36,7 +36,6 @@ $port = $rabbitmq::params::port, $delete_guest_user = $rabbitmq::params::delete_guest_user, $package_name = $rabbitmq::params::package_name, - $version = $rabbitmq::params::version, $service_name = $rabbitmq::params::service_name, $service_ensure = $rabbitmq::params::service_ensure, $service_manage = $rabbitmq::params::service_manage, @@ -60,11 +59,10 @@ require => Class['rabbitmq'], } - class { 'rabbitmq': + class { '::rabbitmq': port => $port, delete_guest_user => $delete_guest_user, package_name => $package_name, - version => $version, service_name => $service_name, service_ensure => $service_ensure, service_manage => $service_manage, diff --git a/metadata.json b/metadata.json index a2d60bfb3..4c6a46640 100644 --- a/metadata.json +++ b/metadata.json @@ -11,7 +11,6 @@ { "operatingsystem": "RedHat", "operatingsystemrelease": [ - "5", "6", "7" ] @@ -19,7 +18,6 @@ { "operatingsystem": "CentOS", "operatingsystemrelease": [ - "5", "6", "7" ] diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index b0125f64e..a54194918 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -110,15 +110,17 @@ class { 'rabbitmq': describe service(service_name) do it { should be_running } end - describe port(5672) do - it { should be_listening.on('0.0.0.0').with('tcp') } - end - describe port(15672) do - it { should be_listening.on('0.0.0.0').with('tcp') } - end - describe port(25672) do - it { should be_listening.on('0.0.0.0').with('tcp') } - end + describe port(5672) do + it { should be_listening.on('0.0.0.0').with('tcp') } + end + describe port(15672) do + it { should be_listening.on('0.0.0.0').with('tcp') } + end + describe port(25672) do + xit "Is on 55672 instead on older rmq versions" do + should be_listening.on('0.0.0.0').with('tcp') + end + end end context 'binding to localhost only' do @@ -138,16 +140,18 @@ class { 'rabbitmq': describe service(service_name) do it { should be_running } end - describe port(5672) do - it { should be_listening.on('127.0.0.1').with('tcp') } - end - describe port(15672) do - it { should be_listening.on('127.0.0.1').with('tcp') } - end + describe port(5672) do + it { should be_listening.on('127.0.0.1').with('tcp') } + end + describe port(15672) do + it { should be_listening.on('127.0.0.1').with('tcp') } + end # This listens on all interfaces regardless of these settings - describe port(25672) do - it { should be_listening.on('0.0.0.0').with('tcp') } - end + describe port(25672) do + xit "Is on 55672 instead on older rmq versions" do + should be_listening.on('0.0.0.0').with('tcp') + end + end end context 'different management_ip_address and node_ip_address' do @@ -168,15 +172,17 @@ class { 'rabbitmq': describe service(service_name) do it { should be_running } end - describe port(5672) do - it { should be_listening.on('0.0.0.0').with('tcp') } - end - describe port(15672) do - it { should be_listening.on('127.0.0.1').with('tcp') } - end - describe port(25672) do - it { should be_listening.on('0.0.0.0').with('tcp') } - end + describe port(5672) do + it { should be_listening.on('0.0.0.0').with('tcp') } + end + describe port(15672) do + it { should be_listening.on('127.0.0.1').with('tcp') } + end + describe port(25672) do + xit "Is on 55672 instead on older rmq versions" do + should be_listening.on('0.0.0.0').with('tcp') + end + end end end diff --git a/spec/acceptance/delete_guest_user_spec.rb b/spec/acceptance/delete_guest_user_spec.rb index d480e8843..1060eb1da 100644 --- a/spec/acceptance/delete_guest_user_spec.rb +++ b/spec/acceptance/delete_guest_user_spec.rb @@ -5,7 +5,7 @@ it 'should run successfully' do pp = <<-EOS class { 'rabbitmq': - port => '5672', + port => 5672, delete_guest_user => true, } if $::osfamily == 'RedHat' { diff --git a/spec/acceptance/nodesets/centos-6-x64.yml b/spec/acceptance/nodesets/centos-6-x64.yml new file mode 100644 index 000000000..b5050a21c --- /dev/null +++ b/spec/acceptance/nodesets/centos-6-x64.yml @@ -0,0 +1,10 @@ +HOSTS: + centos-6-x64: + roles: + - agent + - default + platform: el-6-x86_64 + hypervisor: vagrant + box: puppetlabs/centos-6.6-64-nocm +CONFIG: + type: foss diff --git a/spec/acceptance/parameter_spec.rb b/spec/acceptance/parameter_spec.rb index 4cb5b6b86..e7914f606 100644 --- a/spec/acceptance/parameter_spec.rb +++ b/spec/acceptance/parameter_spec.rb @@ -11,7 +11,7 @@ class { 'erlang': epel_enable => true } } class { '::rabbitmq': service_manage => true, - port => '5672', + port => 5672, delete_guest_user => true, admin_enable => true, } diff --git a/spec/acceptance/policy_spec.rb b/spec/acceptance/policy_spec.rb index 26858ecc5..dd497f98e 100644 --- a/spec/acceptance/policy_spec.rb +++ b/spec/acceptance/policy_spec.rb @@ -12,7 +12,7 @@ class { 'erlang': epel_enable => true } } class { '::rabbitmq': service_manage => true, - port => '5672', + port => 5672, delete_guest_user => true, admin_enable => true, } -> diff --git a/spec/acceptance/queue_spec.rb b/spec/acceptance/queue_spec.rb index 646bb8f49..45f59ca42 100644 --- a/spec/acceptance/queue_spec.rb +++ b/spec/acceptance/queue_spec.rb @@ -11,7 +11,7 @@ class { 'erlang': epel_enable => true } } class { '::rabbitmq': service_manage => true, - port => '5672', + port => 5672, delete_guest_user => true, admin_enable => true, } -> @@ -87,7 +87,7 @@ class { 'erlang': epel_enable => true } } class { '::rabbitmq': service_manage => true, - port => '5672', + port => 5672, delete_guest_user => true, admin_enable => true, } -> @@ -170,8 +170,8 @@ class { 'erlang': epel_enable => true } } class { '::rabbitmq': service_manage => true, - port => '5672', - management_port => '11111', + port => 5672, + management_port => 11111, delete_guest_user => true, admin_enable => true, } -> diff --git a/spec/acceptance/user_spec.rb b/spec/acceptance/user_spec.rb index 6aab665a4..ed88bfb7d 100644 --- a/spec/acceptance/user_spec.rb +++ b/spec/acceptance/user_spec.rb @@ -12,7 +12,7 @@ class { 'erlang': epel_enable => true } } class { '::rabbitmq': service_manage => true, - port => '5672', + port => 5672, delete_guest_user => true, admin_enable => true, } -> diff --git a/spec/acceptance/vhost_spec.rb b/spec/acceptance/vhost_spec.rb index ef1c2a342..88edcf904 100644 --- a/spec/acceptance/vhost_spec.rb +++ b/spec/acceptance/vhost_spec.rb @@ -12,7 +12,7 @@ class { 'erlang': epel_enable => true } } class { '::rabbitmq': service_manage => true, - port => '5672', + port => 5672, delete_guest_user => true, admin_enable => true, } -> diff --git a/spec/acceptance/zz281_spec.rb b/spec/acceptance/zz281_spec.rb deleted file mode 100644 index 0d9d78da1..000000000 --- a/spec/acceptance/zz281_spec.rb +++ /dev/null @@ -1,197 +0,0 @@ -require 'spec_helper_acceptance' -# -# beacuse of some serious issues with upgrading and downgrading rabbitmq on RedHat, -# we need to run all of the 2.8.1 tests last. -# -# These tests only apply to RedHat because 2.8.1 is not available in either the -# distro or upstream repos for Debian/Ubuntu. -# -describe 'rabbitmq class with 2.8.1:', :unless => (fact('osfamily') == 'RedHat') do - if fact('osfamily') == 'RedHat' - package_name = 'rabbitmq-server' - service_name = 'rabbitmq-server' - package_source = "http://www.rabbitmq.com/releases/rabbitmq-server/v2.8.1/rabbitmq-server-2.8.1-1.noarch.rpm" - package_ensure = '2.8.1-1' - - context "default class inclusion" do - it 'should run successfully' do - pp = <<-EOS - class { 'rabbitmq': - version => '2.8.1-1', - package_source => '#{package_source}', - package_ensure => '#{package_ensure}', - package_provider => 'rpm', - management_port => '55672', - } - if $::osfamily == 'RedHat' { - class { 'erlang': epel_enable => true} - Class['erlang'] -> Class['rabbitmq'] - } - EOS - - # clean up previous 3.x install - can't be ungraded cleanly via RPM - shell('service rabbitmq-server stop') - shell('yum -y erase rabbitmq-server') - shell('rm -Rf /var/lib/rabbitmq/mnesia /etc/rabbitmq /var/lib/rabbitmq/rabbitmqadmin') - # Apply twice to ensure no errors the second time. - apply_manifest(pp, :catch_failures => true) - expect(apply_manifest(pp, :catch_changes => true).exit_code).to be_zero - # DEBUG - shell('netstat -lntp') - end - - describe command('rabbitmqctl status') do - its(:stdout) { should match /{rabbit,"RabbitMQ","2.8.1"}/ } - end - - describe package(package_name) do - it { should be_installed } - end - - describe service(service_name) do - it { should be_enabled } - it { should be_running } - end - end - - context "disable and stop service" do - it 'should run successfully' do - pp = <<-EOS - class { 'rabbitmq': - version => '2.8.1-1', - package_source => '#{package_source}', - package_ensure => '#{package_ensure}', - package_provider => 'rpm', - management_port => '55672', - service_ensure => 'stopped', - admin_enable => false, - } - if $::osfamily == 'RedHat' { - class { 'erlang': epel_enable => true} - Class['erlang'] -> Class['rabbitmq'] - } - EOS - - apply_manifest(pp, :catch_failures => true) - end - - describe service(service_name) do - it { should_not be_enabled } - it { should_not be_running } - end - end - - context "service is unmanaged" do - it 'should run successfully' do - pp_pre = <<-EOS - class { 'rabbitmq': - version => '2.8.1-1', - package_source => '#{package_source}', - package_ensure => '#{package_ensure}', - package_provider => 'rpm', - management_port => '55672', - } - if $::osfamily == 'RedHat' { - class { 'erlang': epel_enable => true} - Class['erlang'] -> Class['rabbitmq'] - } - EOS - - pp = <<-EOS - class { 'rabbitmq': - service_manage => false, - service_ensure => 'stopped', - } - if $::osfamily == 'RedHat' { - class { 'erlang': epel_enable => true} - Class['erlang'] -> Class['rabbitmq'] - } - EOS - - apply_manifest(pp_pre, :catch_failures => true) - apply_manifest(pp, :catch_failures => true) - end - - describe service(service_name) do - it { should be_enabled } - it { should be_running } - end - end - - context 'rabbitmqadmin' do - #confine :to, :platform => 'el-6-x86' - - it 'should run successfully' do - pp = <<-EOS - class { 'rabbitmq': - admin_enable => true, - service_manage => true, - version => '2.8.1-1', - package_source => '#{package_source}', - package_ensure => '#{package_ensure}', - package_provider => 'rpm', - management_port => '55672', - } - if $::osfamily == 'RedHat' { - class { 'erlang': epel_enable => true} - Class['erlang'] -> Class['rabbitmq'] - } - EOS - - shell('rm -f /var/lib/rabbitmq/rabbitmqadmin') - apply_manifest(pp, :catch_failures => true) - end - - # since serverspec (used by beaker-rspec) can only tell present/absent for packages - describe file('/var/lib/rabbitmq/rabbitmqadmin') do - it { should be_file } - end - - describe command('/usr/local/bin/rabbitmqadmin --help') do - its(:exit_status) { should eq 0 } - end - - end - - context 'rabbitmqadmin with specified default credentials' do - - it 'should run successfully' do - # make sure credential change takes effect before admin_enable - pp = <<-EOS - class { 'rabbitmq': - admin_enable => true, - service_manage => true, - version => '2.8.1-1', - package_source => '#{package_source}', - package_ensure => '#{package_ensure}', - package_provider => 'rpm', - management_port => '55672', - default_user => 'foobar', - default_pass => 'bazblam', - } - if $::osfamily == 'RedHat' { - class { 'erlang': epel_enable => true} - Class['erlang'] -> Class['rabbitmq'] - } - EOS - - # next 3 lines - see MODULES-1085 - shell('service rabbitmq-server stop') - shell('rm -Rf /var/lib/rabbitmq/mnesia /var/lib/rabbitmq/rabbitmqadmin') - apply_manifest(pp, :catch_failures => true) - end - - # since serverspec (used by beaker-rspec) can only tell present/absent for packages - describe file('/var/lib/rabbitmq/rabbitmqadmin') do - it { should be_file } - end - - describe command('/usr/local/bin/rabbitmqadmin --help') do - its(:exit_status) { should eq 0 } - end - - end - - end - -end diff --git a/spec/classes/rabbitmq_spec.rb b/spec/classes/rabbitmq_spec.rb index d70f20956..d6fc34f9d 100644 --- a/spec/classes/rabbitmq_spec.rb +++ b/spec/classes/rabbitmq_spec.rb @@ -12,57 +12,12 @@ context 'on Debian' do with_debian_facts - it 'includes rabbitmq::repo::apt' do - should contain_class('rabbitmq::repo::apt') - end - - describe 'apt::source default values' do - it 'should add a repo with defaults values' do - should contain_apt__source('rabbitmq').with( { - :ensure => 'present', - :location => 'http://www.rabbitmq.com/debian/', - :release => 'testing', - :repos => 'main', - }) - end - end - end - - context 'on Debian' do - let(:params) {{ :manage_repos => false }} - with_debian_facts - it 'does ensure rabbitmq apt::source is absent when manage_repos is false' do - should_not contain_apt__source('rabbitmq') + it 'should not include rabbitmq::repo::apt' do + should_not contain_class('rabbitmq::repo::apt') end - end - context 'on Debian' do - let(:params) {{ :manage_repos => true }} - with_debian_facts - - it 'includes rabbitmq::repo::apt' do - should contain_class('rabbitmq::repo::apt') - end - - describe 'apt::source default values' do - it 'should add a repo with defaults values' do - should contain_apt__source('rabbitmq').with( { - :ensure => 'present', - :location => 'http://www.rabbitmq.com/debian/', - :release => 'testing', - :repos => 'main', - }) - end - end - end - - context 'on Debian' do - let(:params) {{ :repos_ensure => false }} - with_debian_facts it 'does ensure rabbitmq apt::source is absent when repos_ensure is false' do - should contain_apt__source('rabbitmq').with( - 'ensure' => 'absent' - ) + should_not contain_apt__source('rabbitmq') end end @@ -75,44 +30,7 @@ end describe 'apt::source default values' do - it 'should add a repo with defaults values' do - should contain_apt__source('rabbitmq').with( { - :ensure => 'present', - :location => 'http://www.rabbitmq.com/debian/', - :release => 'testing', - :repos => 'main', - }) - end - end - end - - context 'on Debian' do - let(:params) {{ :manage_repos => true, :repos_ensure => false }} - with_debian_facts - - it 'includes rabbitmq::repo::apt' do - should contain_class('rabbitmq::repo::apt') - end - - describe 'apt::source default values' do - it 'should add a repo with defaults values' do - should contain_apt__source('rabbitmq').with( { - :ensure => 'absent', - }) - end - end - end - - context 'on Debian' do - let(:params) {{ :manage_repos => true, :repos_ensure => true }} - with_debian_facts - - it 'includes rabbitmq::repo::apt' do - should contain_class('rabbitmq::repo::apt') - end - - describe 'apt::source default values' do - it 'should add a repo with defaults values' do + it 'should add a repo with default values' do should contain_apt__source('rabbitmq').with( { :ensure => 'present', :location => 'http://www.rabbitmq.com/debian/', @@ -121,24 +39,6 @@ }) end end - end - - context 'on Debian' do - let(:params) {{ :manage_repos => false, :repos_ensure => true }} - with_debian_facts - it 'does ensure rabbitmq apt::source is absent when manage_repos is false and repos_ensure is true' do - should_not contain_apt__source('rabbitmq') - end - end - - context 'on Debian' do - with_debian_facts - context 'with manage_repos => false and repos_ensure => false' do - let(:params) {{ :manage_repos => false, :repos_ensure => false }} - it 'does ensure rabbitmq apt::source is absent when manage_repos is false and repos_ensure is false' do - should_not contain_apt__source('rabbitmq') - end - end context 'with file_limit => unlimited' do let(:params) {{ :file_limit => 'unlimited' }} @@ -182,9 +82,8 @@ context 'on Redhat' do with_redhat_facts - it 'includes rabbitmq::repo::rhel' do - should contain_class('rabbitmq::repo::rhel') - should contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') + it 'should not include rabbitmq::repo::rhel' do + should_not contain_class('rabbitmq::repo::rhel') end context 'with file_limit => \'unlimited\'' do @@ -257,76 +156,33 @@ context 'on Redhat' do let(:params) {{ :repos_ensure => false }} with_redhat_facts - it 'does not import repo public key when repos_ensure is false' do - should contain_class('rabbitmq::repo::rhel') - should_not contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') - end - end - - context 'on Redhat' do - let(:params) {{ :repos_ensure => true }} - with_redhat_facts - it 'does import repo public key when repos_ensure is true' do - should contain_class('rabbitmq::repo::rhel') - should contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') - end - end - - context 'on Redhat' do - let(:params) {{ :manage_repos => false }} - with_redhat_facts - it 'does not import repo public key when manage_repos is false' do + it 'does not contain class rabbitmq::repo::rhel when repos_ensure is false' do should_not contain_class('rabbitmq::repo::rhel') - should_not contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') end - end - - context 'on Redhat' do - let(:params) {{ :manage_repos => true }} - with_redhat_facts - it 'does import repo public key when manage_repos is true' do - should contain_class('rabbitmq::repo::rhel') - should contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') + it 'should not contain "rabbitmq" repo' do + should_not contain_yumrepo('rabbitmq') end end context 'on Redhat' do - let(:params) {{ :manage_repos => false, :repos_ensure => true }} - with_redhat_facts - it 'does not import repo public key when manage_repos is false and repos_ensure is true' do - should_not contain_class('rabbitmq::repo::rhel') - should_not contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') - end - end - - context 'on Redhat' do - let(:params) {{ :manage_repos => true, :repos_ensure => true }} + let(:params) {{ :repos_ensure => true }} with_redhat_facts - it 'does import repo public key when manage_repos is true and repos_ensure is true' do + it 'should contain class rabbitmq::repo::rhel' do should contain_class('rabbitmq::repo::rhel') - should contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') end - end - - context 'on Redhat' do - let(:params) {{ :manage_repos => false, :repos_ensure => false }} - with_redhat_facts - it 'does not import repo public key when manage_repos is false and repos_ensure is false' do - should_not contain_class('rabbitmq::repo::rhel') - should_not contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') + it 'should contain "rabbitmq" repo' do + should contain_yumrepo('rabbitmq') end - end - - context 'on Redhat' do - let(:params) {{ :manage_repos => true, :repos_ensure => false }} - with_redhat_facts - it 'does not import repo public key when manage_repos is true and repos_ensure is false' do - should contain_class('rabbitmq::repo::rhel') - should_not contain_exec('rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc') + it 'the repo should be present, and contain the expected values' do + should contain_yumrepo('rabbitmq').with( { + :ensure => 'present', + :baseurl => 'https://packagecloud.io/rabbitmq/rabbitmq-server/el/$releasever/$basearch', + :gpgkey => 'https://www.rabbitmq.com/rabbitmq-release-signing-key.asc', + }) end end - context 'on RedHat 7.0 or more' do + context 'on RedHat 7.0 or higher' do with_redhat_facts it { should contain_file('/etc/systemd/system/rabbitmq-server.service.d').with( @@ -396,6 +252,23 @@ end ['Debian', 'RedHat', 'SUSE', 'Archlinux'].each do |distro| + osfacts = { + :osfamily => distro, + :staging_http_get => '', + :puppetversion => Puppet.version, + } + + case distro + when 'Debian' + osfacts.merge!({ + :lsbdistcodename => 'squeeze', + :lsbdistid => 'Debian' + }) + when 'RedHat' + osfacts.merge!({ + :operatingsystemmajrelease => '7', + }) + end context "on #{distro}" do with_distro_facts distro @@ -447,7 +320,7 @@ end context 'with service_manage set to true and management port specified' do # note that the 2.x management port is 55672 not 15672 - let(:params) {{ :admin_enable => true, :management_port => '55672', :management_ip_address => '1.1.1.1' }} + let(:params) {{ :admin_enable => true, :management_port => 55672, :management_ip_address => '1.1.1.1' }} it 'we use the correct URL to rabbitmqadmin' do should contain_staging__file('rabbitmqadmin').with( :source => 'http://1.1.1.1:55672/cli/rabbitmqadmin', @@ -457,7 +330,7 @@ end context 'with ipv6, service_manage set to true and management port specified' do # note that the 2.x management port is 55672 not 15672 - let(:params) {{ :admin_enable => true, :management_port => '55672', :management_ip_address => '::1' }} + let(:params) {{ :admin_enable => true, :management_port => 55672, :management_ip_address => '::1' }} it 'we use the correct URL to rabbitmqadmin' do should contain_staging__file('rabbitmqadmin').with( :source => 'http://[::1]:55672/cli/rabbitmqadmin', @@ -645,7 +518,7 @@ :ldap_user_dn_pattern => 'ou=users,dc=example,dc=com', :ldap_other_bind => 'as_user', :ldap_use_ssl => false, - :ldap_port => '389', + :ldap_port => 389, :ldap_log => true, :ldap_config_variables => { 'foo' => 'bar' } } @@ -671,7 +544,7 @@ :ldap_user_dn_pattern => 'ou=users,dc=example,dc=com', :ldap_other_bind => 'as_user', :ldap_use_ssl => false, - :ldap_port => '389', + :ldap_port => 389, :ldap_log => true, :ldap_config_variables => { 'foo' => 'bar' } } @@ -1383,15 +1256,24 @@ ## ## rabbitmq::install ## - context "on RHEL" do + context "on RHEL with repos_ensure" do with_redhat_facts - let(:params) {{ :package_source => 'http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.3/rabbitmq-server-3.2.3-1.noarch.rpm' }} + let(:params) {{ :repos_ensure => true }} it 'installs the rabbitmq package' do should contain_package('rabbitmq-server').with( 'ensure' => 'installed', 'name' => 'rabbitmq-server', - 'provider' => 'yum', - 'source' => 'http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.3/rabbitmq-server-3.2.3-1.noarch.rpm' + ) + end + end + + context "on RHEL" do + with_redhat_facts + let(:params) {{ :repos_ensure => false}} + it 'installs the rabbitmq package [from EPEL] when $repos_ensure is false' do + should contain_package('rabbitmq-server').with( + 'ensure' => 'installed', + 'name' => 'rabbitmq-server', ) end end @@ -1402,7 +1284,6 @@ should contain_package('rabbitmq-server').with( 'ensure' => 'installed', 'name' => 'rabbitmq-server', - 'provider' => 'apt' ) end end @@ -1412,7 +1293,7 @@ it 'installs the rabbitmq package' do should contain_package('rabbitmq-server').with( 'ensure' => 'installed', - 'name' => 'rabbitmq') + ) end end @@ -1422,7 +1303,6 @@ should contain_package('rabbitmq-server').with( 'ensure' => 'installed', 'name' => 'rabbitmq', - 'provider' => 'openbsd' ) end end @@ -1431,7 +1311,7 @@ with_debian_facts context 'with no pin' do - let(:params) {{ :package_apt_pin => '' }} + let(:params) {{:repos_ensure => true, :package_apt_pin => '' }} describe 'it sets up an apt::source' do it { should contain_apt__source('rabbitmq').with( @@ -1444,7 +1324,7 @@ end context 'with pin' do - let(:params) {{ :package_apt_pin => '700' }} + let(:params) {{:repos_ensure => true, :package_apt_pin => '700' }} describe 'it sets up an apt::source and pin' do it { should contain_apt__source('rabbitmq').with( @@ -1464,18 +1344,4 @@ end end - ['RedHat', 'SuSE'].each do |distro| - - describe "repo management on #{distro}" do - describe 'imports the key' do - with_distro_facts distro - let(:params) {{ :package_gpg_key => 'https://www.rabbitmq.com/rabbitmq-release-signing-key.asc' }} - - it { should contain_exec("rpm --import #{params[:package_gpg_key]}").with( - 'path' => ['/bin','/usr/bin','/sbin','/usr/sbin'] - ) } - end - end - end - end diff --git a/spec/spec_helper_local.rb b/spec/spec_helper_local.rb index 7af9d8128..338ae800b 100644 --- a/spec/spec_helper_local.rb +++ b/spec/spec_helper_local.rb @@ -1,6 +1,7 @@ RSpec.shared_context "default facts" do let(:facts) { { :puppetversion => Puppet.version, - :staging_http_get => ''} } + :staging_http_get => '', + :rabbitmq_version => '3.6.1' } } end RSpec.configure do |rspec| From 6724952034bf3a3a6be6112ff8e9669f1a34c76c Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 3 Oct 2016 21:29:13 +0200 Subject: [PATCH 2/2] implement Arch support --- manifests/params.pp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/manifests/params.pp b/manifests/params.pp index aa8f54bb1..106b0823f 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -5,6 +5,14 @@ class rabbitmq::params { case $::osfamily { + 'Archlinux': { + $package_ensure = 'installed' + $package_name = 'rabbitmq' + $service_name = 'rabbitmq' + $rabbitmq_user = 'rabbitmq' + $rabbitmq_group = 'rabbitmq' + $rabbitmq_home = '/var/lib/rabbitmq' + } 'Debian': { $package_ensure = 'installed' $package_name = 'rabbitmq-server'