From 4bf60a5e82a076dc6daad8a51d8d29faaed25f46 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 7 Feb 2022 20:47:02 +0900 Subject: [PATCH 1/2] Add official support for CentOS/RHEL 8 This change makes CentOS 8 and RHEL 8 as a suppotrted OS. For CentOS 8 RabbitMQ package is not available in EPEL and PackageCloud repos should be used instead. This change adds support for additional erlang repository so that users can install rabbitmq correctly without missing dependencies. Also, now acceptance tests use puppet-erlang instead of garethr-erlang so that it can install erlng from packagecloud. [1] https://www.rabbitmq.com/install-rpm.html --- data/family/RedHat.yaml | 3 ++- metadata.json | 6 ++++-- spec/acceptance/class_spec.rb | 26 +++++++++++++++++------ spec/acceptance/clustering_spec.rb | 8 +++++-- spec/acceptance/delete_guest_user_spec.rb | 5 ++++- spec/acceptance/parameter_spec.rb | 7 +++--- spec/acceptance/policy_spec.rb | 5 ++++- spec/acceptance/queue_spec.rb | 13 ++++++------ spec/acceptance/rabbitmqadmin_spec.rb | 14 ++++++++---- spec/acceptance/user_spec.rb | 9 +++++++- spec/acceptance/vhost_spec.rb | 7 +++--- spec/classes/rabbitmq_spec.rb | 6 ++++-- spec/spec_helper_acceptance.rb | 2 +- 13 files changed, 75 insertions(+), 36 deletions(-) diff --git a/data/family/RedHat.yaml b/data/family/RedHat.yaml index 347c23261..ed86e4d54 100644 --- a/data/family/RedHat.yaml +++ b/data/family/RedHat.yaml @@ -1,5 +1,6 @@ --- +rabbitmq::python_package: 'python3' rabbitmq::package_name: 'rabbitmq-server' rabbitmq::service_name: 'rabbitmq-server' rabbitmq::package_gpg_key: 'https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc' -rabbitmq::repo_gpg_key: 'https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey' \ No newline at end of file +rabbitmq::repo_gpg_key: 'https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey' diff --git a/metadata.json b/metadata.json index bda4cd0b7..8f390f0e2 100644 --- a/metadata.json +++ b/metadata.json @@ -11,13 +11,15 @@ { "operatingsystem": "RedHat", "operatingsystemrelease": [ - "7" + "7", + "8" ] }, { "operatingsystem": "CentOS", "operatingsystemrelease": [ - "7" + "7", + "8" ] }, { diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 009b35b08..744307e9b 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -12,12 +12,16 @@ service_name = 'rabbitmq' end + repos_ensure = (fact('os.family') == 'RedHat') + context 'default class inclusion' do let(:pp) do <<-EOS - class { 'rabbitmq': } + class { 'rabbitmq': + repos_ensure => #{repos_ensure}, + } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS @@ -52,10 +56,11 @@ class { 'erlang': epel_enable => true} let(:pp) do <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_ensure => 'stopped', } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS @@ -72,20 +77,23 @@ class { 'erlang': epel_enable => true} context 'service is unmanaged' do it 'runs successfully' do pp_pre = <<-EOS - class { 'rabbitmq': } + class { 'rabbitmq': + repos_ensure => #{repos_ensure}, + } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS pp = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => false, - service_ensure => 'stopped', + service_ensure => 'stopped', } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS @@ -104,6 +112,7 @@ class { 'erlang': epel_enable => true} let(:pp) do <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, admin_enable => true, @@ -137,6 +146,7 @@ class { 'rabbitmq': let(:pp) do <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, admin_enable => true, @@ -172,6 +182,7 @@ class { 'rabbitmq': let(:pp) do <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, admin_enable => true, node_ip_address => '0.0.0.0', @@ -203,6 +214,7 @@ class { 'rabbitmq': let(:pp) do <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, admin_enable => true, diff --git a/spec/acceptance/clustering_spec.rb b/spec/acceptance/clustering_spec.rb index ca229e4dc..9cd0e81b7 100644 --- a/spec/acceptance/clustering_spec.rb +++ b/spec/acceptance/clustering_spec.rb @@ -3,10 +3,13 @@ require 'spec_helper_acceptance' describe 'rabbitmq clustering' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'rabbitmq::wipe_db_on_cookie_change => false' do it 'runs successfully' do pp = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, cluster => { 'name' => 'rabbit_cluster', 'init_node' => $facts['fqdn'] }, config_cluster => true, cluster_nodes => ['rabbit1', 'rabbit2'], @@ -16,7 +19,7 @@ class { 'rabbitmq': wipe_db_on_cookie_change => false, } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS @@ -33,6 +36,7 @@ class { 'erlang': epel_enable => true} it 'runs successfully' do pp = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, cluster => { 'name' => 'rabbit_cluster', 'init_node' => $facts['fqdn'] }, config_cluster => true, cluster_nodes => ['rabbit1', 'rabbit2'], @@ -42,7 +46,7 @@ class { 'rabbitmq': wipe_db_on_cookie_change => true, } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS diff --git a/spec/acceptance/delete_guest_user_spec.rb b/spec/acceptance/delete_guest_user_spec.rb index 15bdff93f..573de7742 100644 --- a/spec/acceptance/delete_guest_user_spec.rb +++ b/spec/acceptance/delete_guest_user_spec.rb @@ -3,15 +3,18 @@ require 'spec_helper_acceptance' describe 'rabbitmq with delete_guest_user' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'delete_guest_user' do it 'runs successfully' do pp = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, port => 5672, delete_guest_user => true, } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS diff --git a/spec/acceptance/parameter_spec.rb b/spec/acceptance/parameter_spec.rb index e7ac8773d..54d702cde 100644 --- a/spec/acceptance/parameter_spec.rb +++ b/spec/acceptance/parameter_spec.rb @@ -3,14 +3,13 @@ require 'spec_helper_acceptance' describe 'rabbitmq parameter on a vhost:' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'create parameter resource' do it 'runs successfully' do pp = <<-EOS - if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true } - Class['erlang'] -> Class['rabbitmq'] - } class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, delete_guest_user => true, diff --git a/spec/acceptance/policy_spec.rb b/spec/acceptance/policy_spec.rb index 1cd126344..3868279a9 100644 --- a/spec/acceptance/policy_spec.rb +++ b/spec/acceptance/policy_spec.rb @@ -3,14 +3,17 @@ require 'spec_helper_acceptance' describe 'rabbitmq policy on a vhost:' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'create policy resource' do it 'runs successfully' do pp = <<-EOS if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true } + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, delete_guest_user => true, diff --git a/spec/acceptance/queue_spec.rb b/spec/acceptance/queue_spec.rb index 2934796e9..d8ffff086 100644 --- a/spec/acceptance/queue_spec.rb +++ b/spec/acceptance/queue_spec.rb @@ -3,14 +3,17 @@ require 'spec_helper_acceptance' describe 'rabbitmq binding:' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'create binding and queue resources when using default management port' do it 'runs successfully' do pp = <<-EOS if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true } + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, delete_guest_user => true, @@ -81,10 +84,11 @@ class { 'rabbitmq': it 'runs successfully' do pp = <<-EOS if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true } + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, delete_guest_user => true, @@ -168,11 +172,8 @@ class { 'rabbitmq': context 'create binding and queue resources when using a non-default management port' do it 'runs successfully' do pp = <<-EOS - if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true } - Class['erlang'] -> Class['rabbitmq'] - } class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, management_port => 11111, diff --git a/spec/acceptance/rabbitmqadmin_spec.rb b/spec/acceptance/rabbitmqadmin_spec.rb index fa127f1b4..d8ba035b3 100644 --- a/spec/acceptance/rabbitmqadmin_spec.rb +++ b/spec/acceptance/rabbitmqadmin_spec.rb @@ -3,15 +3,18 @@ require 'spec_helper_acceptance' describe 'rabbitmq::install::rabbitmqadmin class' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'downloads the cli tools' do it 'runs successfully' do pp = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, admin_enable => true, service_manage => true, } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS @@ -28,11 +31,12 @@ class { 'erlang': epel_enable => true} it 'runs successfully' do pp = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, admin_enable => true, service_manage => false, } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS @@ -51,25 +55,27 @@ class { 'erlang': epel_enable => true} # make sure credential change takes effect before admin_enable pp_pre = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, default_user => 'foobar', default_pass => 'bazblam', } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS pp = <<-EOS class { 'rabbitmq': + repos_ensure => #{repos_ensure}, admin_enable => true, service_manage => true, default_user => 'foobar', default_pass => 'bazblam', } if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true} + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } EOS diff --git a/spec/acceptance/user_spec.rb b/spec/acceptance/user_spec.rb index a8d369218..d56b6909f 100644 --- a/spec/acceptance/user_spec.rb +++ b/spec/acceptance/user_spec.rb @@ -3,14 +3,17 @@ require 'spec_helper_acceptance' describe 'rabbitmq user:' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'create user resource' do it 'runs successfully' do pp = <<-EOS if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true } + class { 'erlang': repo_source => 'packagecloud' } Class['erlang'] -> Class['rabbitmq'] } class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, delete_guest_user => true, @@ -38,6 +41,10 @@ class { 'rabbitmq': context 'destroy user resource' do it 'runs successfully' do pp = <<-EOS + if $facts['os']['family'] == 'RedHat' { + class { 'erlang': repo_source => 'packagecloud' } + Class['erlang'] -> Class['rabbitmq'] + } rabbitmq_user { 'dan': ensure => absent, } diff --git a/spec/acceptance/vhost_spec.rb b/spec/acceptance/vhost_spec.rb index 782e33df9..ef47e64e3 100644 --- a/spec/acceptance/vhost_spec.rb +++ b/spec/acceptance/vhost_spec.rb @@ -3,14 +3,13 @@ require 'spec_helper_acceptance' describe 'rabbitmq vhost:' do + repos_ensure = (fact('os.family') == 'RedHat') + context 'create vhost resource' do it 'runs successfully' do pp = <<-EOS - if $facts['os']['family'] == 'RedHat' { - class { 'erlang': epel_enable => true } - Class['erlang'] -> Class['rabbitmq'] - } class { 'rabbitmq': + repos_ensure => #{repos_ensure}, service_manage => true, port => 5672, delete_guest_user => true, diff --git a/spec/classes/rabbitmq_spec.rb b/spec/classes/rabbitmq_spec.rb index 98650f209..f755042b8 100644 --- a/spec/classes/rabbitmq_spec.rb +++ b/spec/classes/rabbitmq_spec.rb @@ -12,7 +12,7 @@ facts end - name = case facts[:osfamily] + name = case facts[:os]['family'] when 'Archlinux', 'OpenBSD', 'FreeBSD' 'rabbitmq' else @@ -239,8 +239,9 @@ is_expected.to contain_archive('rabbitmqadmin').with_source('http://1.1.1.1:15672/cli/rabbitmqadmin') end - it { is_expected.to contain_package('python') } if %w[RedHat Debian SUSE Archlinux].include?(facts[:os]['family']) + it { is_expected.to contain_package('python') } if %w[Debian SUSE Archlinux].include?(facts[:os]['family']) it { is_expected.to contain_package('python2') } if %w[FreeBSD OpenBSD].include?(facts[:os]['family']) + it { is_expected.to contain_package('python3') } if %w[RedHat].include?(facts[:os]['family']) end context 'with manage_python false' do @@ -250,6 +251,7 @@ is_expected.to contain_class('rabbitmq::install::rabbitmqadmin') is_expected.not_to contain_package('python') is_expected.not_to contain_package('python2') + is_expected.not_to contain_package('python3') end end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index 94706e396..4bca4f90a 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -7,7 +7,7 @@ when 'Debian' install_module_from_forge_on(host, 'puppetlabs-apt', '>= 4.1.0 < 9.0.0') when 'RedHat' - install_module_from_forge_on(host, 'garethr-erlang', '>= 0.3.0 < 1.0.0') + install_module_from_forge_on(host, 'puppet-erlang', '>= 1.0.0 < 2.0.0') if fact_on(host, 'os.selinux.enabled') # Make sure selinux is disabled so the tests work. on host, puppet('resource', 'exec', 'setenforce 0', 'path=/bin:/sbin:/usr/bin:/usr/sbin', 'onlyif=which setenforce && getenforce | grep Enforcing') From b08bd903ae6e2bc851bd65354aa756787385d1b8 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 4 Jul 2022 02:54:28 +0900 Subject: [PATCH 2/2] Load rabbitmq_federation plugin first Currently the 'rabbitmq-plguins enable' command does not explicitly enable the plugin if that is implicitly enabled in CentOS. This change let the rabbitmq_federation plugin loaded before its management plugin to workaround the problem. --- spec/acceptance/parameter_spec.rb | 2 +- spec/acceptance/user_spec.rb | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/acceptance/parameter_spec.rb b/spec/acceptance/parameter_spec.rb index 54d702cde..acef596f6 100644 --- a/spec/acceptance/parameter_spec.rb +++ b/spec/acceptance/parameter_spec.rb @@ -16,7 +16,7 @@ class { 'rabbitmq': admin_enable => true, } - rabbitmq_plugin { [ 'rabbitmq_federation_management', 'rabbitmq_federation' ]: + rabbitmq_plugin { [ 'rabbitmq_federation', 'rabbitmq_federation_management' ]: ensure => present } ~> Service['rabbitmq-server'] diff --git a/spec/acceptance/user_spec.rb b/spec/acceptance/user_spec.rb index d56b6909f..e79704bed 100644 --- a/spec/acceptance/user_spec.rb +++ b/spec/acceptance/user_spec.rb @@ -41,10 +41,6 @@ class { 'rabbitmq': context 'destroy user resource' do it 'runs successfully' do pp = <<-EOS - if $facts['os']['family'] == 'RedHat' { - class { 'erlang': repo_source => 'packagecloud' } - Class['erlang'] -> Class['rabbitmq'] - } rabbitmq_user { 'dan': ensure => absent, }