rake-proxmox 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e86b0404ad3fcc0965de8693897a4f295ec235da
4
- data.tar.gz: 71ce3a0da918ad4f4b5f6c9ebfc64902809f91d5
3
+ metadata.gz: a27b8d9fe5f2c43c1231814abd148e1e0dc29fce
4
+ data.tar.gz: 3abb5c780b1f090c8535e6264d43ee02d2bc43f1
5
5
  SHA512:
6
- metadata.gz: b316f59fdbfb1f5765a332cf335ff35f00a893ed6fa11333eb08c104243f5f3818b90e66c1407ca996d693934fe7d32c67ba062a5ec3d954417318b286581af6
7
- data.tar.gz: 9f7d69532019380f9c7053bb93b9172de8d50136603eb25693d2b4c2f25d054038042a6f522d1a4712fdc8a239a5c132ff8ff5e60add79fe23b894696cef7554
6
+ metadata.gz: ea997af60dd8df5a89b2b2e50eb3e7c580910cd209c7684759517c2faef8dde96f585ce1625850ae153b5e6f07e92780b9a47797e57d0854862b30c82e2d32d2
7
+ data.tar.gz: 5b811e35a87df3463cfb6b92e66fd85f2058a1ae48ba132b39e1d058b109668cd8af641084f51d5bfe1e0aa51458406803324fd18135e1c1125fceff6c04ae9f
data/README.md CHANGED
@@ -21,6 +21,7 @@ Or install it yourself as:
21
21
  Put following block in your `Rakefile`
22
22
 
23
23
  ```ruby
24
+ require 'rake/proxmox'
24
25
  Rake::Proxmox::RakeTasks.new
25
26
  ```
26
27
 
@@ -449,6 +449,21 @@ module Rake
449
449
  http_action_get("nodes/#{node}/storage/#{storage}/content")
450
450
  end
451
451
 
452
+ # get backup job list
453
+ def fetch_backup_jobs
454
+ http_action_get('cluster/backup')
455
+ end
456
+
457
+ # fetch one backup job
458
+ def fetch_backup_job(backupid)
459
+ http_action_get("cluster/backup/#{backupid}")
460
+ end
461
+
462
+ # update backup job
463
+ def update_backup_job(jobid, data)
464
+ http_action_put("cluster/backup/#{jobid}", data)
465
+ end
466
+
452
467
  # upload lxc template
453
468
  def upload_template(filename, node = @node, storage = 'local')
454
469
  "Template #{filename} does not exist locally" unless File.file? filename
@@ -1,5 +1,5 @@
1
1
  module Rake
2
2
  module Proxmox
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
data/lib/rake/proxmox.rb CHANGED
@@ -187,7 +187,7 @@ module Rake
187
187
  update_lxc_status
188
188
  namespace 'proxmox' do
189
189
  desc 'upload template to proxmox storage'
190
- task 'storage:upload:template', %i[filename node storage] \
190
+ task 'storage:upload:template', %i(filename node storage) \
191
191
  do |_t, args|
192
192
  args.with_defaults(storage: 'local')
193
193
  args.with_defaults(node: ENV['PROXMOX_NODE'])
@@ -213,7 +213,7 @@ module Rake
213
213
  end
214
214
 
215
215
  desc 'list proxmox storage'
216
- task 'storage:list', %i[node storage] do |_t, args|
216
+ task 'storage:list', %i(node storage) do |_t, args|
217
217
  args.with_defaults(storage: 'local')
218
218
  args.with_defaults(node: ENV['PROXMOX_NODE'])
219
219
  print "list_storage: #{args.storage}@#{args.node}:\n"
@@ -222,8 +222,96 @@ module Rake
222
222
  end
223
223
  end
224
224
 
