diff --git a/README.md b/README.md index 437c055bc..741ba5f04 100644 --- a/README.md +++ b/README.md @@ -449,6 +449,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. @@ -456,7 +461,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..bdf0f02e8 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[1]] $replset_arbiter = undef, Optional[Boolean] $configsvr = undef, Optional[Boolean] $shardsvr = undef, Optional[Boolean] $rest = undef, @@ -115,6 +116,8 @@ # 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.') + } 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.') @@ -129,6 +132,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..37dba11d3 100644 --- a/spec/classes/server_spec.rb +++ b/spec/classes/server_spec.rb @@ -363,7 +363,38 @@ 'mongo1:27017', 'mongo2:27017', 'mongo3:27017' - ] + ], + 'arbiter' => :undef + } + } + end + + let(:params) do + { + replset: 'rsTest', + replset_members: [ + 'mongo1:27017', + 'mongo2:27017', + 'mongo3:27017' + ], + 'replset_arbiter' => :undef + } + end + + 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 @@ -375,7 +406,8 @@ 'mongo1:27017', 'mongo2:27017', 'mongo3:27017' - ] + ], + 'replset_arbiter' => 'mongo3:27017' } end