mongo-db-utils 0.0.9 → 0.0.9.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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/Gemfile +0 -5
- data/README.md +18 -3
- data/integration-test-env/.gitignore +4 -0
- data/integration-test-env/README.md +29 -0
- data/integration-test-env/create_two_replica_sets +76 -0
- data/integration-test-env/create_two_standalone_dbs +27 -0
- data/integration-test-env/helper.rb +50 -0
- data/integration-test-env/kill_processes +19 -0
- data/integration-test-env/replica_sets/config.yml +21 -0
- data/integration-test-env/seed_replica_sets +15 -0
- data/integration-test-env/standalone/config.yml +19 -0
- data/lib/mongo-db-utils/cli.rb +27 -10
- data/lib/mongo-db-utils/cmd.rb +8 -24
- data/lib/mongo-db-utils/config-loader.rb +33 -24
- data/lib/mongo-db-utils/console.rb +68 -5
- data/lib/mongo-db-utils/models/bucket.rb +17 -0
- data/lib/mongo-db-utils/models/config.rb +82 -0
- data/lib/mongo-db-utils/models/db.rb +81 -0
- data/lib/mongo-db-utils/tools/commands.rb +80 -0
- data/lib/mongo-db-utils/version.rb +1 -1
- data/mongo-db-utils.gemspec +4 -4
- data/spec/config_loader_spec.rb +30 -0
- data/spec/config_proxy_spec.rb +33 -0
- data/spec/models/config_spec.rb +52 -0
- data/spec/models/db_spec.rb +36 -0
- data/spec/mongo_tools_cmd_spec.rb +38 -0
- metadata +42 -45
- data/lib/mongo-db-utils/cmd/mongotools.rb +0 -68
- data/lib/mongo-db-utils/models.rb +0 -161
- data/spec/config-loader-spec.rb +0 -21
- data/spec/mongo_db_utils_spec.rb +0 -65
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'aws/s3'
|
2
|
-
|
3
|
-
module MongoDbUtils
|
4
|
-
module Commands
|
5
|
-
|
6
|
-
class MongoTools
|
7
|
-
|
8
|
-
# wrapper for monogdump shell command
|
9
|
-
def self.dump(host,port,db,output,username = "", password = "")
|
10
|
-
|
11
|
-
options = []
|
12
|
-
options << o("-h", "#{host}:#{port}")
|
13
|
-
options << o("-db", db)
|
14
|
-
options << o("-o", output)
|
15
|
-
options << o("-u", username)
|
16
|
-
options << o("-p", password)
|
17
|
-
|
18
|
-
cmd = "mongodump "
|
19
|
-
|
20
|
-
options.each do |o|
|
21
|
-
cmd << "#{o.key} #{o.value} " unless o.empty?
|
22
|
-
end
|
23
|
-
`#{cmd}`
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
# wrapper for mongorestore shell command
|
28
|
-
def self.restore(host,port,db,source_folder,username = "", password = "")
|
29
|
-
|
30
|
-
options = []
|
31
|
-
options << o("-h", "#{host}:#{port}")
|
32
|
-
options << o("-db", db)
|
33
|
-
options << o("-u", username)
|
34
|
-
options << o("-p", password)
|
35
|
-
|
36
|
-
cmd = "mongorestore "
|
37
|
-
|
38
|
-
options.each do |o|
|
39
|
-
cmd << "#{o.key} #{o.value} " unless o.empty?
|
40
|
-
end
|
41
|
-
#ensure that we drop everything before we restore.
|
42
|
-
cmd << "--drop "
|
43
|
-
cmd << "#{source_folder}"
|
44
|
-
`#{cmd}`
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
def self.o(key,value)
|
49
|
-
Option.new(key,value)
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
class Option
|
55
|
-
attr_accessor :key, :value
|
56
|
-
|
57
|
-
def initialize(key,value)
|
58
|
-
@key = key
|
59
|
-
@value = value
|
60
|
-
end
|
61
|
-
|
62
|
-
def empty?
|
63
|
-
@value.nil? || @value.empty?
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
end
|
@@ -1,161 +0,0 @@
|
|
1
|
-
module MongoDbUtils
|
2
|
-
|
3
|
-
module Model
|
4
|
-
class Config
|
5
|
-
attr_reader :dbs, :buckets
|
6
|
-
attr_writer :writer
|
7
|
-
attr_accessor :backup_folder
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@dbs = []
|
11
|
-
@buckets = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def empty?
|
15
|
-
@dbs.nil? || @dbs.empty?
|
16
|
-
end
|
17
|
-
|
18
|
-
def has_buckets?
|
19
|
-
!@buckets.nil? && !@buckets.empty?
|
20
|
-
end
|
21
|
-
|
22
|
-
|
23
|
-
def flush
|
24
|
-
@dbs = []
|
25
|
-
@writer.flush
|
26
|
-
end
|
27
|
-
|
28
|
-
def remove_db(db)
|
29
|
-
@dbs = @dbs - [db]
|
30
|
-
@writer.save(self)
|
31
|
-
end
|
32
|
-
|
33
|
-
def add_db_from_uri(uri)
|
34
|
-
@dbs = [] if @dbs.nil?
|
35
|
-
db = Db.from_uri(uri)
|
36
|
-
unless db.nil? || already_contains(db)
|
37
|
-
@dbs << db
|
38
|
-
@dbs.sort!
|
39
|
-
@writer.save(self)
|
40
|
-
end
|
41
|
-
!db.nil?
|
42
|
-
end
|
43
|
-
|
44
|
-
def already_contains(db)
|
45
|
-
@dbs.each do |existing|
|
46
|
-
if( existing.to_s == db.to_s)
|
47
|
-
return true
|
48
|
-
end
|
49
|
-
|
50
|
-
if( existing.host == db.host && existing.name == db.name)
|
51
|
-
return true
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
return false
|
56
|
-
end
|
57
|
-
|
58
|
-
# because we are serializing the config - the bucket may be nil
|
59
|
-
# at this point
|
60
|
-
def add_bucket(bucket)
|
61
|
-
@buckets = [] if @buckets.nil?
|
62
|
-
unless bucket.nil? || already_contains_bucket?(bucket)
|
63
|
-
@buckets << bucket
|
64
|
-
@writer.save(self)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def already_contains_bucket?(bucket)
|
69
|
-
puts "@buckets: #{@buckets}"
|
70
|
-
@buckets.each do |b|
|
71
|
-
if( b.to_s == bucket.to_s )
|
72
|
-
return true
|
73
|
-
end
|
74
|
-
end
|
75
|
-
return false
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
def save
|
80
|
-
@writer.save(self)
|
81
|
-
end
|
82
|
-
|
83
|
-
def to_s
|
84
|
-
"Config"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
class Bucket
|
89
|
-
attr_accessor :name, :access_key, :secret_key
|
90
|
-
|
91
|
-
def to_s
|
92
|
-
"#{name} | #{access_key} | #{secret_key}"
|
93
|
-
end
|
94
|
-
|
95
|
-
def <=> (other)
|
96
|
-
self.name <=> other.name
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
# A Db stored in the config
|
102
|
-
class Db
|
103
|
-
|
104
|
-
URI_NO_USER = /mongodb:\/\/(.*):(.*)\/(.*$)/
|
105
|
-
URI_USER = /mongodb:\/\/(.*):(.*)@(.*):(.*)\/(.*$)/
|
106
|
-
|
107
|
-
attr_accessor :host, :username, :password, :port, :name
|
108
|
-
|
109
|
-
def initialize(name, host, port, username=nil, password=nil)
|
110
|
-
@host = host
|
111
|
-
@port = port
|
112
|
-
@name = name
|
113
|
-
@username = username
|
114
|
-
@password = password
|
115
|
-
end
|
116
|
-
|
117
|
-
def self.from_uri(uri)
|
118
|
-
|
119
|
-
user,pwd,host,port,db = nil
|
120
|
-
|
121
|
-
if( uri.match(URI_USER))
|
122
|
-
match, user, pwd, host, port, name = *uri.match(URI_USER)
|
123
|
-
elsif(uri.match(URI_NO_USER))
|
124
|
-
match, host, port, name = *uri.match(URI_NO_USER)
|
125
|
-
user = ""
|
126
|
-
pwd = ""
|
127
|
-
end
|
128
|
-
|
129
|
-
return nil if( host.nil? || port.nil? || name.nil? )
|
130
|
-
|
131
|
-
Db.new(name,host,port,user,pwd)
|
132
|
-
end
|
133
|
-
|
134
|
-
def authentication_required?
|
135
|
-
has?(self.username) && has?(self.password)
|
136
|
-
end
|
137
|
-
|
138
|
-
def has?(s)
|
139
|
-
!s.nil? && !s.empty?
|
140
|
-
end
|
141
|
-
|
142
|
-
|
143
|
-
def to_s
|
144
|
-
user_pass = ""
|
145
|
-
unless(@username.empty? || @password.empty? )
|
146
|
-
user_pass = "#{@username}:#{@password}@"
|
147
|
-
end
|
148
|
-
"mongodb://#{user_pass}#{@host}:#{@port}/#{@name}"
|
149
|
-
end
|
150
|
-
|
151
|
-
def to_s_simple
|
152
|
-
"#{@name} on #{@host}:#{@port} - (#{@username}:#{@password})"
|
153
|
-
end
|
154
|
-
|
155
|
-
def <=>(other)
|
156
|
-
self.to_s <=> other.to_s
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
data/spec/config-loader-spec.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'mongo-db-utils/config-loader'
|
2
|
-
|
3
|
-
describe MongoDbUtils do
|
4
|
-
|
5
|
-
it "should create a config if one doesn't exist" do
|
6
|
-
|
7
|
-
tmp_file = ".tmp_path/config.yml"
|
8
|
-
|
9
|
-
FileUtils.rm_rf(".tmp_path")
|
10
|
-
|
11
|
-
File.exist?(tmp_file).should eql(false)
|
12
|
-
|
13
|
-
config = MongoDbUtils::ConfigLoader.load(".tmp_path/config.yml")
|
14
|
-
|
15
|
-
File.exist?(tmp_file).should eql(true)
|
16
|
-
|
17
|
-
FileUtils.rm_rf(".tmp_path")
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
data/spec/mongo_db_utils_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'mongo-db-utils/models'
|
2
|
-
|
3
|
-
|
4
|
-
describe MongoDbUtils::Model do
|
5
|
-
|
6
|
-
it "should parse mongo uris" do
|
7
|
-
|
8
|
-
uri = "mongodb://localhost:27017/ed-backup"
|
9
|
-
db = MongoDbUtils::Model::Db.from_uri(uri)
|
10
|
-
db.to_s.should eql(uri)
|
11
|
-
db.host.should eql("localhost")
|
12
|
-
db.port.should eql("27017")
|
13
|
-
db.name.should eql("ed-backup")
|
14
|
-
db.username.should eql("")
|
15
|
-
|
16
|
-
db.authentication_required?.should eql(false)
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should parse mongo uris" do
|
21
|
-
|
22
|
-
uri = "mongodb://ed:password@localhost:27017/ed-backup"
|
23
|
-
db = MongoDbUtils::Model::Db.from_uri(uri)
|
24
|
-
db.to_s.should eql(uri)
|
25
|
-
db.host.should eql("localhost")
|
26
|
-
db.port.should eql("27017")
|
27
|
-
db.name.should eql("ed-backup")
|
28
|
-
db.username.should eql("ed")
|
29
|
-
db.password.should eql("password")
|
30
|
-
db.authentication_required?.should eql(true)
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should return nil if its a bad uri" do
|
35
|
-
|
36
|
-
uri = ""
|
37
|
-
db = MongoDbUtils::Model::Db.from_uri(uri)
|
38
|
-
db.should be(nil)
|
39
|
-
end
|
40
|
-
|
41
|
-
class MockWriter
|
42
|
-
def save(config)
|
43
|
-
end
|
44
|
-
|
45
|
-
def flush
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
it "config should add dbs only if they are different" do
|
51
|
-
config = MongoDbUtils::Model::Config.new
|
52
|
-
config.writer = MockWriter.new
|
53
|
-
|
54
|
-
config.add_db_from_uri("mongodb://blah:3333@server:123/blah")
|
55
|
-
config.dbs.length.should eql(1)
|
56
|
-
config.add_db_from_uri("mongodb://blah:3333@server:123/blah")
|
57
|
-
config.dbs.length.should eql(1)
|
58
|
-
# still the same server + name
|
59
|
-
config.add_db_from_uri("mongodb://server:123/blah")
|
60
|
-
config.dbs.length.should eql(1)
|
61
|
-
config.add_db_from_uri("mongodb://server2:123/blah")
|
62
|
-
config.dbs.length.should eql(2)
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|