225
+ desc 'list all backup jobs'
226
+ task 'cluster:backupjob:list', %i(json) do |_t, args|
227
+ # handle arguments
228
+ args.with_defaults(json: 'false')
229
+ print_json = /true|1|j|y/ =~ args.json ? true : false
230
+ # fetch jobs
231
+ jobs = proxmox.fetch_backup_jobs
232
+ # handle errors
233
+ raise 'Error while fetching backup jobs' unless jobs.is_a?(Array)
234
+ # produce output
235
+ if print_json
236
+ puts jobs.to_json
237
+ else
238
+ puts 'list all backup jobs: '
239
+ jobs.each_with_index do |c, i|
240
+ puts "#{i + 1}. id: #{c['id']}; starttime: #{c['starttime']}"
241
+ end
242
+ end
243
+ end
244
+
245
+ desc 'show details of backup job identified by id'
246
+ task 'cluster:backupjob:show', %i(jobid json) do |_t, args|
247
+ # handle arguments
248
+ args.with_defaults(json: 'false')
249
+ print_json = /true|1|j|y/ =~ args.json ? true : false
250
+ raise 'Please provide backup jobid' unless args.jobid
251
+ # fetch job details
252
+ job = proxmox.fetch_backup_job(args.jobid)
253
+ # handle errors
254
+ unless job.is_a?(Hash)
255
+ raise "There is no backupjob with id #{args.jobid}"
256
+ end
257
+ # produce output
258
+ if print_json
259
+ puts job.to_json
260
+ else
261
+ puts 'Backup Job Parameter:'
262
+ job.sort.each do |k, v|
263
+ puts format "%-18s: %s\n", k.to_s, v.to_s
264
+ end
265
+ end
266
+ end
267
+
268
+ desc 'exclude VM id ranges from all backup jobs'
269
+ task 'cluster:backupjob:exclude_range', %i(range_min range_max) \
270
+ do |_t, args|
271
+ args.with_defaults(range_min: 900)
272
+ args.with_defaults(range_max: 999)
273
+ exclude_list = []
274
+ lxc_status.each do |vmid, _|
275
+ exclude_list.push(vmid.to_s) if vmid >= args.range_min.to_i && \
276
+ vmid < args.range_max.to_i + 1
277
+ end
278
+ if exclude_list.empty?
279
+ puts "No VM Ids found in range #{args.range_min}"\
280
+ " to #{args.range_max}. Nothing to exclude."
281
+ next
282
+ end
283
+ puts "Found following VM Ids in range #{args.range_min}"\
284
+ " to #{args.range_max}: "
285
+ puts exclude_list.join(',')
286
+ proxmox.fetch_backup_jobs.each do |c|
287
+ bjob_list = c['exclude'].split(',')
288
+ unless (exclude_list - bjob_list).any?
289
+ puts 'Nothing to exclude. All VMs in given range are in'\
290
+ ' current exclude list in backup job '\
291
+ "with id #{c['id']} and starttime #{c['starttime']}."
292
+ next
293
+ end
294
+ puts 'Add following IDs to exclude list in backup job '\
295
+ "with id #{c['id']} and starttime #{c['starttime']}:"
296
+ add_to_bjob = exclude_list - bjob_list
297
+ puts add_to_bjob.join(',')
298
+ new_settings = {
299
+ starttime: c['starttime'],
300
+ exclude: (exclude_list | bjob_list).join(',')
301
+ }
302
+ response = proxmox.update_backup_job(c['id'], new_settings)
303
+ next if response.nil?
304
+ if response.include? 'NOK: error code'
305
+ raise "Update of Backup Job with id #{c['id']} "\
306
+ "failed: #{response}"
307
+ else
308
+ puts response
309
+ end
310
+ end
311
+ end
312
+
225
313
  desc 'list proxmox backups'
226
- task 'backup:list', %i[vmid node storage] do |_t, args|
314
+ task 'backup:list', %i(vmid node storage) do |_t, args|
227
315
  args.with_defaults(storage: 'local')
228
316
  args.with_defaults(node: ENV['PROXMOX_NODE'])
229
317
  $stderr.puts "backup list vmid:#{args.vmid} #{args.storage}@"\
@@ -246,11 +334,11 @@ module Rake
246
334
  " :storage => 'local',"\
247
335
  " :backup_storage => 'local',"\
248
336
  ' :file]'
249
- task 'backup:restore', %i[vmid
337
+ task 'backup:restore', %i(vmid
250
338
  node
251
339
  storage
252
340
  backup_storage
253
- file] do |_t, args|
341
+ file) do |_t, args|
254
342
  print "restore args: #{args}\n"
