mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-27 10:28:41 -05:00
Host snapshot functionality
This commit is contained in:
parent
68d02f50a2
commit
1c3045fd65
4 changed files with 180 additions and 5 deletions
|
|
@ -50,6 +50,14 @@ module Vmpooler
|
|||
put '/vm/:hostname/?' do
|
||||
call env.merge("PATH_INFO" => "/api/v#{api_version}/vm/#{params[:hostname]}")
|
||||
end
|
||||
|
||||
post '/vm/:hostname/snapshot/?' do
|
||||
call env.merge("PATH_INFO" => "/api/v#{api_version}/vm/#{params[:hostname]}/snapshot")
|
||||
end
|
||||
|
||||
post '/vm/:hostname/snapshot/:snapshot/?' do
|
||||
call env.merge("PATH_INFO" => "/api/v#{api_version}/vm/#{params[:hostname]}/snapshot/#{params[:snapshot]}")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -413,6 +413,11 @@ module Vmpooler
|
|||
result[params[:hostname]]['tags'] ||= {}
|
||||
result[params[:hostname]]['tags'][$1] = rdata[key]
|
||||
end
|
||||
|
||||
if key.match('^snapshot\:(.+?)$')
|
||||
result[params[:hostname]]['snapshots'] ||= []
|
||||
result[params[:hostname]]['snapshots'].push($1)
|
||||
end
|
||||
end
|
||||
|
||||
if config['domain']
|
||||
|
|
@ -509,6 +514,47 @@ module Vmpooler
|
|||
|
||||
JSON.pretty_generate(result)
|
||||
end
|
||||
|
||||
post "#{api_prefix}/vm/:hostname/snapshot/?" do
|
||||
content_type :json
|
||||
|
||||
status 404
|
||||
result = { 'ok' => false }
|
||||
|
||||
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
||||
|
||||
if backend.exists('vmpooler__vm__' + params[:hostname])
|
||||
result[params[:hostname]] = {}
|
||||
|
||||
o = [('a'..'z'), ('0'..'9')].map(&:to_a).flatten
|
||||
result[params[:hostname]]['snapshot'] = o[rand(25)] + (0...31).map { o[rand(o.length)] }.join
|
||||
|
||||
backend.sadd('vmpooler__tasks__snapshot', params[:hostname] + ':' + result[params[:hostname]]['snapshot'])
|
||||
|
||||
status 202
|
||||
result['ok'] = true
|
||||
end
|
||||
|
||||
JSON.pretty_generate(result)
|
||||
end
|
||||
|
||||
post "#{api_prefix}/vm/:hostname/snapshot/:snapshot/?" do
|
||||
content_type :json
|
||||
|
||||
status 404
|
||||
result = { 'ok' => false }
|
||||
|
||||
params[:hostname] = hostname_shorten(params[:hostname], config['domain'])
|
||||
|
||||
if backend.exists('vmpooler__vm__' + params[:hostname]) and backend.hget('vmpooler__vm__' + params[:hostname], 'snapshot:' + params[:snapshot])
|
||||
backend.sadd('vmpooler__tasks__snapshot-revert', params[:hostname] + ':' + params[:snapshot])
|
||||
|
||||
status 202
|
||||
result['ok'] = true
|
||||
end
|
||||
|
||||
JSON.pretty_generate(result)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue