mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
Merge branch 'master' into name_change
Conflicts: vmpooler
This commit is contained in:
commit
21ebde54e5
2 changed files with 44 additions and 28 deletions
5
TODO.md
5
TODO.md
|
|
@ -16,8 +16,3 @@ Enhancements
|
||||||
* Namespace the whole app
|
* Namespace the whole app
|
||||||
* Require 'authorization key' (returned in POST JSON) to DELETE via the API
|
* Require 'authorization key' (returned in POST JSON) to DELETE via the API
|
||||||
|
|
||||||
|
|
||||||
Fixes
|
|
||||||
-----
|
|
||||||
|
|
||||||
* VMs in 'ready' pool should be checked even if no ready_ttl is set
|
|
||||||
|
|
|
||||||
47
vmpooler
47
vmpooler
|
|
@ -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__))
|
||||||
|
|
@ -32,6 +33,7 @@ end
|
||||||
|
|
||||||
# Set some defaults
|
# Set some defaults
|
||||||
$config[:config]['task_limit'] ||= 10
|
$config[:config]['task_limit'] ||= 10
|
||||||
|
$config[:config]['vm_checktime'] ||= 15
|
||||||
$config[:config]['vm_lifetime'] ||= 24
|
$config[:config]['vm_lifetime'] ||= 24
|
||||||
$config[:redis] ||= Hash.new
|
$config[:redis] ||= Hash.new
|
||||||
$config[:redis]['server'] ||= 'localhost'
|
$config[:redis]['server'] ||= 'localhost'
|
||||||
|
|
@ -85,6 +87,22 @@ end
|
||||||
|
|
||||||
def check_ready_vm vm, pool, ttl
|
def check_ready_vm vm, pool, ttl
|
||||||
Thread.new {
|
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)
|
host = $vsphere[pool].find_vm(vm)
|
||||||
|
|
||||||
if (host)
|
if (host)
|
||||||
|
|
@ -93,20 +111,25 @@ def check_ready_vm vm, pool, ttl
|
||||||
(host.runtime.powerState) and
|
(host.runtime.powerState) and
|
||||||
(host.runtime.powerState != 'poweredOn')
|
(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")
|
$logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off, removed from 'ready' queue")
|
||||||
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
|
|
||||||
end
|
end
|
||||||
else
|
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
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
@ -300,14 +323,12 @@ def check_pool pool
|
||||||
# READY
|
# READY
|
||||||
$redis.smembers('vmpooler__ready__'+pool['name']).each do |vm|
|
$redis.smembers('vmpooler__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'])
|
check_ready_vm(vm, pool['name'], pool['ready_ttl'] || 0)
|
||||||
rescue
|
rescue
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
# PENDING
|
# PENDING
|
||||||
$redis.smembers('vmpooler__pending__'+pool['name']).each do |vm|
|
$redis.smembers('vmpooler__pending__'+pool['name']).each do |vm|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue