diff --git a/lib/vmpooler.rb b/lib/vmpooler.rb index a9eb4eb..8f4a946 100644 --- a/lib/vmpooler.rb +++ b/lib/vmpooler.rb @@ -33,6 +33,9 @@ module Vmpooler parsed_config[:config]['vm_checktime'] ||= 15 parsed_config[:config]['vm_lifetime'] ||= 24 + parsed_config[:config]['check_pending_port'] ||= 22 + parsed_config[:config]['check_pending_timeout'] ||= 5 + # Create an index of pool aliases parsed_config[:pools].each do |pool| if pool['alias'] diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index eb9504f..30844dc 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -1,5 +1,6 @@ module Vmpooler class PoolManager + def initialize(config, logger, redis, graphite=nil) $config = config @@ -32,8 +33,8 @@ module Vmpooler if host begin - Timeout.timeout(5) do - TCPSocket.new vm, 22 + Timeout.timeout($config[:config]['check_pending_timeout']) do + TCPSocket.new vm, $config[:config]['check_pending_port'] end move_pending_vm_to_ready(vm, pool, host) rescue diff --git a/spec/vmpooler/pool_manager_spec.rb b/spec/vmpooler/pool_manager_spec.rb index a402bf4..2937b62 100644 --- a/spec/vmpooler/pool_manager_spec.rb +++ b/spec/vmpooler/pool_manager_spec.rb @@ -36,13 +36,20 @@ describe 'Pool Manager' do context 'host is in pool' do let(:vm_finder) { double('vm_finder') } let(:tcpsocket) { double('TCPSocket') } + # port and port timeout are now configurable. + # update the config mock + let(:port_no) { 99 } + let(:config) { {config: { + 'check_pending_port' => port_no, + 'check_pending_timeout' => 2}} } it 'calls move_pending_vm_to_ready' do stub_const("TCPSocket", tcpsocket) allow(pool_helper).to receive(:find_vm).and_return(vm_finder) allow(vm_finder).to receive(:summary).and_return(nil) - allow(tcpsocket).to receive(:new).and_return(true) + # ensure the port config made it to the TCPSocket call: + allow(tcpsocket).to receive(:new).with(String, port_no).and_return(true) expect(vm_finder).to receive(:summary).once expect(redis).not_to receive(:hget).with(String, 'clone') @@ -50,6 +57,7 @@ describe 'Pool Manager' do subject._check_pending_vm(vm, pool, timeout) end end + end describe '#move_vm_to_ready' do diff --git a/vmpooler.yaml.example b/vmpooler.yaml.example index 6e1c5d4..6c5d95c 100644 --- a/vmpooler.yaml.example +++ b/vmpooler.yaml.example @@ -161,6 +161,16 @@ # # - domain # If set, returns a top-level 'domain' JSON key in POST requests +# +# - check_pending_port +# The port number used to verify a host is ready and available. +# (optional; default: 22) +# +# - check_pending_timeout +# How long (in seconds) to wait for connection to port before canceling. +# This is not used in marking a VM dead or stale. +# (optional; default: 5) +# # Example: @@ -176,6 +186,8 @@ - 'created_by' - 'project' domain: 'company.com' + check_pending_port: 22 + check_pending_timeout: 5 # :pools: #