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 +4 -4
- data/README.md +1 -0
- data/lib/rake/proxmox/proxmox_api.rb +15 -0
- data/lib/rake/proxmox/version.rb +1 -1
- data/lib/rake/proxmox.rb +100 -12
- data/rake-proxmox.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a27b8d9fe5f2c43c1231814abd148e1e0dc29fce
|
4
|
+
data.tar.gz: 3abb5c780b1f090c8535e6264d43ee02d2bc43f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea997af60dd8df5a89b2b2e50eb3e7c580910cd209c7684759517c2faef8dde96f585ce1625850ae153b5e6f07e92780b9a47797e57d0854862b30c82e2d32d2
|
7
|
+
data.tar.gz: 5b811e35a87df3463cfb6b92e66fd85f2058a1ae48ba132b39e1d058b109668cd8af641084f51d5bfe1e0aa51458406803324fd18135e1c1125fceff6c04ae9f
|
data/README.md
CHANGED
@@ -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
|
data/lib/rake/proxmox/version.rb
CHANGED
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
|
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
|
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
|
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
|
337
|
+
task 'backup:restore', %i(vmid
|
250
338
|
node
|
251
339
|
storage
|
252
340
|
backup_storage
|
253
|
-
file
|
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
|
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
|
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
|
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
|
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
|
442
|
+
task "backup:restore:#{prop['name']}", %i(storage
|
355
443
|
backup_storage
|
356
|
-
file
|
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
|
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.
|
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.
|
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-
|
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.
|
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.
|
26
|
+
version: '1.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|