mondupe 0.0.11 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mondupe +32 -4
  3. data/lib/mondupe.rb +15 -7
  4. metadata +6 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7b96c50086a408f34b757f09df9ee7e44d9224da
4
- data.tar.gz: d428ad64d5aa4d7244f7525ebe32cdb30b8a2430
3
+ metadata.gz: 0006b87e2549eb7f41df32766cae37b019cebcc1
4
+ data.tar.gz: b561adb1e93b78e98770265e48e0d57238972cdc
5
5
  SHA512:
6
- metadata.gz: 1be599141a1fecc4c3f67b5013b1f20f3bbe02dc093337399ec684c288604692984034b4f7691c3a945d5f0bfd3bdd19ecfab82b65ce1ad2c7d8b11bde5def75
7
- data.tar.gz: 9dc632b98e945c2aef4c45b6e5371e41df6d772390d72869ec649d7dbbac3ce86981c46fdb77e95897313114ec9b9b0d31154669d8820b1baabf104d639ba23a
6
+ metadata.gz: 3467656b563b145a23aec9f4fabf4366d45a319b618edc48f19eea9304fd04fe1795d122c5dd9255b2156d134668ba4ea6107da4c9ee7d667b741a709d7c39e6
7
+ data.tar.gz: 6233d1f9bee088940acf1b20b1e7b4783910898a1c22e65ab920e65a16c0a8ca82ddcb9cba4b1631d858e22753825aa3e27aa63966de3ec7c2b8f47d9ca40dde
data/bin/mondupe CHANGED
@@ -22,7 +22,7 @@ opt_parser = OptionParser.new do |opt|
22
22
  opt.separator " Requires -n [name] -a [ipaddress]"
23
23
  opt.separator " restore - Restore a mongo dump that exists on a host"
24
24
  opt.separator " Requires -n [name] -a [ipaddress]"
25
- opt.separator " Optional -t [tmpdir]"
25
+ opt.separator " Optional -t [tmpdir] -u [mongo_username] -p [mongo_password] -c [mongo_authdb]"
26
26
  opt.separator " expire - (coming soon) Reset the expiration days of a node"
27
27
  opt.separator " Requires ( -n [name] || -d [id] || -a [ipaddress] ) -e [expire_days]"
28
28
  opt.separator " list - (coming soon) List all mongo hosts."
@@ -70,6 +70,22 @@ opt_parser = OptionParser.new do |opt|
70
70
  $options[:size] = size
71
71
  end
72
72
 
73
+ opt.on("-n","--mongodbname","Database name to restore to") do |mongo_db_name|
74
+ $options[:mongo_db_name] = mongo_db_name
75
+ end
76
+
77
+ opt.on("-u","--mongouser","Username to authenticate to mongodb with") do |mongo_user|
78
+ $options[:mongo_user] = mongo_user
79
+ end
80
+
81
+ opt.on("-p","--mongopass","Password to authenticate to mongodb with") do |mongo_pass|
82
+ $options[:mongo_pass] = mongo_pass
83
+ end
84
+
85
+ opt.on("-c","--mongoauthdb","Database to authenticate against for mongo") do |mongo_auth_db|
86
+ $options[:mongo_auth_db] = mongo_auth_db
87
+ end
88
+
73
89
  opt.on("-h","--help","help") do
74
90
  puts opt_parser
75
91
  end
@@ -81,6 +97,11 @@ opt_parser = OptionParser.new do |opt|
81
97
  opt.separator " - MONDUPE_S3_BUCKET_NAME"
82
98
  opt.separator " - MONDUPE_KEY_PAIR_NAME"
83
99
  opt.separator ""
100
+ opt.separator " Optional: (no default)"
101
+ opt.separator " - MONGO_USER"
102
+ opt.separator " - MONGO_PASS"
103
+ opt.separator " - MONGO_AUTH_DB"
104
+ opt.separator ""
84
105
  opt.separator " Optional: (have sane defaults)"
85
106
  opt.separator " - MONDUPE_INSTANCE_IMAGE_ID"
86
107
  opt.separator " - MONDUPE_CHEF_RUN_LIST"
@@ -89,6 +110,9 @@ opt_parser = OptionParser.new do |opt|
89
110
  opt.separator " - MONDUPE_SSH_KEY"
90
111
  opt.separator " - MONDUPE_SSH_USER"
91
112
  opt.separator " - MONDUPE_DUMP_FILE_NAME"
