rake-proxmox 0.1.0 → 0.2.0

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 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