diff --git a/vmware-host-pooler b/vmware-host-pooler index 5cc54b0..9db58b8 100755 --- a/vmware-host-pooler +++ b/vmware-host-pooler @@ -186,7 +186,10 @@ def clone_vm template, pool, folder, datastore $logger.log('s', "[+] [#{vm['template']}] '#{vm['hostname']}' cloned from '#{vm['template']}' in #{finish} seconds") - $graphite.log("vcloud.clone.#{vm['template']}", finish) if defined? $graphite + begin + $graphite.log("vcloud.clone.#{vm['template']}", finish) if defined? $graphite + rescue + end } end @@ -230,44 +233,52 @@ def check_pool pool loop do # INVENTORY inventory = {} - base = $vsphere[pool['name']].find_pool(pool['pool']) + begin + base = $vsphere[pool['name']].find_pool(pool['pool']) - base.vm.each do |vm| - if ( - (! $redis.sismember('vmware_host_pool__running__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__ready__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__pending__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__completed__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__discovered__'+pool['name'], vm['name'])) - ) - $redis.sadd('vmware_host_pool__discovered__'+pool['name'], vm['name']) + base.vm.each do |vm| + if ( + (! $redis.sismember('vmware_host_pool__running__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmware_host_pool__ready__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmware_host_pool__pending__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmware_host_pool__completed__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmware_host_pool__discovered__'+pool['name'], vm['name'])) + ) + $redis.sadd('vmware_host_pool__discovered__'+pool['name'], vm['name']) - $logger.log('s', "[?] [#{pool['name']}] '#{vm['name']}' added to 'discovered' queue") + $logger.log('s', "[?] [#{pool['name']}] '#{vm['name']}' added to 'discovered' queue") + end + + inventory[vm['name']] = 1 end - - inventory[vm['name']] = 1 - end + rescue + end # RUNNING $redis.smembers('vmware_host_pool__running__'+pool['name']).each do |vm| - if (! inventory[vm]) - $redis.srem('vmware_host_pool__running__'+pool['name'], vm) - else + if (inventory[vm]) if (pool['running_ttl']) - check_running_vm(vm, pool['name'], pool['running_ttl']) + begin + check_running_vm(vm, pool['name'], pool['running_ttl']) + rescue + end else - check_running_vm(vm, pool['name'], '720') + begin + check_running_vm(vm, pool['name'], '720') + rescue + end end end end # READY $redis.smembers('vmware_host_pool__ready__'+pool['name']).each do |vm| - if (! inventory[vm]) - $redis.srem('vmware_host_pool__ready__'+pool['name'], vm) - else + if (inventory[vm]) if (pool['ready_ttl']) - check_ready_vm(vm, pool['name'], pool['ready_ttl']) + begin + check_ready_vm(vm, pool['name'], pool['ready_ttl']) + rescue + end end end end @@ -277,16 +288,20 @@ def check_pool pool pool['timeout'] ||= 10 if (inventory[vm]) - check_pending_vm(vm, pool['name'], pool['timeout']) + begin + check_pending_vm(vm, pool['name'], pool['timeout']) + rescue + end end end # COMPLETED $redis.smembers('vmware_host_pool__completed__'+pool['name']).each do |vm| - if (! inventory[vm]) - $redis.srem('vmware_host_pool__completed__'+pool['name'], vm) - else - destroy_vm(vm, pool['name']) + if (inventory[vm]) + begin + destroy_vm(vm, pool['name']) + rescue + end end end @@ -294,18 +309,24 @@ def check_pool pool total = $redis.scard('vmware_host_pool__ready__'+pool['name']) + $redis.scard('vmware_host_pool__pending__'+pool['name']) - $graphite.log( - 'vcloud.ready.'+pool['name'], $redis.scard('vmware_host_pool__ready__'+pool['name']) - ) if defined? $graphite + begin + $graphite.log( + 'vcloud.ready.'+pool['name'], $redis.scard('vmware_host_pool__ready__'+pool['name']) + ) if defined? $graphite + rescue + end if (total < pool['size']) (1..(pool['size'] - total)).each { |i| - clone_vm( - pool['template'], - pool['pool'], - pool['folder'], - pool['datastore'] - ) + begin + clone_vm( + pool['template'], + pool['pool'], + pool['folder'], + pool['datastore'] + ) + rescue + end } end