113
+ opt.separator ""
114
+ opt.separator " Optional as ENV Variable. Must be specified via command line or ENV. No default."
115
+ opt.separator " - MONGO_DB_NAME"
92
116
  end
93
117
 
94
118
  opt_parser.parse!
@@ -101,6 +125,10 @@ instance_ipaddress = $options[:ipaddress] || nil
101
125
  instance_id = $options[:id] || nil
102
126
  dump_tmp_path = $options[:tmpdir] || '/tmp'
103
127
  expire_days = $options[:expire_days] || 3
128
+ mongo_db_name = $options[:mongo_db_name] || ENV['MONGO_DB_NAME'] || nil
129
+ mongo_user = $options[:mongo_user] || ENV['MONGO_USER'] || nil
130
+ mongo_pass = $options[:mongo_pass] || ENV['MONGO_PASS'] || nil
131
+ mongo_auth_db = $options[:mongo_auth_db] || ENV['MONGO_AUTH_DB'] || nil
104
132
  instance_count = 1
105
133
  chef_run_list = ENV['MONDUPE_CHEF_RUN_LIST'] || ""
106
134
  chef_environment = ENV['MONDUPE_CHEF_ENVIRONMENT'] || "default"
@@ -114,7 +142,7 @@ security_group = ENV['MONDUPE_SECURITY_GROUP'] || nil
114
142
  s3_bucket_name = ENV['MONDUPE_S3_BUCKET_NAME'] || nil
115
143
  dump_file_name = ENV['MONDUPE_DUMP_FILE_NAME'] || 'mongodb.dump.tgz'
116
144
  knife_exec = ENV['MONDUPE_KNIFE_EXEC'] || 'knife'
117
- instance_volume_size = 80
145
+ instance_volume_size = 60
118
146
 
119
147
  case ARGV[0]
120
148
  when "create"
@@ -125,7 +153,7 @@ when "create"
125
153
  Mondupe.new.create_dns(instance_fqdn, route53_domain, instance)
126
154
  Mondupe.new.bootstrap(instance_name, instance_fqdn, instance.ip_address, chef_environment, chef_identity_file, chef_run_list, ssh_user, knife_exec)
127
155
  Mondupe.new.get_db_dump_from_s3(instance.ip_address, s3_bucket_name, dump_tmp_path, ssh_user, dump_file_name)
128
- Mondupe.new.restore_db(instance.ip_address, dump_tmp_path, ssh_key, ssh_user, dump_file_name)
156
+ Mondupe.new.restore_db(instance.ip_address, dump_tmp_path, ssh_key, ssh_user, dump_file_name, mongo_db_name, mongo_user, mongo_pass, mongo_auth_db)
129
157
  puts " - - - Total Run Time: #{((total_seconds % 3600) / 60).to_i}m #{((total_seconds % 3600) % 60).to_i}s - - -"
130
158
  when "delete"
131
159
  puts "delete mongo host"
@@ -138,7 +166,7 @@ when "dumps3"
138
166
  Mondupe.new.get_db_dump_from_s3(instance_ipaddress, s3_bucket_name, dump_tmp_path, ssh_user, dump_file_name)
139
167
  when "restore"
140
168
  puts "Restoring mongo database from dump"
141
- Mondupe.new.restore_db(instance_ipaddress, dump_tmp_path, ssh_key, ssh_user, dump_file_name)
169
+ Mondupe.new.restore_db(instance_ipaddress, dump_tmp_path, ssh_key, ssh_user, dump_file_name, mongo_db_name, mongo_user, mongo_pass, mongo_auth_db)
142
170
  when "terminate"
143
171
  puts "Marking instance for termination"
144
172
  Mondupe.new.terminate_instance(instance_id)
data/lib/mondupe.rb CHANGED
@@ -112,31 +112,39 @@ class Mondupe
112
112
  puts "Download URL: #{download_url}"
113
113
  puts "#{Time.now.to_s} - Starting download."
114
114
  puts " Please wait..."
115
- `ssh -i ~/.ssh/DevOps.pem #{ssh_user}@#{instance_ip} "sudo mkdir -p #{dump_tmp_path} && sudo chown -R #{ssh_user} #{dump_tmp_path} && cd #{dump_tmp_path} && wget '#{download_url}' -O #{File.join(dump_tmp_path, dump_file_name)} 2&>1"`
115
+ `ssh -i ~/.ssh/DevOps.pem #{ssh_user}@#{instance_ip} "sudo mkdir -p #{dump_tmp_path} && cd #{dump_tmp_path} && wget '#{download_url}' -O #{File.join(dump_tmp_path, dump_file_name)} 2&>1"`
116
116
  puts "#{Time.now.to_s} - Download completed"
