mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-27 02:18:41 -05:00
Handle the delta between requested and configured limits
This commit is contained in:
parent
11c5107279
commit
edd9d9e62c
1 changed files with 30 additions and 18 deletions
|
|
@ -1278,41 +1278,53 @@ module Vmpooler
|
||||||
|
|
||||||
def process_ondemand_requests
|
def process_ondemand_requests
|
||||||
requests = $redis.zrange('vmpooler__provisioning__requests', 0, -1)
|
requests = $redis.zrange('vmpooler__provisioning__requests', 0, -1)
|
||||||
if ! requests.empty?
|
|
||||||
|
|
||||||
requests.each do |request_id|
|
requests&.map { |request_id| create_ondemand_vms(request_id) }
|
||||||
create_ondemand_vms(request_id)
|
|
||||||
$redis.zrem('vmpooler__provisioning__requests', request_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
provisioning_tasks = process_ondemand_vms
|
||||||
|
|
||||||
provisioning_tasks = $redis.zrange('vmpooler__odcreate__task', 0, -1)
|
return requests.length + provisioning_tasks
|
||||||
if ! requests.empty?
|
|
||||||
process_ondemand_vms(provisioning_tasks) unless provisioning_tasks.empty?
|
|
||||||
end
|
|
||||||
|
|
||||||
return requests.length + provisioning_tasks.length
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_ondemand_vms(request_id)
|
def create_ondemand_vms(request_id)
|
||||||
requested = $redis.hget("vmpooler__odrequest__#{request_id}", 'requested')
|
requested = $redis.hget("vmpooler__odrequest__#{request_id}", 'requested')
|
||||||
requested = requested.split(',')
|
requested = requested.split(',')
|
||||||
|
|
||||||
$redis.multi
|
$redis.multi
|
||||||
requested.map { |request| $redis.zadd('vmpooler__odcreate__task', Time.now, "#{request}:#{request_id}") }
|
requested.map { |request| $redis.zadd('vmpooler__odcreate__task', Time.now, "#{request}:#{request_id}") }
|
||||||
|
$redis.zrem('vmpooler__provisioning__requests', request_id)
|
||||||
$redis.exec
|
$redis.exec
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_ondemand_vms(queue)
|
def process_ondemand_vms
|
||||||
|
queue_key = 'vmpooler__odcreate__task'
|
||||||
|
queue = $redis.zrange(queue_key, 0, -1)
|
||||||
ondemand_clone_limit = $config[:config]['ondemand_clone_limit'].to_i
|
ondemand_clone_limit = $config[:config]['ondemand_clone_limit'].to_i
|
||||||
queue.each do |request|
|
queue.each do |request|
|
||||||
platform, count, request_id = request.split(':')
|
requested_platform, fulfilled_platform, count, request_id = request.split(':')
|
||||||
if @tasks['ondemand_clone_count'] + count <= ondemand_clone_limit
|
if @tasks['ondemand_clone_count'] < ondemand_clone_limit
|
||||||
provider = get_provider_for_pool(platform)
|
provider = get_provider_for_pool(platform)
|
||||||
count.times do
|
delta = ondemand_clone_limit - @tasks['ondemand_clone_count']
|
||||||
@tasks['ondemand_clone_count'] += 1
|
if delta >= count
|
||||||
clone_vm(platform, provider, request_id)
|
count.times do
|
||||||
|
@tasks['ondemand_clone_count'] += 1
|
||||||
|
clone_vm(platform, provider, request_id)
|
||||||
|
end
|
||||||
|
$redis.zrem(queue_key, request_id)
|
||||||
|
else
|
||||||
|
available_slots = delta - count
|
||||||
|
available_slots.times do
|
||||||
|
@tasks['ondemand_clone_count'] += 1
|
||||||
|
clone_vm(platform, provider, request_id)
|
||||||
|
end
|
||||||
|
score = $redis.zscore(queue_key, request_id)
|
||||||
|
$redis.multi
|
||||||
|
$redis.zrem(queue_key, request)
|
||||||
|
$redis.zadd(queue_key, score, "#{requested_platform}:#{fulfilled_platform}:#{count - delta}:#{request_id}")
|
||||||
|
$redis.exec
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue