vmc_knife 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -25,13 +25,7 @@ class VMC::Cli::KnifeRunner < VMC::Cli::Runner
25
25
  when 'expand-manifest'
26
26
  usage('vmc_knife expand-manifest <path_to_json_manifest> <path_to_destination_expanded_manifest>')
27
27
  @args.shift # consumes the argument.
28
- if @args.size == 1
29
- set_cmd(:knife, :expand_manifest, 1)
30
- elsif @args.size == 2
31
- set_cmd(:knife, :expand_manifest, 2)
32
- else
33
- set_cmd(:knife, :expand_manifest)
34
- end
28
+ set_cmd(:knife, :expand_manifest, @args.size)
35
29
  when 'login', 'target'
36
30
  usage('vmc_knife login [<path_to_json_manifest>]')
37
31
  @args.shift # consumes the argument.
@@ -137,7 +131,7 @@ class VMC::Cli::KnifeRunner < VMC::Cli::Runner
137
131
  set_cmd(:knifeapps, :delete_all, @args.size) # too many
138
132
  end
139
133
  when 'data-shell','psql','mongo'
140
- usage('vmc_knife data-shell [<data-service-name>] [<app-name>]')
134
+ usage('vmc_knife data-shell [<data-service-name>] [<app-name>] [<cmd-file> or <quoted-cmd>]')
141
135
  @args.shift # consumes the argument.
142
136
  if @args.size <= 2
143
137
  set_cmd(:knifeapps, :data_shell, @args.size)
@@ -177,7 +171,7 @@ class VMC::Cli::KnifeRunner < VMC::Cli::Runner
177
171
  set_cmd(:knifeapps, :data_shrink, @args.size) # too many
178
172
  end
179
173
  when 'data-import'
180
- usage('vmc_knife data-import [<data-service-name>] [<tables-collection-regexp>]')
174
+ usage('vmc_knife data-import [<data-service-name>] [<archive-file-name>] [<tables-collection-regexp>]')
181
175
  @args.shift # consumes the argument.
182
176
  if @args.size <= 3
183
177
  set_cmd(:knifeapps, :data_import, @args.size)
@@ -185,7 +179,7 @@ class VMC::Cli::KnifeRunner < VMC::Cli::Runner
185
179
  set_cmd(:knifeapps, :data_import, @args.size) # too many
186
180
  end
187
181
  when 'data-export'
188
- usage('vmc_knife data-export [<data-service-name>] [<tables-collection-regexp>]')
182
+ usage('vmc_knife data-export [<data-service-name>] [<archive-file-name>] [<tables-collection-regexp>]')
189
183
  @args.shift # consumes the argument.
190
184
  if @args.size <= 3
191
185
  set_cmd(:knifeapps, :data_export, @args.size)
@@ -38,17 +38,20 @@ module VMC::Cli::Command
38
38
  include VMC::KNIFE::Cli
39
39
 
40
40
  # expands the json manifest. outputs it in the destination path.
41
- def expand_manifest(manifest_file_path, destination=nil)
41
+
42
+ def expand_manifest(manifest_file_path=ENV['VMC_KNIFE_DEFAULT_RECIPE'], destination=nil)
42
43
  res = VMC::KNIFE::JSON_EXPANDER.expand_json manifest_file_path
43
- if destination.nil?
44
- noextension = File.basename(manifest_file_path, File.extname(manifest_file_path))
45
- destination = File.join File.dirname(manifest_file_path), "#{noextension}.expanded.json"
46
- end
47
- display "Expanding the manifest #{manifest_file_path} into #{destination}"
48
- if VMC::Cli::Config.trace
49
- display JSON.pretty_generate(res)
44
+ if destination
45
+ display "Expanding the manifest #{manifest_file_path} into #{destination}"
46
+ if VMC::Cli::Config.trace
47
+ display JSON.pretty_generate(res)
48
+ end
49
+ File.open(destination, 'w') {|f| f.write(JSON.pretty_generate(res)) }
50
+ else
51
+ STDERR.puts "Expanding the manifest #{manifest_file_path}"
52
+ STDOUT.puts JSON.pretty_generate(res)
50
53
  end
51
- File.open(destination, 'w') {|f| f.write(JSON.pretty_generate(res)) }
54
+
52
55
  end
53
56
 
54
57
  # updates the cloud_controller
@@ -194,12 +197,12 @@ module VMC::Cli::Command
194
197
  # nil means all apps for all recipes found in the manifest are configured.
