Allow authorized_keys to be overridden on VM checkout

This commit is contained in:
Scott Schneider 2015-03-11 13:44:50 -07:00
parent 1b8435a63a
commit 50a12d672e
4 changed files with 24 additions and 0 deletions

View file

@ -17,6 +17,7 @@ At [Puppet Labs](http://puppetlabs.com) we run acceptance tests on thousands of
vmpooler requires the following Ruby gems be installed:
- [json](http://rubygems.org/gems/json)
- [net/scp](http://rubygems.org/gems/net-scp)
- [rbvmomi](http://rubygems.org/gems/rbvmomi)
- [redis](http://rubygems.org/gems/redis)
- [sinatra](http://rubygems.org/gems/sinatra)

View file

@ -3,10 +3,12 @@ require 'rubygems' unless defined?(Gem)
module Vmpooler
require 'date'
require 'json'
require 'net/scp'
require 'open-uri'
require 'rbvmomi'
require 'redis'
require 'sinatra/base'
require 'stringio'
require 'time'
require 'timeout'
require 'yaml'

View file

@ -321,6 +321,10 @@ module Vmpooler
jdata = JSON.parse(request.body.read)
jdata.each do |key, val|
if key == 'key'
result['key'] = val
end
if $redis.scard('vmpooler__ready__' + key) < val.to_i
available = 0
end
@ -330,6 +334,10 @@ module Vmpooler
result['ok'] = true
jdata.each do |key, val|
if key == 'key'
next
end
result[key] ||= {}
result[key]['ok'] = true ##
@ -345,6 +353,13 @@ module Vmpooler
result[key]['ok'] = true ##
if ( result['key'] and $config[:config]['ssh_key'] )
Net::SCP.upload!(
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']] unless result[key]['hostname'].is_a?(Array)
result[key]['hostname'].push(vm)

View file

@ -105,6 +105,11 @@
#
# - domain
# 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:
@ -116,6 +121,7 @@
vm_checktime: 15
vm_lifetime: 12
domain: 'company.com'
ssh_key: '/root/.ssh/id_rsa'
# :pools:
#