Merge pull request #11 from sschneid/check_ready_vms

Check VMs in 'ready' queue
This commit is contained in:
Scott Schneider 2014-02-19 14:25:38 -08:00
commit 1aee738d4a

View file

@ -4,6 +4,7 @@ require 'json'
require 'rbvmomi' require 'rbvmomi'
require 'redis' require 'redis'
require 'time' require 'time'
require 'timeout'
require 'yaml' require 'yaml'
$:.unshift(File.dirname(__FILE__)) $:.unshift(File.dirname(__FILE__))
@ -31,8 +32,9 @@ if (defined? $config[:config]['graphite'])
end end
# Set some defaults # Set some defaults
$config[:config]['task_limit'] ||= 10 $config[:config]['task_limit'] ||= 10
$config[:config]['vm_lifetime'] ||= 24 $config[:config]['vm_checktime'] ||= 15
$config[:config]['vm_lifetime'] ||= 24
$config[:redis] ||= Hash.new $config[:redis] ||= Hash.new
$config[:redis]['server'] ||= 'localhost' $config[:redis]['server'] ||= 'localhost'
@ -85,28 +87,49 @@ end
def check_ready_vm vm, pool, ttl def check_ready_vm vm, pool, ttl
Thread.new { Thread.new {
host = $vsphere[pool].find_vm(vm) if (ttl > 0)
if ((((Time.now - host.runtime.bootTime)/60).to_s[/^\d+\.\d{1}/].to_f) > ttl)
if (host)
if (
(host.runtime) and
(host.runtime.powerState) and
(host.runtime.powerState != 'poweredOn')
)
$redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm) $redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm)
$logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off or dead") $logger.log('d', "[!] [#{pool}] '#{vm}' reached end of TTL after #{ttl} minutes, removed from 'ready' queue")
else end
if ((((Time.now - host.runtime.bootTime)/60).to_s[/^\d+\.\d{1}/].to_f) > ttl) end
check_stamp = $redis.hget('vmware_host_pool__vm__'+vm, 'check')
if (
(! check_stamp) or
(((Time.now - Time.parse(check_stamp))/60) > $config[:config]['vm_checktime'])
)
$redis.hset('vmware_host_pool__vm__'+vm, 'check', Time.now)
host = $vsphere[pool].find_vm(vm)
if (host)
if (
(host.runtime) and
(host.runtime.powerState) and
(host.runtime.powerState != 'poweredOn')
)
$redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm) $redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm)
$logger.log('d', "[!] [#{pool}] '#{vm}' reached end of TTL after #{ttl} minutes") $logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off, removed from 'ready' queue")
end
else
$redis.srem('vmware_host_pool__ready__'+pool, vm)
$logger.log('s', "[!] [#{pool}] '#{vm}' not found in vCenter inventory, removed from 'ready' queue")
end
begin
Timeout::timeout(5) {
TCPSocket.new vm, 22
}
rescue
if ($redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm))
$logger.log('d', "[!] [#{pool}] '#{vm}' is unreachable, removed from 'ready' queue")
end end
end end
else
$redis.srem('vmware_host_pool__ready__'+pool, vm)
$logger.log('s', "[!] [#{pool}] '#{vm}' not found in vCenter inventory")
end end
} }
end end
@ -300,11 +323,9 @@ def check_pool pool
# READY # READY
$redis.smembers('vmware_host_pool__ready__'+pool['name']).each do |vm| $redis.smembers('vmware_host_pool__ready__'+pool['name']).each do |vm|
if (inventory[vm]) if (inventory[vm])
if (pool['ready_ttl']) begin
begin check_ready_vm(vm, pool['name'], pool['ready_ttl'] || 0)
check_ready_vm(vm, pool['name'], pool['ready_ttl']) rescue
rescue
end
end end
end end
end end