117
117
  end
118
118
 
119
- def restore_db(instance_ip, dump_tmp_path, ssh_key, ssh_user, dump_file_name)
119
+ def add_user(instance_ip, username, password, database, roles)
120
+ #add db users here
121
+ end
122
+
123
+ def restore_db(instance_ip, dump_tmp_path, ssh_key, ssh_user, dump_file_name, mongo_db_name, mongo_user, mongo_pass, mongo_auth_db)
120
124
  # Restore from the database dump
121
125
  # TODO - Fail the process if any step fails
126
+ abort "You must specify a database name to drop and restore. Use -n [name] or ENV['MONGO_DB_NAME'] to set this value." if mongo_db_name.nil?
127
+ db_connect_string = "mongo #{mongo_db_name}"
128
+ db_connect_string << " -u \"#{mongo_user}\" -p \"#{mongo_pass}\"" if !mongo_user.nil? && !mongo_pass.nil?
129
+ db_connect_string << " --authenticationDatabase \"#{mongo_auth_db}\"" if !mongo_auth_db.nil?
122
130
  puts "#{Time.now.to_s} - Dropping existing database"
123
- `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "echo 'db.dropDatabase()' | mongo cde_production"`
131
+ `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "echo 'db.dropDatabase()' | #{db_connect_string}"`
124
132
  if $?.success? then puts "#{Time.now.to_s} - Database drop complete" else abort("Error dropping database") end
125
133
  puts "Extracting database dump archive file..."
126
134
  `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "cd #{dump_tmp_path}; tar xf #{dump_file_name}"`
127
135
  if $?.success? then puts "#{Time.now.to_s} - Extraction complete!" else abort("Error extracting archive") end
128
- puts "Restoring Mongo Database from extracted dump: #{File.join(dump_tmp_path, "cde_production")}"
129
- `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "time mongorestore #{File.join(dump_tmp_path, "cde_production")}"`
136
+ puts "Restoring Mongo Database from extracted dump: #{File.join(dump_tmp_path, "#{mongo_db_name}")}"
137
+ `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "time mongorestore #{File.join(dump_tmp_path, "#{mongo_db_name}")}"`
130
138
  if $?.success? then puts "#{Time.now.to_s} - Database restore complete!" else abort("Error restoring databse") end
131
139
  puts "Removing database archive file"
132
140
  `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "rm -rf #{File.join(dump_tmp_path, dump_file_name)}"`
133
141
  if $?.success? then puts "#{Time.now.to_s} - Archive removed!" else abort("Error removing archive") end
134
142
  puts "#{Time.now.to_s} - Removing saved searches"
135
- puts `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "mongo cde_production --eval \\"db.users.update({save_searches: {$ne: null}}, {$unset: {save_searches: ''}}, {multi: true})\\""`
143
+ puts `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "#{db_connect_string} --eval 'db.users.update({save_searches: {$ne: null}}, {$unset: {save_searches: \\"\\"}}, {multi: true})'"`
136
144
  #Need to find a way to test the prior command as it does not return a success or fail like the other commands
137
145
  #if $?.success? then puts "#{Time.now.to_s} - Saved searches removed" else abort("Error removing saved searches") end
138
146
  puts "#{Time.now.to_s} - Cleaning up our mess..."
139
- `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "rm -rf #{File.join(dump_tmp_path, 'cde_production')}"`
147
+ `ssh -i #{ssh_key} #{ssh_user}@#{instance_ip} "rm -rf #{File.join(dump_tmp_path, "#{mongo_db_name}")}"`
140
148
  if $?.success? then puts "#{Time.now.to_s} - Mess cleaned up!" else abort("Error cleaning up after myself...") end
141
149
  end
142
150
 
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mondupe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Philip Hutchins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-25 00:00:00.000000000 Z
11
+ date: 2014-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.38'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.38'
27
27
  description: Create an AWS EC2 node and restore a MongoDB dump to it from an AWS S3
@@ -44,12 +44,12 @@ require_paths:
44
44
  - lib
45
45
  required_ruby_version: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  required_rubygems_version: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  requirements: []
@@ -59,4 +59,3 @@ signing_key:
59
59
  specification_version: 4
60
60
  summary: MonDupe
61
61
  test_files: []
62
- has_rdoc: