vagrant-mongodb 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,16 +15,17 @@ module VagrantPlugins
|
|
15
15
|
def call(env)
|
16
16
|
@app.call(env)
|
17
17
|
|
18
|
-
# check if the current machine is a member of a replica set
|
18
|
+
# check if the current machine is a member of a replica set and the
|
19
|
+
# replica set has not already been initiated
|
19
20
|
@logger.info "Checking if '#{@machine.name}' is part of a replica set..."
|
20
21
|
rs = get_replset(@machine.name) if @config
|
21
|
-
return if !rs
|
22
|
+
return if !rs or already_initiated?(rs)
|
22
23
|
|
23
24
|
# ensure all members are available before initiating replica set
|
24
25
|
if all_members_available?(rs)
|
25
26
|
env[:ui].info @translator.t('initiate', { :name => rs.name })
|
26
27
|
command = "mongo --eval 'printjson(rs.initiate(#{generate_json(rs)}))'"
|
27
|
-
|
28
|
+
@machine.communicate.execute(command) do |type, data|
|
28
29
|
raise Errors::ReplSetInitiateError if data =~ /"ok" : 0/
|
29
30
|
end
|
30
31
|
end
|
@@ -92,6 +93,19 @@ module VagrantPlugins
|
|
92
93
|
|
93
94
|
ip || machine.ssh_info[:host]
|
94
95
|
end
|
96
|
+
|
97
|
+
# check if the replica set has already been initiated
|
98
|
+
def already_initiated?(rs)
|
99
|
+
@logger.info "Checking if '#{rs.name}' has already been initiated..."
|
100
|
+
command = "mongo --eval 'printjson(rs.status())'"
|
101
|
+
begin
|
102
|
+
@machine.communicate.execute(command) do |type, data|
|
103
|
+
return true if data =~ /"ok" : 1/
|
104
|
+
end
|
105
|
+
rescue Vagrant::Errors::VagrantError
|
106
|
+
end
|
107
|
+
false
|
108
|
+
end
|
95
109
|
end
|
96
110
|
end
|
97
111
|
end
|
@@ -20,9 +20,12 @@ module VagrantPlugins
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def replset(name, &block)
|
23
|
-
rs =
|
23
|
+
rs = @replsets.find { |r| r.name == name.to_sym }
|
24
|
+
if !rs
|
25
|
+
rs = ReplSet.new(name)
|
26
|
+
@replsets << rs
|
27
|
+
end
|
24
28
|
block.call(rs)
|
25
|
-
@replsets << rs
|
26
29
|
end
|
27
30
|
|
28
31
|
class ReplSet
|
@@ -30,12 +33,17 @@ module VagrantPlugins
|
|
30
33
|
attr_reader :members
|
31
34
|
|
32
35
|
def initialize(name)
|
33
|
-
@name = name
|
36
|
+
@name = name.to_sym
|
34
37
|
@members = []
|
35
38
|
end
|
36
39
|
|
37
40
|
def member(name, options = {})
|
38
|
-
@members
|
41
|
+
member = @members.find { |m| m[:host] == name.to_sym }
|
42
|
+
if member
|
43
|
+
member.merge(options)
|
44
|
+
else
|
45
|
+
@members << options.merge({ :_id => @members.size, :host => name.to_sym })
|
46
|
+
end
|
39
47
|
end
|
40
48
|
end
|
41
49
|
end
|
@@ -9,17 +9,20 @@ module VagrantPlugins
|
|
9
9
|
This plugin manages a MongoDb replica set.
|
10
10
|
DESC
|
11
11
|
|
12
|
+
def self.replset_initiate(hook)
|
13
|
+
setup_logging
|
14
|
+
setup_i18n
|
15
|
+
hook.before(Vagrant::Action::Builtin::Provision, Actions::ReplSetInitiate)
|
16
|
+
end
|
17
|
+
|
12
18
|
config(:mongodb) do
|
13
19
|
require_relative 'config'
|
14
20
|
Config
|
15
21
|
end
|
16
22
|
|
17
23
|
# initiate replica set after machine provisioning
|
18
|
-
action_hook(:replset_initiate, :
|
19
|
-
|
20
|
-
setup_i18n
|
21
|
-
hook.before(Vagrant::Action::Builtin::Provision, Actions::ReplSetInitiate)
|
22
|
-
end
|
24
|
+
action_hook(:replset_initiate, :machine_action_provision, &method(:replset_initiate))
|
25
|
+
action_hook(:replset_initiate, :machine_action_up, &method(:replset_initiate))
|
23
26
|
|
24
27
|
def self.setup_i18n
|
25
28
|
I18n.load_path << File.expand_path(
|
data/test/Vagrantfile
CHANGED
@@ -8,7 +8,7 @@ Vagrant.configure('2') do |config|
|
|
8
8
|
config.mongodb.replset :rs0 do |rs|
|
9
9
|
rs.member :server1, :priority => 1
|
10
10
|
rs.member :server2, :priority => 2
|
11
|
-
rs.member :server3
|
11
|
+
rs.member :server3
|
12
12
|
end
|
13
13
|
|
14
14
|
script = <<-SCRIPT
|
@@ -20,14 +20,14 @@ Vagrant.configure('2') do |config|
|
|
20
20
|
config.vm.provision :shell, :inline => script
|
21
21
|
|
22
22
|
config.vm.define :server1 do |server|
|
23
|
-
server.vm.network :private_network, :ip => '10.
|
23
|
+
server.vm.network :private_network, :ip => '10.10.5.2'
|
24
24
|
end
|
25
25
|
|
26
26
|
config.vm.define :server2 do |server|
|
27
|
-
server.vm.network :private_network, :ip => '10.
|
27
|
+
server.vm.network :private_network, :ip => '10.10.5.3'
|
28
28
|
end
|
29
29
|
|
30
30
|
config.vm.define :server3 do |server|
|
31
|
-
server.vm.network :private_network, :ip => '10.
|
31
|
+
server.vm.network :private_network, :ip => '10.10.5.4'
|
32
32
|
end
|
33
33
|
end
|
data/test/test.sh
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-mongodb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A Vagrant plugin that manages a MongoDb replicaset
|
15
15
|
email:
|