Implement 'pending' and 'ready' queues

This commit is contained in:
Scott Schneider 2013-10-01 15:40:24 -07:00
parent 15841eb8e5
commit ba56310415

View file

@ -34,25 +34,50 @@ $redis = Redis.new
# Update loop # Update loop
loop do loop do
pools.each do |pool| pools.each do |pool|
inventory = {}
total = 0 total = 0
# Locate the resource pool # Locate the resource pool
datacenter = $vim.serviceInstance.find_datacenter datacenter = $vim.serviceInstance.find_datacenter
base = vsphere_helper.find_pool(pool['pool']) base = vsphere_helper.find_pool(pool['pool'])
# Count the number of VMs and correlate Redis inventory # Make sure all VMs in resource pool are accounted-for
inventory = {}
base.vm.each do |vm| base.vm.each do |vm|
if ! $redis.sismember('vmware_host_pool-'+pool['name'], vm['name']) if (
$redis.sadd('vmware_host_pool-'+pool['name'], vm['name']) (! $redis.sismember('vmware_host_pool__ready__'+pool['name'], vm['name'])) and
(! $redis.sismember('vmware_host_pool__pending__'+pool['name'], vm['name']))
)
$redis.sadd('vmware_host_pool__pending__'+pool['name'], vm['name'])
end end
inventory[vm['name']] = 1 inventory[vm['name']] = 1
total = total + 1 total = total + 1
end end
$redis.smembers('vmware_host_pool-'+pool['name']).each do |vm| # Check pending pool
$redis.smembers('vmware_host_pool__pending__'+pool['name']).each do |vm|
if (
(vsphere_helper.find_vms(vm)[vm]) and
(vsphere_helper.find_vms(vm)[vm].summary.guest.toolsRunningStatus == 'guestToolsRunning') and
(vsphere_helper.find_vms(vm)[vm].summary.guest.ipAddress != nil)
)
begin
Socket.getaddrinfo(vm, nil)
rescue
break
end
$redis.sadd('vmware_host_pool__ready__'+pool['name'], vm)
$redis.srem('vmware_host_pool__pending__'+pool['name'], vm)
puts '[>] '+vm+' moved to \'ready\' pool'
end
end
# Check ready pool
$redis.smembers('vmware_host_pool__ready__'+pool['name']).each do |vm|
if ! inventory[vm] if ! inventory[vm]
$redis.srem('vmware_host_pool-'+pool['name'], vm) $redis.srem('vmware_host_pool__ready__'+pool['name'], vm)
end end
end end
@ -105,8 +130,8 @@ loop do
:spec => spec :spec => spec
).wait_for_completion ).wait_for_completion
# Add VM to Redis inventory # Add VM to Redis inventory ('pending' pool)
$redis.sadd('vmware_host_pool-'+pool['name'], vm['hostname']) $redis.sadd('vmware_host_pool__pending__'+pool['name'], vm['hostname'])
} }
end end