diff --git a/README.md b/README.md index d1d8c28..7d8f0d3 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ $ curl --url vmpooler.company.com/vm ``` #### POST /vm + Useful for batch operations; post JSON (see format below), get back VMs. ``` @@ -105,7 +106,8 @@ $ curl -d '{"debian-7-i386":"2","debian-7-x86_64":"1"}' --url vmpooler.company.c } ``` -#### POST /vm/ +#### POST /vm/<pool> + Check-out a VM or VMs. ``` @@ -141,7 +143,20 @@ $ curl -d --url vmpooler.company.com/vm/debian-7-i386+debian-7-i386+debian-7-x86 } ``` -#### DELETE /vm/ +#### PUT /vm/<hostname> + +Modify a checked-out VM. + +``` +$ curl -X PUT -d '{"lifetime":"2"}' --url vmpooler.company.com/vm/fq6qlpjlsskycq6 +``` +```json +{ + "ok": true +} +``` + +#### DELETE /vm/<hostname> Schedule a checked-out VM for deletion. diff --git a/lib/vmpooler/api.rb b/lib/vmpooler/api.rb index 9fbde20..dd1cfb7 100644 --- a/lib/vmpooler/api.rb +++ b/lib/vmpooler/api.rb @@ -305,6 +305,28 @@ module Vmpooler JSON.pretty_generate(result) end + + put '/vm/:hostname/?' do + content_type :json + + result = {} + + result['ok'] = false + + if $redis.exists('vmpooler__vm__'+params[:hostname]) + jdata = JSON.parse(request.body.read) + + jdata.each do |param, arg| + case param + when 'lifetime' + $redis.hset('vmpooler__vm__'+params[:hostname], param, arg) + result['ok'] = true + end + end + end + + JSON.pretty_generate(result) + end } my_app.run! diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index 944c79e..cc50e1d 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -380,9 +380,11 @@ module Vmpooler $redis.smembers('vmpooler__running__'+pool['name']).each do |vm| if ($redis.hget('vmpooler__active__'+pool['name'], vm)) running = (Time.now - Time.parse($redis.hget('vmpooler__active__'+pool['name'], vm)))/60/60 + lifetime = $redis.hget('vmpooler__vm__'+vm, 'lifetime') || $config[:config]['vm_lifetime'] + if ( - ($config[:config]['vm_lifetime'] > 0) and - (running > $config[:config]['vm_lifetime']) + (lifetime.to_i > 0) and + (running.to_i > lifetime.to_i) ) $redis.smove('vmpooler__running__'+pool['name'], 'vmpooler__completed__'+pool['name'], vm)