195
198
  # @param recipes The list of recipes: nil: search the apps in all recipes
196
199
  # @param app_role_names The names of the apps in each recipe; nil: configure all apps found.
197
- def configure(recipes_regexp=nil,app_names_regexp=nil,service_names_regexp=nil,manifest_file_path=nil)
200
+ def configure(recipes_regexp=nil,app_names_regexp=nil,service_names_regexp=nil,manifest_file_path=nil,opts=nil)
198
201
  man = load_manifest(manifest_file_path)
199
202
  recipes_regexp = as_regexp(recipes_regexp)
200
203
  app_names_regexp = as_regexp(app_names_regexp)
201
204
  service_names_regexp = as_regexp(service_names_regexp)
202
- configurer = VMC::KNIFE::RecipesConfigurationApplier.new(man,client,recipes_regexp,app_names_regexp,service_names_regexp)
205
+ configurer = VMC::KNIFE::RecipesConfigurationApplier.new(man,client,recipes_regexp,app_names_regexp,service_names_regexp,opts)
203
206
  if VMC::Cli::Config.trace
204
207
  display "Pending updates"
205
208
  display JSON.pretty_generate(configurer.updates_pending)
@@ -226,9 +229,19 @@ module VMC::Cli::Command
226
229
  def delete_all(app_names_regexp=nil,manifest_file_path=nil)
227
230
  recipe_configuror(:delete,nil,app_names_regexp,nil,manifest_file_path)
228
231
  end
229
- def data_shell(data_names_regexp=nil,manifest_file_path=nil)
232
+ def data_shell(data_names_regexp=nil,file_or_cmd=nil,app_name=nil,manifest_file_path=nil)
233
+ file_name = nil
234
+ cmd = nil
235
+ if file_or_cmd
236
+ if File.exist? file_or_cmd
237
+ file_name = file_or_cmd
238
+ else
239
+ cmd = file_or_cmd
240
+ cmd = cmd[1..-1] if cmd.start_with?('"') || cmd.start_with?("'")
241
+ end
242
+ end
230
243
  recipe_configuror(:shell,nil,nil,data_names_regexp,manifest_file_path,
231
- {:data_only=>true})
244
+ {:file_name=>file_name, :data_cmd=>cmd, :app_name=>app_name, :data_only=>true})
232
245
  end
233
246
  def data_credentials(data_names_regexp=nil,manifest_file_path=nil)
