mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 18:08:42 -05:00
Merge 03e379229a into 591c5a0391
This commit is contained in:
commit
7f355edef3
4 changed files with 40 additions and 16 deletions
|
|
@ -17,6 +17,7 @@ At [Puppet Labs](http://puppetlabs.com) we run acceptance tests on hundreds of d
|
||||||
vmpooler requires the following Ruby gems be installed:
|
vmpooler requires the following Ruby gems be installed:
|
||||||
|
|
||||||
- [json](http://rubygems.org/gems/json)
|
- [json](http://rubygems.org/gems/json)
|
||||||
|
- [net/scp](http://rubygems.org/gems/net-scp)
|
||||||
- [rbvmomi](http://rubygems.org/gems/rbvmomi)
|
- [rbvmomi](http://rubygems.org/gems/rbvmomi)
|
||||||
- [redis](http://rubygems.org/gems/redis)
|
- [redis](http://rubygems.org/gems/redis)
|
||||||
- [sinatra](http://rubygems.org/gems/sinatra)
|
- [sinatra](http://rubygems.org/gems/sinatra)
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,12 @@ require 'rubygems' unless defined?(Gem)
|
||||||
|
|
||||||
module Vmpooler
|
module Vmpooler
|
||||||
require 'json'
|
require 'json'
|
||||||
|
require 'net/scp'
|
||||||
require 'open-uri'
|
require 'open-uri'
|
||||||
require 'rbvmomi'
|
require 'rbvmomi'
|
||||||
require 'redis'
|
require 'redis'
|
||||||
require 'sinatra/base'
|
require 'sinatra/base'
|
||||||
|
require 'stringio'
|
||||||
require 'time'
|
require 'time'
|
||||||
require 'timeout'
|
require 'timeout'
|
||||||
require 'yaml'
|
require 'yaml'
|
||||||
|
|
|
||||||
|
|
@ -189,8 +189,12 @@ module Vmpooler
|
||||||
|
|
||||||
jdata = JSON.parse(request.body.read)
|
jdata = JSON.parse(request.body.read)
|
||||||
|
|
||||||
jdata.each do |template, count|
|
jdata.each do |key, val|
|
||||||
if ( $redis.scard('vmpooler__ready__'+template) < count.to_i )
|
if (key == 'key')
|
||||||
|
result['key'] = val
|
||||||
|
end
|
||||||
|
|
||||||
|
if ( $redis.scard('vmpooler__ready__'+key) < val.to_i )
|
||||||
available = 0
|
available = 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -198,30 +202,41 @@ module Vmpooler
|
||||||
if ( available == 1 )
|
if ( available == 1 )
|
||||||
result['ok'] = true
|
result['ok'] = true
|
||||||
|
|
||||||
jdata.each do |template, count|
|
jdata.each do |key, val|
|
||||||
result[template] ||= {}
|
if (key == 'key')
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
result[template]['ok'] = true ##
|
result[key] ||= {}
|
||||||
|
|
||||||
count.to_i.times do |i|
|
result[key]['ok'] = true ##
|
||||||
vm = $redis.spop('vmpooler__ready__'+template)
|
|
||||||
|
val.to_i.times do |i|
|
||||||
|
vm = $redis.spop('vmpooler__ready__'+key)
|
||||||
|
|
||||||
unless (vm.nil?)
|
unless (vm.nil?)
|
||||||
$redis.sadd('vmpooler__running__'+template, vm)
|
$redis.sadd('vmpooler__running__'+key, vm)
|
||||||
$redis.hset('vmpooler__active__'+template, vm, Time.now)
|
$redis.hset('vmpooler__active__'+key, vm, Time.now)
|
||||||
|
|
||||||
result[template] ||= {}
|
result[key] ||= {}
|
||||||
|
|
||||||
result[template]['ok'] = true ##
|
result[key]['ok'] = true ##
|
||||||
|
|
||||||
if ( result[template]['hostname'] )
|
if ( result['key'] and $config[:config]['ssh_key'] )
|
||||||
result[template]['hostname'] = [result[template]['hostname']] if ! result[template]['hostname'].is_a?(Array)
|
Net::SCP.upload!(
|
||||||
result[template]['hostname'].push(vm)
|
vm, 'root', StringIO.new(result['key']), '/root/.ssh/authorized_keys',
|
||||||
|
:ssh => { :keys => [ $config[:config]['ssh_key'] ] }
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
if ( result[key]['hostname'] )
|
||||||
|
result[key]['hostname'] = [result[key]['hostname']] if ! result[key]['hostname'].is_a?(Array)
|
||||||
|
result[key]['hostname'].push(vm)
|
||||||
else
|
else
|
||||||
result[template]['hostname'] = vm
|
result[key]['hostname'] = vm
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
result[template]['ok'] = false ##
|
result[key]['ok'] = false ##
|
||||||
|
|
||||||
result['ok'] = false
|
result['ok'] = false
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,11 @@
|
||||||
#
|
#
|
||||||
# - domain
|
# - domain
|
||||||
# If set, returns a top-level 'domain' JSON key in POST requests
|
# If set, returns a top-level 'domain' JSON key in POST requests
|
||||||
|
#
|
||||||
|
# - ssh_key
|
||||||
|
# The path to a private key able to log into pooled VMs. If set, allows a
|
||||||
|
# 'key' parameter to be passed in POST requests to '/vm', overriding root's
|
||||||
|
# default authorized_keys file
|
||||||
|
|
||||||
# Example:
|
# Example:
|
||||||
|
|
||||||
|
|
@ -111,6 +116,7 @@
|
||||||
vm_checktime: 15
|
vm_checktime: 15
|
||||||
vm_lifetime: 12
|
vm_lifetime: 12
|
||||||
domain: 'company.com'
|
domain: 'company.com'
|
||||||
|
ssh_key: '/root/.ssh/id_rsa'
|
||||||
|
|
||||||
# :pools:
|
# :pools:
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue