From 3dbbb39a3b215fca6e4811a7521ebd943711e5bd Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Fri, 22 Aug 2014 11:03:55 -0700 Subject: [PATCH 1/3] Allow a PUT to modify running VMs --- lib/vmpooler/api.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) 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! From b836ceea905db1ce6ec26544535ef717514dd257 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Fri, 22 Aug 2014 11:04:38 -0700 Subject: [PATCH 2/3] Custom-set VM lifetimes override system-wide --- lib/vmpooler/pool_manager.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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) From 092d035a3d00c7e90af3a7702db94254a841029f Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Fri, 22 Aug 2014 11:38:02 -0700 Subject: [PATCH 3/3] Adding docs for PUT modifications Also: cleaning up a little bit. --- README.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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.