255
343
  id = args.vmid.to_i
256
344
  args.with_defaults(storage: 'local')
@@ -264,7 +352,7 @@ module Rake
264
352
 
265
353
  desc 'destroy all but exclude_ids (defaulting to: 6002) separated by'\
266
354
  ' colon(:)'
267
- task 'destroy:all', %i[exclude_ids delete_low_ids] do |t, args|
355
+ task 'destroy:all', %i(exclude_ids delete_low_ids) do |t, args|
268
356
  args.with_defaults(exclude_ids: '6002')
269
357
  args.with_defaults(delete_low_ids: 'false')
270
358
  exclude_ids = args.exclude_ids.split(':').map(&:to_i)
@@ -295,7 +383,7 @@ module Rake
295
383
  # create snapshot of every container
296
384
  desc 'snapshot all but exclude_ids (defaulting to: 6002) separated'\
297
385
  ' by colon(:)'
298
- task 'snapshot:create:all', %i[exclude_ids name desc] do |_t, args|
386
+ task 'snapshot:create:all', %i(exclude_ids name desc) do |_t, args|
299
387
  args.with_defaults(exclude_ids: '6002')
300
388
  args.with_defaults(name: 'rakesnap1')
301
389
  args.with_defaults(desc: 'snapshot taken by rake task')
@@ -313,7 +401,7 @@ module Rake
313
401
  end
314
402
  # delete all snapshots with specific name
315
403
  desc 'delete all snapshots with :name'
316
- task 'snapshot:delete:all', %i[exclude_ids name] do |_t, args|
404
+ task 'snapshot:delete:all', %i(exclude_ids name) do |_t, args|
317
405
  args.with_defaults(exclude_ids: '6002')
318
406
  args.with_defaults(name: 'rakesnap1')
319
407
  exclude_ids = args.exclude_ids.split(':').map(&:to_i)
@@ -342,7 +430,7 @@ module Rake
342
430
  end
343
431
  desc "backup #{prop['name']} [:storage => 'local',"\
344
432
  " :mode => 'snapshot']"
345
- task "backup:create:#{prop['name']}", %i[storage mode] do |_t, args|
433
+ task "backup:create:#{prop['name']}", %i(storage mode) do |_t, args|
346
434
  args.with_defaults(storage: 'local')
347
435
  args.with_defaults(mode: 'snapshot')
348
436
  unless lxc_backup(id, args.storage, args.mode)
@@ -351,9 +439,9 @@ module Rake
351
439
  end
352
440
  desc "restore #{prop['name']} [:storage => 'local',"\
353
441
  ' :file]'
354
- task "backup:restore:#{prop['name']}", %i[storage
442
+ task "backup:restore:#{prop['name']}", %i(storage
355
443
  backup_storage
356
- file] do |_t, args|
444
+ file) do |_t, args|
357
445
  args.with_defaults(storage: 'local')
358
446
  args.with_defaults(backup_storage: 'local')
359
447
  unless lxc_restore(id, args.storage, args.backup_storage,
@@ -363,7 +451,7 @@ module Rake
363
451
  end
364
452
  end
365
453
  desc "snapshot #{prop['name']}"
366
- task "snapshot:create:#{prop['name']}", %i[name desc] do |_t, args|
454
+ task "snapshot:create:#{prop['name']}", %i(name desc) do |_t, args|
367
455
  args.with_defaults(name: 'rakesnap1')
368
456
  args.with_defaults(desc: 'snapshot taken by rake task')
369
457
  unless lxc_snapshot(id, args.name, args.desc)
data/rake-proxmox.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ['lib']
31
31
 
32
- spec.add_development_dependency 'bundler', '~> 1.13'
32
+ spec.add_development_dependency 'bundler', '~> 1.11'
33
33
  spec.add_development_dependency 'rake', '~> 10.0'
34
34
  spec.add_development_dependency 'rspec', '~> 3.0'
35
35
  spec.add_development_dependency 'webmock', '~> 3.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-proxmox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Lehn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-24 00:00:00.000000000 Z
11
+ date: 2017-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: '1.11'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: '1.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement