Address rubocop offenses

This commit is contained in:
kirby@puppetlabs.com 2020-05-07 15:19:44 -07:00
parent 86f6848ef0
commit 9538c0b3e3
3 changed files with 66 additions and 71 deletions

View file

@ -166,11 +166,11 @@ module Vmpooler
metric_prefix: 'redis_connection_pool',
size: size,
timeout: timeout
) {
) do
connection = Concurrent::Hash.new
redis = new_redis(host, port, password)
connection['connection'] = redis
}
end
end
def self.new_redis(host = 'localhost', port = nil, password = nil)

View file

@ -343,7 +343,7 @@ module Vmpooler
result = { 'ok': false }
request_id = payload['request_id']
request_id = generate_request_id unless request_id
request_id ||= generate_request_id
score = Time.now.to_i
result['request_id'] = request_id
@ -357,13 +357,14 @@ module Vmpooler
status 201
platforms_with_aliases = []
payload.reject { |k,v| k == 'request_id' }.each do |poolname, count|
payload.reject { |k, _v| k == 'request_id' }.each do |poolname, count|
selection = evaluate_template_aliases(poolname, count)
selection.map { |selected_pool, selected_pool_count| platforms_with_aliases << "#{poolname}:#{selected_pool}:#{selected_pool_count}" }
end
platforms_string = platforms_with_aliases.join(',')
return result unless backend.zadd('vmpooler__provisioning__request', score, request_id)
backend.hset("vmpooler__odrequest__#{request_id}", 'requested', platforms_string)
if Vmpooler::API.settings.config[:auth] and has_token?
backend.hset("vmpooler__odrequest__#{request_id}", 'token:token', request.env['HTTP_X_AUTH_TOKEN'])
@ -802,7 +803,7 @@ module Vmpooler
payload = JSON.parse(request.body.read)
if payload
invalid = invalid_templates(payload.reject { |k,v| k == 'request_id' })
invalid = invalid_templates(payload.reject { |k, _v| k == 'request_id' })
if invalid.empty?
result = generate_ondemand_request(payload)
else
@ -829,7 +830,6 @@ module Vmpooler
get "#{api_prefix}/ondemandvm/:requestid/?" do
content_type :json
result = { 'ok' => false }
status 404
result = check_ondemand_request(params[:requestid])
@ -932,7 +932,6 @@ module Vmpooler
pool_alias, pool, _count = platform.split(':')
instances = backend.smembers("vmpooler__#{request_id}__#{pool_alias}__#{pool}")
result[pool_alias] = { 'hostname': instances }
#backend.del("vmpooler__#{request_id}__#{pool_alias}__#{pool}")
end
status 200
else
@ -1110,13 +1109,6 @@ module Vmpooler
failure.push("You provided a lifetime (#{arg}) but you must provide a positive number.")
end
#checkout = backend.hget("vmpooler__vm__#{params[:hostname]}", 'checkout')
#if checkout
# existing_lifetime = (Time.now - Time.parse(checkout)) / 60 / 60
# if (arg.to_i + existing_lifetime) >= max_lifetime_upper_limit
# failure.push("You provided a lifetime (#{arg}) that exceeds the configured maximum of #{max_lifetime_upper_limit} when added to the time since checkout.")
# end
#end
when 'tags'
unless arg.is_a?(Hash)
failure.push("You provided tags (#{arg}) as something other than a hash.")

View file

@ -81,7 +81,6 @@ module Vmpooler
rescue StandardError => e
$logger.log('s', "[!] [#{pool}] '#{vm}' #{timeout} #{provider} errored while checking a pending vm : #{e}")
@redis.with_metrics do |redis|
request_id = redis.hget("vmpooler__vm__#{vm}", 'request_id')
fail_pending_vm(vm, pool, timeout, redis)
end
raise
@ -192,7 +191,7 @@ module Vmpooler
mutex.synchronize do
@redis.with_metrics do |redis|
check_stamp = redis.hget('vmpooler__vm__' + vm, 'check')
return if check_stamp && (((Time.now - Time.parse(check_stamp)) / 60) <= $config[:config]['vm_checktime'])
break if check_stamp && (((Time.now - Time.parse(check_stamp)) / 60) <= $config[:config]['vm_checktime'])
redis.hset('vmpooler__vm__' + vm, 'check', Time.now)
# Check if the hosts TTL has expired
@ -208,11 +207,11 @@ module Vmpooler
redis.smove('vmpooler__ready__' + pool_name, 'vmpooler__completed__' + pool_name, vm)
$logger.log('d', "[!] [#{pool_name}] '#{vm}' reached end of TTL after #{ttl} minutes, removed from 'ready' queue")
return
return nil
end
end
return if mismatched_hostname?(vm, pool_name, provider, redis)
break if mismatched_hostname?(vm, pool_name, provider, redis)
vm_still_ready?(pool_name, vm, provider, redis)
end
@ -266,6 +265,7 @@ module Vmpooler
return if mutex.locked?
mutex.synchronize do
catch :stop_checking do
@redis.with_metrics do |redis|
# Check that VM is within defined lifetime
checkouttime = redis.hget('vmpooler__active__' + pool, vm)
@ -275,17 +275,17 @@ module Vmpooler
if (ttl.to_i > 0) && (running.to_i >= ttl.to_i)
move_vm_queue(pool, vm, 'running', 'completed', redis, "reached end of TTL after #{ttl} hours")
return
throw :stop_checking
end
end
if provider.vm_ready?(pool, vm)
return
throw :stop_checking
else
host = provider.get_vm(pool, vm)
if host
return
throw :stop_checking
else
move_vm_queue(pool, vm, 'running', 'completed', redis, 'is no longer in inventory, removing from running')
end
@ -293,6 +293,7 @@ module Vmpooler
end
end
end
end
def move_vm_queue(pool, vm, queue_from, queue_to, redis, msg = nil)
redis.smove("vmpooler__#{queue_from}__#{pool}", "vmpooler__#{queue_to}__#{pool}", vm)
@ -358,7 +359,6 @@ module Vmpooler
new_vmname = find_unique_hostname(pool_name, redis)
mutex = vm_mutex(new_vmname)
mutex.synchronize do
# Add VM to Redis inventory ('pending' pool)
redis.multi
redis.sadd('vmpooler__pending__' + pool_name, new_vmname)
@ -369,8 +369,6 @@ module Vmpooler
redis.hset('vmpooler__vm__' + new_vmname, 'pool_alias', pool_alias) if pool_alias
redis.exec
vm_hash = redis.hgetall("vmpooler__vm__#{new_vmname}")
begin
$logger.log('d', "[ ] [#{pool_name}] Starting to clone '#{new_vmname}'")
start = Time.now
@ -453,8 +451,8 @@ module Vmpooler
redis.hget("vmpooler__vm__#{vm}", 'template')
checkout, jenkins_build_url, user, poolname = redis.exec
return if checkout.nil?
user ||= 'unauthenticated'
user ||= 'unauthenticated'
unless jenkins_build_url
user = user.gsub('.', '_')
$metrics.increment("usage.#{user}.#{poolname}")
@ -965,10 +963,12 @@ module Vmpooler
def evaluate_template(pool, provider)
mutex = pool_mutex(pool['name'])
return if mutex.locked?
catch :update_not_needed do
@redis.with_metrics do |redis|
prepared_template = redis.hget('vmpooler__template__prepared', pool['name'])
configured_template = redis.hget('vmpooler__config__template', pool['name'])
return if mutex.locked?
if prepared_template.nil?
mutex.synchronize do
@ -983,14 +983,15 @@ module Vmpooler
end
end
end
return if configured_template.nil?
return if configured_template == prepared_template
throw :update_not_needed if configured_template.nil?
throw :update_not_needed if configured_template == prepared_template
mutex.synchronize do
update_pool_template(pool, provider, configured_template, prepared_template, redis)
end
end
end
end
def drain_pool(poolname, redis)
# Clear a pool of ready and pending instances
@ -1025,8 +1026,8 @@ module Vmpooler
@redis.with_metrics do |redis|
clone_target = redis.hget('vmpooler__config__clone_target', pool['name'])
return if clone_target.nil?
return if clone_target == pool['clone_target']
break if clone_target.nil?
break if clone_target == pool['clone_target']
$logger.log('s', "[*] [#{pool['name']}] clone updated from #{pool['clone_target']} to #{clone_target}")
mutex.synchronize do
@ -1045,12 +1046,12 @@ module Vmpooler
redis.scard("vmpooler__pending__#{pool['name']}")
ready, pending = redis.exec
total = pending.to_i + ready.to_i
return if total.nil?
return if total == 0
break if total.nil?
break if total == 0
mutex = pool_mutex(pool['name'])
return if mutex.locked?
return unless ready.to_i > pool['size']
break if mutex.locked?
break unless ready.to_i > pool['size']
mutex.synchronize do
difference = ready.to_i - pool['size']
@ -1073,10 +1074,10 @@ module Vmpooler
@redis.with_metrics do |redis|
poolsize = redis.hget('vmpooler__config__poolsize', pool['name'])
return if poolsize.nil?
break if poolsize.nil?
poolsize = Integer(poolsize)
return if poolsize == pool['size']
break if poolsize == pool['size']
mutex.synchronize do
pool['size'] = poolsize
@ -1087,7 +1088,7 @@ module Vmpooler
def reset_pool(pool)
poolname = pool['name']
@redis.with_metrics do |redis|
return unless redis.sismember('vmpooler__poolreset', poolname)
break unless redis.sismember('vmpooler__poolreset', poolname)
redis.srem('vmpooler__poolreset', poolname)
mutex = pool_mutex(poolname)
@ -1405,7 +1406,7 @@ module Vmpooler
def create_ondemand_vms(request_id, redis)
requested = redis.hget("vmpooler__odrequest__#{request_id}", 'requested')
if ! requested
unless requested
$logger.log('s', "Failed to find odrequest for request_id '#{request_id}'")
redis.zrem('vmpooler__provisioning__request', request_id)
return
@ -1424,16 +1425,18 @@ module Vmpooler
def process_ondemand_vms(redis)
queue_key = 'vmpooler__odcreate__task'
queue = redis.zrange(queue_key, 0, -1, :with_scores => true)
queue = redis.zrange(queue_key, 0, -1, with_scores: true)
ondemand_clone_limit = $config[:config]['ondemand_clone_limit']
@tasks['ondemand_clone_count'] = 0 unless @tasks['ondemand_clone_count']
queue.each do |request, score|
break unless @tasks['ondemand_clone_count'] < ondemand_clone_limit
pool_alias, pool, count, request_id = request.split(':')
count = count.to_i
provider = get_provider_for_pool(pool)
slots = ondemand_clone_limit - @tasks['ondemand_clone_count']
return if slots == 0
break if slots == 0
if slots >= count
count.times do
@tasks['ondemand_clone_count'] += 1