From 02d32f4a0e46fbaf4873ed406cff04cc14f83e7f Mon Sep 17 00:00:00 2001 From: Armin Pech <a.pech@babiel.com> Date: Thu, 1 Nov 2018 16:45:28 +0100 Subject: [PATCH 1/6] server: support arbiter node config introduced by PR#182 --- README.md | 7 ++++++- manifests/server.pp | 6 ++++-- spec/classes/server_spec.rb | 30 ++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d9ef22cbf..0e2727798 100644 --- a/README.md +++ b/README.md @@ -418,6 +418,11 @@ set name as an argument to this set. All hosts must have the same set name. An array of member hosts for the replica set. Mutually exclusive with `replset_config` param. +##### `replset_arbiter` +A string to identify an arbiter instance for the replica set. +The arbiter node must also appear in `replset_members`. +Mutually exclusive with `replset_config` param. + ##### `replset_config` A hash that is used to configure the replica set. Mutually exclusive with `replset_members` param. @@ -425,7 +430,7 @@ Mutually exclusive with `replset_members` param. ```puppet class mongodb::server { replset => 'rsmain', - replset_config => { 'rsmain' => { ensure => present, settings => { heartbeatTimeoutSecs => 15, getLastErrorModes => { ttmode => { dc => 1 } } }, members => [{'host'=>'host1:27017', 'tags':{ 'dc' : 'east'}}, { 'host' => 'host2:27017'}, 'host3:27017'] } } + replset_config => { 'rsmain' => { ensure => present, settings => { heartbeatTimeoutSecs => 15, getLastErrorModes => { ttmode => { dc => 1 } } }, members => [{'host'=>'host1:27017', 'tags':{ 'dc' : 'east'}}, { 'host' => 'host2:27017'}, 'host3:27017'] }, arbiter => ['host3:27017'] } } ``` diff --git a/manifests/server.pp b/manifests/server.pp index 007f52f76..bb41fbe06 100644 --- a/manifests/server.pp +++ b/manifests/server.pp @@ -53,6 +53,7 @@ Optional[String] $replset = undef, Optional[Hash] $replset_config = undef, Optional[Array] $replset_members = undef, + Optional[String] $replset_arbiter = undef, Optional[Boolean] $configsvr = undef, Optional[Boolean] $shardsvr = undef, Optional[Boolean] $rest = undef, @@ -113,8 +114,8 @@ # Set-up replicasets if $replset { # Check that we've got either a members array or a replset_config hash - if $replset_members and $replset_config { - fail('You can provide either replset_members or replset_config, not both.') + if ( $replset_members or $replset_arbiter ) and $replset_config { + fail('You can provide either replset_members incl. replset_arbiter or replset_config, not both.') } elsif !$replset_members and !$replset_config { # No members or config provided. Warn about it. warning('Replset specified, but no replset_members or replset_config provided.') @@ -129,6 +130,7 @@ "${replset}" => { 'ensure' => 'present', 'members' => $replset_members, + 'arbiter' => $replset_arbiter, }, } } diff --git a/spec/classes/server_spec.rb b/spec/classes/server_spec.rb index fe0e50072..41fa9e1e7 100644 --- a/spec/classes/server_spec.rb +++ b/spec/classes/server_spec.rb @@ -381,6 +381,36 @@ it { is_expected.to contain_class('mongodb::replset').with_sets(rsConf) } end + + describe 'should setup using replset_members with replset_arbiter' do + let(:rsConf) do + { + 'rsTest' => { + 'ensure' => 'present', + 'members' => [ + 'mongo1:27017', + 'mongo2:27017', + 'mongo3:27017' + ], + 'arbiter' => 'mongo3:27017' + } + } + end + + let(:params) do + { + replset: 'rsTest', + replset_members: [ + 'mongo1:27017', + 'mongo2:27017', + 'mongo3:27017' + ], + 'arbiter' => 'mongo3:27017' + } + end + + it { is_expected.to contain_class('mongodb::replset').with_sets(rsConf) } + end end end end From 32c4cfcacfd4c7b81451c0d4009d11c57fe82cce Mon Sep 17 00:00:00 2001 From: Armin Pech <a.pech@babiel.com> Date: Thu, 1 Nov 2018 17:00:10 +0100 Subject: [PATCH 2/6] fixup! server: support arbiter node config introduced by PR#182 --- manifests/server.pp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manifests/server.pp b/manifests/server.pp index bb41fbe06..504c91e43 100644 --- a/manifests/server.pp +++ b/manifests/server.pp @@ -114,8 +114,10 @@ # Set-up replicasets if $replset { # Check that we've got either a members array or a replset_config hash - if ( $replset_members or $replset_arbiter ) and $replset_config { - fail('You can provide either replset_members incl. replset_arbiter or replset_config, not both.') + if $replset_members and $replset_config { + fail('You can provide either replset_members or replset_config, not both.') + } elsif $replset_arbiter and $replset_config { + fail('You can use replset_arbiter only with replset_members not when using replset_config.') } elsif !$replset_members and !$replset_config { # No members or config provided. Warn about it. warning('Replset specified, but no replset_members or replset_config provided.') From bfe02c951369a4ed1beb4054ee3920daccb4f614 Mon Sep 17 00:00:00 2001 From: Armin Pech <a.pech@babiel.com> Date: Thu, 1 Nov 2018 17:12:01 +0100 Subject: [PATCH 3/6] fixup server spec when arbiter is not set --- spec/classes/server_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/classes/server_spec.rb b/spec/classes/server_spec.rb index 41fa9e1e7..bd594b9e0 100644 --- a/spec/classes/server_spec.rb +++ b/spec/classes/server_spec.rb @@ -363,7 +363,8 @@ 'mongo1:27017', 'mongo2:27017', 'mongo3:27017' - ] + ], + 'arbiter' => undef, } } end From a57a1befd5f0e22d0f5898e679d5bf26925e1b72 Mon Sep 17 00:00:00 2001 From: Armin Pech <a.pech@babiel.com> Date: Thu, 1 Nov 2018 17:21:29 +0100 Subject: [PATCH 4/6] fixup! fixup server spec when arbiter is not set --- spec/classes/server_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/classes/server_spec.rb b/spec/classes/server_spec.rb index bd594b9e0..b06f652ba 100644 --- a/spec/classes/server_spec.rb +++ b/spec/classes/server_spec.rb @@ -364,7 +364,7 @@ 'mongo2:27017', 'mongo3:27017' ], - 'arbiter' => undef, + 'arbiter' => :undef } } end @@ -406,7 +406,7 @@ 'mongo2:27017', 'mongo3:27017' ], - 'arbiter' => 'mongo3:27017' + 'replset_arbiter' => 'mongo3:27017' } end From 200ba8d0fb81a619c7ed648c824afdcdbf4c8f5f Mon Sep 17 00:00:00 2001 From: Armin Pech <a.pech@babiel.com> Date: Thu, 1 Nov 2018 17:45:38 +0100 Subject: [PATCH 5/6] fixup! fixup server spec when arbiter is not set --- spec/classes/server_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/classes/server_spec.rb b/spec/classes/server_spec.rb index b06f652ba..37dba11d3 100644 --- a/spec/classes/server_spec.rb +++ b/spec/classes/server_spec.rb @@ -376,7 +376,8 @@ 'mongo1:27017', 'mongo2:27017', 'mongo3:27017' - ] + ], + 'replset_arbiter' => :undef } end From a32aac9cceb61962e2df095881e2e6e28a923b33 Mon Sep 17 00:00:00 2001 From: Armin Pech <github@arminpech.de> Date: Fri, 7 Dec 2018 09:20:46 +0100 Subject: [PATCH 6/6] enforce min string length for opt replset_arbiter see suggestion by @bastelfreak from https://github.com/voxpupuli/puppet-mongodb/pull/433#discussion_r230343052 --- manifests/server.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/server.pp b/manifests/server.pp index 504c91e43..bdf0f02e8 100644 --- a/manifests/server.pp +++ b/manifests/server.pp @@ -53,7 +53,7 @@ Optional[String] $replset = undef, Optional[Hash] $replset_config = undef, Optional[Array] $replset_members = undef, - Optional[String] $replset_arbiter = undef, + Optional[String[1]] $replset_arbiter = undef, Optional[Boolean] $configsvr = undef, Optional[Boolean] $shardsvr = undef, Optional[Boolean] $rest = undef,