234
247
  recipe_configuror(:credentials,nil,nil,data_names_regexp,manifest_file_path,
@@ -238,11 +251,11 @@ module VMC::Cli::Command
238
251
  recipe_configuror(:apply_privileges,nil,nil,data_names_regexp,manifest_file_path,
239
252
  {:data_only=>true})
240
253
  end
241
- def data_import(data_names_regexp=nil,app_name=nil,file_names=nil,manifest_file_path=nil)
254
+ def data_import(data_names_regexp=nil,file_names=nil,app_name=nil,manifest_file_path=nil)
242
255
  recipe_configuror(:import,nil,nil,data_names_regexp,manifest_file_path,
243
256
  {:file_names=>file_names, :app_name=>app_name, :data_only=>true})
244
257
  end
245
- def data_export(data_names_regexp=nil,app_name=nil,file_names=nil,manifest_file_path=nil)
258
+ def data_export(data_names_regexp=nil,file_names=nil,app_name=nil,manifest_file_path=nil)
246
259
  recipe_configuror(:export,nil,nil,data_names_regexp,manifest_file_path,
247
260
  {:file_names=>file_names, :app_name=>app_name, :data_only=>true})
248
261
  end
@@ -119,7 +119,6 @@ module VMC
119
119
  db_arg = "--db #{credentials_hash['db']}"
120
120
  end
121
121
  cmd = "#{mongo_shell} -u #{credentials_hash['username']} -p #{credentials_hash['password']} #{credentials_hash['hostname']}:#{credentials_hash['port']}#{db_arg}"
122
- puts "Executing #{cmd}"
123
122
  if commands_file
124
123
  if mongo_shell == 'mongo'
125
124
  if File.exists? commands_file
@@ -129,8 +128,11 @@ module VMC
129
128
  commands_file = "--eval \"#{commands_file}\""
130
129
  end
131
130
  end
132
- `#{cmd} #{commands_file}`
131
+ the_cmd = "#{cmd} #{commands_file}"
132
+ puts "#{the_cmd}" if VMC::Cli::Config.trace
133
+ puts `#{the_cmd}`
133
134
  else
135
+ puts "#{cmd}" if VMC::Cli::Config.trace
134
136
  # Replaces the current process.
135
137
  exec cmd
136
138
  end
@@ -142,8 +144,11 @@ module VMC
142
144
  else
143
145
  commands_file = "-c \"#{commands_file}\" #{PSQL_RAW_RES_ARGS}"
144
146
  end
145
- `#{cmd} #{commands_file}`
147
+ the_cmd = "#{cmd} #{commands_file}"
148
+ puts "#{the_cmd}" if VMC::Cli::Config.trace
149
+ puts `#{the_cmd}`
146
150
  else
151
+ puts "#{cmd}" if VMC::Cli::Config.trace
147
152
  # Replaces the current process.
148
153
  exec cmd
149
154
  end
@@ -173,9 +178,14 @@ module VMC
173
178
 
174
179
  class RecipesConfigurationApplier
175
180
  def shell()
181
+ app_name = @opts[:app_name] if @opts
182
+ file_name = @opts[:file_name] if @opts
183
+ data_cmd = @opts[:data_cmd] if @opts
184
+ if data_cmd
185
+ file_name = data_cmd
186
+ end
176
187
  @data_services.each do |data_service|
177
- app_name = opts()[:app_name] if opts()
178
- data_service.shell(app_name)
188
+ data_service.shell(file_name)
179
189
  end
180
190
  end
181
191
  def credentials()
@@ -196,8 +206,8 @@ module VMC
196
206
  end
197
207
  end
198
208
  def export()
199
- file_names = opts()[:file_names] if opts()
200
- app_name = opts()[:app_name] if opts()
209
+ file_names = @opts[:file_names] if @opts
210
+ app_name = @opts[:app_name] if @opts
201
211
  @data_services.each do |data_service|
202
212
  data_service.export(app_name,file_names)
203
213
  end
@@ -322,7 +332,7 @@ module VMC
322
332
  base_dir=VMC::KNIFE.get_mongodb_base_dir()
323
333
  instance_name=creds['name']
324
334
  dbpath=File.join(base_dir, instance_name, 'data')
325
- mongod_lock=File.join(dbpath,'mongo.lock')
335
+ mongod_lock=File.join(dbpath,'mongod.lock')
326
336
 
327
337
  if File.exists?(mongod_lock) && File.size(mongod_lock)>0
328
338
  # the mongodb instance is currently working. connect to it and do the work.
@@ -350,13 +360,15 @@ module VMC
350
360
  extension ||= "sql"
351
361
  file = "#{name()}.#{extension}"
352
362
  end
353
- `touch #{file}`
354
- `chmod o+w #{file}`
363
+ archive_unzipped=file
364
+ archive_unzipped="#{name()}.sql" unless /\.sql$/ =~ extension
365
+ `touch #{archive_unzipped}`
366
+ `chmod o+w #{archive_unzipped}`
355
367
  puts "Exports the database #{credentials(app_name)['name']} in #{file}"
356
368
  #sudo -u postgres env PGPASSWORD=intalio DBNAME=intalio DUMPFILE=intalio_dump.sql pg_dump --format=p --file=$DUMPFILE --no-owner --clean --blobs --no-acl --oid --no-tablespaces $DBNAME
357
369
  #sudo -u postgres env PGPASSWORD=$PGPASSWORD DUMPFILE=$DUMPFILE pg_dump --format=p --file=$DUMPFILE --no-owner --clean --blobs --no-acl --oid --no-tablespaces $DBNAME
358
370
 
359
- cmd = VMC::KNIFE.pg_connect_cmd(credentials(app_name), 'pg_dump', false, "--format=p --file=#{file} --no-owner --clean --oids --blobs --no-acl --no-privileges --no-tablespaces")
371
+ cmd = VMC::KNIFE.pg_connect_cmd(credentials(app_name), 'pg_dump', false, "--format=p --file=#{archive_unzipped} --no-owner --clean --oids --blobs --no-acl --no-privileges --no-tablespaces")
360
372
  puts cmd
361
373
  puts `#{cmd}`
362
374
  `chmod o-w #{file}`
@@ -374,29 +386,32 @@ module VMC
374
386
  base_dir=VMC::KNIFE.get_mongodb_base_dir()
375
387
  instance_name=creds['name']
376
388
  dbpath=File.join(base_dir, instance_name, 'data')
377
- mongod_lock=File.join(dbpath,'mongo.lock')
389
+ mongod_lock=File.join(dbpath,'mongod.lock')
390
+ puts "looking at #{mongod_lock} exists? #{File.exists?(mongod_lock)} size #{File.size(mongod_lock)}"
378
391
  if File.exists?(mongod_lock) && File.size(mongod_lock)>0
379
- cmd = "#{mongodump_exec} -u #{credentials_hash['username']} -p #{credentials_hash['password']} --host #{credentials_hash['hostname']}:#{credentials_hash['port']}"
392
+ cmd = "#{mongodump_exec} -u #{creds['username']} -p #{creds['password']} --host #{creds['hostname']}:#{creds['port']} --db db"
380
393
  else
381
394
  cmd = "#{mongodump_exec} --dbpath #{dbpath}"
382
395
  end
383
396
  puts cmd
384
397
  puts `#{cmd}`
398
+ archive_unzipped="dump"
399
+ end
385
400
 
386
- # this produces a dump folder in the working directory.
387
- # let's zip it:
388
- if /\.zip$/ =~ extension
389
- # just zip
390
- `zip -r #{file} dump/`
391
- elsif /\.tar$/ =~ extension
392
- # just tar
393
- `tar cvf #{file} dump/`
394
- else
395
- # tar-gzip by default
396
- `tar czvf #{file} dump/`
397
- end
398
- `rm -rf dump`
401
+
402
+ # this produces a dump folder in the working directory.
403
+ # let's zip it:
404
+ if /\.zip$/ =~ file
405
+ # just zip
406
+ `zip -r #{file} #{archive_unzipped}`
407
+ elsif /\.tar$/ =~ file
408
+ # just tar
409
+ `tar -cvf #{file} #{archive_unzipped}`
410
+ else
411
+ # tar-gzip by default
412
+ `tar -czvf #{file} #{archive_unzipped}`
399
413
  end
414
+ `rm -rf #{archive_unzipped}` if archive_unzipped != file
400
415
  end
401
416
 
402
417
  def is_postgresql()
@@ -416,7 +431,10 @@ module VMC
416
431
  cmd_acl="GRANT CREATE ON SCHEMA PUBLIC TO PUBLIC;\
417
432
  GRANT ALL ON ALL TABLES IN SCHEMA PUBLIC TO PUBLIC;\
418
433
  GRANT ALL ON ALL FUNCTIONS IN SCHEMA PUBLIC TO PUBLIC;\
419
- GRANT ALL ON ALL SEQUENCES IN SCHEMA PUBLIC TO PUBLIC;"
434
+ GRANT ALL ON ALL SEQUENCES IN SCHEMA PUBLIC TO PUBLIC;\
435
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO PUBLIC;\
436
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO PUBLIC;\
437
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO PUBLIC;"
420
438
  shell(cmd_acl,true)
421
439
  end
422
440
  end
@@ -429,7 +447,7 @@ module VMC
429
447
  base_dir=VMC::KNIFE.get_mongodb_base_dir()
430
448
  instance_name=creds['name']
431
449
  dbpath=File.join(base_dir, instance_name, 'data')
432
- mongod_lock=File.join(dbpath,'mongo.lock')
450
+ mongod_lock=File.join(dbpath,'mongod.lock')
433
451
  raise "Can't shrink #{name}; the mongodb is currently running" if File.exists?(mongod_lock) && File.size(mongod_lock)>0
434
452
  mongodump_exec=VMC::KNIFE.get_mongo_exec('mongodump')
435
453
  raise "Can't find mongodump" unless File.exist? mongodump_exec
@@ -35,11 +35,11 @@ module VMC
35
35
  ip = ip_mask[0]
36
36
  mask = ip_mask[1]
37
37
  ip_segs = ip.split('.')
38
- if mask == "255.255.255.0"
38
+ if mask.start_with? "255.255.255."
39
39
  ip_segs[3]
40
- elsif mask == "255.255.0.0"
40
+ elsif mask.start_with? "255.255"
41
41
  "#{ip_segs[2]}-#{ip_segs[3]}"
42
- elsif mask == "255.0.0.0"
42
+ elsif mask.start_with? "255."
43
43
  "#{ip_segs[1]}-#{ip_segs[2]}-#{ip_segs[3]}"
44
44
  else
45
45
  #hum why are we here?
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmc_knife
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 10
10
- version: 0.0.10
9
+ - 11
10
+ version: 0.0.11
11
11
  platform: ruby
12
12
  authors:
13
13
  - Intalio Pte