mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
Handle empty queues in pool manager
Remove unneeded begin block in method Fix formatting of rescue block in fail_pending_vm
This commit is contained in:
parent
a244f9b92a
commit
f8bd79a8d9
1 changed files with 71 additions and 48 deletions
|
|
@ -49,16 +49,21 @@ module Vmpooler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def fail_pending_vm(vm, pool, timeout)
|
def fail_pending_vm(vm, pool, timeout, exists=true)
|
||||||
clone_stamp = $redis.hget('vmpooler__vm__' + vm, 'clone')
|
clone_stamp = $redis.hget("vmpooler__vm__#{vm}", 'clone')
|
||||||
|
return if ! clone_stamp
|
||||||
|
|
||||||
if (clone_stamp) &&
|
time_since_clone = (Time.now - Time.parse(clone_stamp)) / 60
|
||||||
(((Time.now - Time.parse(clone_stamp)) / 60) > timeout)
|
if time_since_clone > timeout
|
||||||
|
if exists
|
||||||
$redis.smove('vmpooler__pending__' + pool, 'vmpooler__completed__' + pool, vm)
|
$redis.smove('vmpooler__pending__' + pool, 'vmpooler__completed__' + pool, vm)
|
||||||
|
$logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes")
|
||||||
$logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes")
|
else
|
||||||
|
remove_nonexistent_vm(vm, pool)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
rescue => err
|
||||||
|
$logger.log('d', "Fail pending VM failed with an error: #{err}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def move_pending_vm_to_ready(vm, pool, host)
|
def move_pending_vm_to_ready(vm, pool, host)
|
||||||
|
|
@ -549,75 +554,93 @@ module Vmpooler
|
||||||
end
|
end
|
||||||
|
|
||||||
# RUNNING
|
# RUNNING
|
||||||
$redis.smembers('vmpooler__running__' + pool['name']).each do |vm|
|
running = $redis.smembers("vmpooler__running__#{pool['name']}")
|
||||||
if inventory[vm]
|
if running
|
||||||
begin
|
running.each do |vm|
|
||||||
check_running_vm(vm, pool['name'], $redis.hget('vmpooler__vm__' + vm, 'lifetime') || $config[:config]['vm_lifetime'] || 12)
|
if inventory[vm]
|
||||||
rescue
|
begin
|
||||||
|
check_running_vm(vm, pool['name'], $redis.hget('vmpooler__vm__' + vm, 'lifetime') || $config[:config]['vm_lifetime'] || 12)
|
||||||
|
rescue
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# READY
|
# READY
|
||||||
$redis.smembers('vmpooler__ready__' + pool['name']).each do |vm|
|
ready = $redis.smembers("vmpooler__ready__#{pool['name']}")
|
||||||
if inventory[vm]
|
if ready
|
||||||
begin
|
ready.each do |vm| if ready
|
||||||
check_ready_vm(vm, pool['name'], pool['ready_ttl'] || 0)
|
if inventory[vm]
|
||||||
rescue
|
begin
|
||||||
|
check_ready_vm(vm, pool['name'], pool['ready_ttl'] || 0)
|
||||||
|
rescue
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# PENDING
|
# PENDING
|
||||||
$redis.smembers('vmpooler__pending__' + pool['name']).each do |vm|
|
pending = $redis.smembers('vmpooler__pending__' + pool['name'])
|
||||||
if inventory[vm]
|
if pending
|
||||||
begin
|
pending.each do |vm|
|
||||||
check_pending_vm(vm, pool['name'], pool['timeout'] || $config[:config]['timeout'] || 15)
|
if inventory[vm]
|
||||||
rescue
|
begin
|
||||||
|
check_pending_vm(vm, pool['name'], pool['timeout'] || $config[:config]['timeout'] || 15)
|
||||||
|
rescue
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# COMPLETED
|
# COMPLETED
|
||||||
$redis.smembers('vmpooler__completed__' + pool['name']).each do |vm|
|
completed = $redis.smembers('vmpooler__completed__' + pool['name'])
|
||||||
if inventory[vm]
|
if completed
|
||||||
begin
|
completed.each do |vm|
|
||||||
destroy_vm(vm, pool['name'])
|
if inventory[vm]
|
||||||
rescue
|
begin
|
||||||
$logger.log('s', "[!] [#{pool['name']}] '#{vm}' destroy appears to have failed")
|
destroy_vm(vm, pool['name'])
|
||||||
|
rescue
|
||||||
|
$logger.log('s', "[!] [#{pool['name']}] '#{vm}' destroy appears to have failed")
|
||||||
|
$redis.srem('vmpooler__completed__' + pool['name'], vm)
|
||||||
|
$redis.hdel('vmpooler__active__' + pool['name'], vm)
|
||||||
|
$redis.del('vmpooler__vm__' + vm)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
$logger.log('s', "[!] [#{pool['name']}] '#{vm}' not found in inventory, removed from 'completed' queue")
|
||||||
$redis.srem('vmpooler__completed__' + pool['name'], vm)
|
$redis.srem('vmpooler__completed__' + pool['name'], vm)
|
||||||
$redis.hdel('vmpooler__active__' + pool['name'], vm)
|
$redis.hdel('vmpooler__active__' + pool['name'], vm)
|
||||||
$redis.del('vmpooler__vm__' + vm)
|
$redis.del('vmpooler__vm__' + vm)
|
||||||
end
|
end
|
||||||
else
|
|
||||||
$logger.log('s', "[!] [#{pool['name']}] '#{vm}' not found in inventory, removed from 'completed' queue")
|
|
||||||
$redis.srem('vmpooler__completed__' + pool['name'], vm)
|
|
||||||
$redis.hdel('vmpooler__active__' + pool['name'], vm)
|
|
||||||
$redis.del('vmpooler__vm__' + vm)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# DISCOVERED
|
# DISCOVERED
|
||||||
$redis.smembers('vmpooler__discovered__' + pool['name']).each do |vm|
|
discovered = $redis.smembers("vmpooler__discovered__#{pool['name']}")
|
||||||
%w(pending ready running completed).each do |queue|
|
if discovered
|
||||||
if $redis.sismember('vmpooler__' + queue + '__' + pool['name'], vm)
|
discovered.each do |vm|
|
||||||
$logger.log('d', "[!] [#{pool['name']}] '#{vm}' found in '#{queue}', removed from 'discovered' queue")
|
%w(pending ready running completed).each do |queue|
|
||||||
$redis.srem('vmpooler__discovered__' + pool['name'], vm)
|
if $redis.sismember('vmpooler__' + queue + '__' + pool['name'], vm)
|
||||||
|
$logger.log('d', "[!] [#{pool['name']}] '#{vm}' found in '#{queue}', removed from 'discovered' queue")
|
||||||
|
$redis.srem('vmpooler__discovered__' + pool['name'], vm)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
if $redis.sismember('vmpooler__discovered__' + pool['name'], vm)
|
if $redis.sismember('vmpooler__discovered__' + pool['name'], vm)
|
||||||
$redis.smove('vmpooler__discovered__' + pool['name'], 'vmpooler__completed__' + pool['name'], vm)
|
$redis.smove('vmpooler__discovered__' + pool['name'], 'vmpooler__completed__' + pool['name'], vm)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# MIGRATIONS
|
# MIGRATIONS
|
||||||
$redis.smembers('vmpooler__migrating__' + pool['name']).each do |vm|
|
migrations = $redis.smembers('vmpooler__migrating__' + pool['name'])
|
||||||
if inventory[vm]
|
if migrations
|
||||||
begin
|
migrations.each do |vm|
|
||||||
migrate_vm(vm, pool['name'])
|
if inventory[vm]
|
||||||
rescue => err
|
begin
|
||||||
$logger.log('s', "[x] [#{pool['name']}] '#{vm}' failed to migrate: #{err}")
|
migrate_vm(vm, pool['name'])
|
||||||
|
rescue => err
|
||||||
|
$logger.log('s', "[x] [#{pool['name']}] '#{vm}' failed to migrate: #{err}")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue