mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 18:08:42 -05:00
Merge branch 'master' into name_change
Conflicts: vmpooler
This commit is contained in:
commit
b1f8d961b3
1 changed files with 44 additions and 23 deletions
47
vmpooler
47
vmpooler
|
|
@ -4,6 +4,7 @@ require 'json'
|
|||
require 'rbvmomi'
|
||||
require 'redis'
|
||||
require 'time'
|
||||
require 'timeout'
|
||||
require 'yaml'
|
||||
|
||||
$:.unshift(File.dirname(__FILE__))
|
||||
|
|
@ -32,6 +33,7 @@ end
|
|||
|
||||
# Set some defaults
|
||||
$config[:config]['task_limit'] ||= 10
|
||||
$config[:config]['vm_checktime'] ||= 15
|
||||
$config[:config]['vm_lifetime'] ||= 24
|
||||
$config[:redis] ||= Hash.new
|
||||
$config[:redis]['server'] ||= 'localhost'
|
||||
|
|
@ -85,6 +87,22 @@ end
|
|||
|
||||
def check_ready_vm vm, pool, ttl
|
||||
Thread.new {
|
||||
if (ttl > 0)
|
||||
if ((((Time.now - host.runtime.bootTime)/60).to_s[/^\d+\.\d{1}/].to_f) > ttl)
|
||||
$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, removed from 'ready' queue")
|
||||
end
|
||||
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)
|
||||
|
|
@ -93,20 +111,25 @@ def check_ready_vm vm, pool, ttl
|
|||
(host.runtime.powerState) and
|
||||
(host.runtime.powerState != 'poweredOn')
|
||||
)
|
||||
$redis.smove('vmpooler__ready__'+pool, 'vmpooler__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")
|
||||
else
|
||||
if ((((Time.now - host.runtime.bootTime)/60).to_s[/^\d+\.\d{1}/].to_f) > ttl)
|
||||
$redis.smove('vmpooler__ready__'+pool, 'vmpooler__completed__'+pool, vm)
|
||||
|
||||
$logger.log('d', "[!] [#{pool}] '#{vm}' reached end of TTL after #{ttl} minutes")
|
||||
end
|
||||
$logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off, removed from 'ready' queue")
|
||||
end
|
||||
else
|
||||
$redis.srem('vmpooler__ready__'+pool, vm)
|
||||
$redis.srem('vmware_host_pool__ready__'+pool, vm)
|
||||
|
||||
$logger.log('s', "[!] [#{pool}] '#{vm}' not found in vCenter inventory")
|
||||
$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
|
||||
|
|
@ -300,14 +323,12 @@ def check_pool pool
|
|||
# READY
|
||||
$redis.smembers('vmpooler__ready__'+pool['name']).each do |vm|
|
||||
if (inventory[vm])
|
||||
if (pool['ready_ttl'])
|
||||
begin
|
||||
check_ready_vm(vm, pool['name'], pool['ready_ttl'])
|
||||
check_ready_vm(vm, pool['name'], pool['ready_ttl'] || 0)
|
||||
rescue
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# PENDING
|
||||
$redis.smembers('vmpooler__pending__'+pool['name']).each do |vm|
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue