Merge pull request #135 from puppetlabs/rubocop_auto_fix

Run the rubocop auto_correct
This commit is contained in:
Gene Liverman 2021-07-12 10:04:35 -04:00 committed by GitHub
commit 302d52a45e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 516 additions and 511 deletions

View file

@ -53,10 +53,10 @@ class ABS
def self.list_active(verbose, url, _token, user)
hosts = []
get_active_requests(verbose, url, user).each do |req_hash|
if req_hash.key?('allocated_resources')
req_hash['allocated_resources'].each do |onehost|
hosts.push(onehost['hostname'])
end
next unless req_hash.key?('allocated_resources')
req_hash['allocated_resources'].each do |onehost|
hosts.push(onehost['hostname'])
end
end
@ -116,7 +116,7 @@ class ABS
ret_status = {}
hosts.each do |host|
ret_status[host] = {
'ok' => false,
'ok' => false
}
end
@ -132,7 +132,7 @@ class ABS
if hosts.include? vm_name['hostname']
if all_job_resources_accounted_for(req_hash['allocated_resources'], hosts)
ret_status[vm_name['hostname']] = {
'ok' => true,
'ok' => true
}
jobs_to_delete.push(req_hash)
else
@ -147,7 +147,7 @@ class ABS
jobs_to_delete.each do |job|
req_obj = {
'job_id' => job['request']['job']['id'],
'hosts' => job['allocated_resources'],
'hosts' => job['allocated_resources']
}
FloatyLogger.info "Deleting #{req_obj}" if verbose
@ -172,11 +172,11 @@ class ABS
res_body = JSON.parse(res.body)
if res_body.key?('vmpooler_platforms')
os_list << '*** VMPOOLER Pools ***'
if res_body['vmpooler_platforms'].is_a?(String)
os_list += JSON.parse(res_body['vmpooler_platforms']) # legacy ABS had another JSON string always-be-scheduling/pull/306
else
os_list += res_body['vmpooler_platforms']
end
os_list += if res_body['vmpooler_platforms'].is_a?(String)
JSON.parse(res_body['vmpooler_platforms']) # legacy ABS had another JSON string always-be-scheduling/pull/306
else
res_body['vmpooler_platforms']
end
end
end
@ -200,11 +200,11 @@ class ABS
if res_body.key?('nspooler_platforms')
os_list << ''
os_list << '*** NSPOOLER Pools ***'
if res_body['nspooler_platforms'].is_a?(String)
os_list += JSON.parse(res_body['nspooler_platforms']) # legacy ABS had another JSON string always-be-scheduling/pull/306
else
os_list += res_body['nspooler_platforms']
end
os_list += if res_body['nspooler_platforms'].is_a?(String)
JSON.parse(res_body['nspooler_platforms']) # legacy ABS had another JSON string always-be-scheduling/pull/306
else
res_body['nspooler_platforms']
end
end
end
@ -214,11 +214,11 @@ class ABS
if res_body.key?('aws_platforms')
os_list << ''
os_list << '*** AWS Pools ***'
if res_body['aws_platforms'].is_a?(String)
os_list += JSON.parse(res_body['aws_platforms']) # legacy ABS had another JSON string always-be-scheduling/pull/306
else
os_list += res_body['aws_platforms']
end
os_list += if res_body['aws_platforms'].is_a?(String)
JSON.parse(res_body['aws_platforms']) # legacy ABS had another JSON string always-be-scheduling/pull/306
else
res_body['aws_platforms']
end
end
end
@ -248,20 +248,20 @@ class ABS
conn = Http.get_conn(verbose, supported_abs_url(url))
conn.headers['X-AUTH-TOKEN'] = token if token
if continue.nil?
saved_job_id = user + "-" + DateTime.now.strftime('%Q')
else
saved_job_id = continue
end
saved_job_id = if continue.nil?
"#{user}-#{DateTime.now.strftime('%Q')}"
else
continue
end
req_obj = {
:resources => os_types,
:job => {
:id => saved_job_id,
:tags => {
:user => user,
},
},
resources: os_types,
job: {
id: saved_job_id,
tags: {
user: user
}
}
}
if config['vmpooler_fallback'] # optional and not available as cli flag
@ -271,11 +271,12 @@ class ABS
end
if config['priority']
req_obj[:priority] = if config['priority'] == 'high'
req_obj[:priority] = case config['priority']
when 'high'
1
elsif config['priority'] == 'medium'
when 'medium'
2
elsif config['priority'] == 'low'
when 'low'
3
else
config['priority'].to_i
@ -291,14 +292,12 @@ class ABS
retries = 360
status = validate_queue_status_response(res.status, res.body, "Initial request", verbose)
status = validate_queue_status_response(res.status, res.body, 'Initial request', verbose)
begin
(1..retries).each do |i|
res_body = check_queue(conn, saved_job_id, req_obj, verbose)
if res_body && res_body.is_a?(Array) # when we get a response with hostnames
return translated(res_body, saved_job_id)
end
return translated(res_body, saved_job_id) if res_body.is_a?(Array) # when we get a response with hostnames
sleep_seconds = 10 if i >= 10
sleep_seconds = i if i < 10
@ -317,10 +316,10 @@ class ABS
# We should fix the ABS API to be more like the vmpooler or nspooler api, but for now
#
def self.translated(res_body, job_id)
vmpooler_formatted_body = {'job_id' => job_id}
vmpooler_formatted_body = { 'job_id' => job_id }
res_body.each do |host|
if vmpooler_formatted_body[host['type']] && vmpooler_formatted_body[host['type']]['hostname'].class == Array
if vmpooler_formatted_body[host['type']] && vmpooler_formatted_body[host['type']]['hostname'].instance_of?(Array)
vmpooler_formatted_body[host['type']]['hostname'] << host['hostname']
else
vmpooler_formatted_body[host['type']] = { 'hostname' => [host['hostname']] }
@ -331,9 +330,9 @@ class ABS
vmpooler_formatted_body
end
def self.check_queue(conn, job_id, req_obj, verbose)
def self.check_queue(conn, _job_id, req_obj, verbose)
res = conn.post 'request', req_obj.to_json
status = validate_queue_status_response(res.status, res.body, "Check queue request", verbose)
status = validate_queue_status_response(res.status, res.body, 'Check queue request', verbose)
unless res.body.empty? || !valid_json?(res.body)
res_body = JSON.parse(res.body)
return res_body
@ -353,7 +352,7 @@ class ABS
res.body == 'OK'
end
def self.summary(verbose, url)
def self.summary(_verbose, _url)
raise NoMethodError, 'summary is not defined for ABS'
end
@ -405,17 +404,17 @@ class ABS
def self.valid_json?(json)
JSON.parse(json)
return true
true
rescue TypeError, JSON::ParserError => e
return false
false
end
# when missing, adds the required api/v2 in the url
def self.supported_abs_url(url)
expected_ending = "api/v2"
if !url.include?(expected_ending)
expected_ending = 'api/v2'
unless url.include?(expected_ending)
# add a slash if missing
expected_ending = "/#{expected_ending}" if url[-1] != "/"
expected_ending = "/#{expected_ending}" if url[-1] != '/'
url = "#{url}#{expected_ending}"
end
url

View file

@ -21,13 +21,11 @@ class Http
url = "https://#{url}" unless url?(url)
conn = Faraday.new(:url => url, :ssl => { :verify => false }) do |faraday|
Faraday.new(url: url, ssl: { verify: false }) do |faraday|
faraday.request :url_encoded
faraday.response :logger if verbose
faraday.adapter Faraday.default_adapter
end
conn
end
def self.get_conn_with_auth(verbose, url, user, password)
@ -37,13 +35,11 @@ class Http
url = "https://#{url}" unless url?(url)
conn = Faraday.new(:url => url, :ssl => { :verify => false }) do |faraday|
Faraday.new(url: url, ssl: { verify: false }) do |faraday|
faraday.request :url_encoded
faraday.request :basic_auth, user, password
faraday.response :logger if verbose
faraday.adapter Faraday.default_adapter
end
conn
end
end

View file

@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'logger'
class FloatyLogger < ::Logger
@ -19,22 +21,23 @@ class FloatyLogger < ::Logger
def self.setlevel=(level)
level = level.downcase
if level == "debug"
self.logger.level = ::Logger::DEBUG
elsif level == "info"
self.logger.level = ::Logger::INFO
elsif level == "error"
self.logger.level = ::Logger::ERROR
case level
when 'debug'
logger.level = ::Logger::DEBUG
when 'info'
logger.level = ::Logger::INFO
when 'error'
logger.level = ::Logger::ERROR
else
error("set loglevel to debug, info or error")
error('set loglevel to debug, info or error')
end
end
def initialize
super(STDERR)
super($stderr)
self.level = ::Logger::INFO
self.formatter = proc do |severity, datetime, progname, msg|
"#{msg}\n"
self.formatter = proc do |_severity, _datetime, _progname, msg|
"#{msg}\n"
end
end
end

View file

@ -22,7 +22,7 @@ class NonstandardPooler
status['reserved_hosts'] || []
end
def self.retrieve(verbose, os_type, token, url, _user, _options, ondemand = nil, _continue = nil)
def self.retrieve(verbose, os_type, token, url, _user, _options, _ondemand = nil, _continue = nil)
conn = Http.get_conn(verbose, url)
conn.headers['X-AUTH-TOKEN'] = token if token
@ -46,7 +46,8 @@ class NonstandardPooler
raise TokenError, 'Token provided was nil; Request cannot be made to modify VM' if token.nil?
modify_hash.each do |key, _value|
raise ModifyError, "Configured service type does not support modification of #{key}" unless %i[reason reserved_for_reason].include? key
raise ModifyError, "Configured service type does not support modification of #{key}" unless %i[reason
reserved_for_reason].include? key
end
if modify_hash[:reason]

View file

@ -12,13 +12,11 @@ class Pooler
response = conn.get 'vm'
response_body = JSON.parse(response.body)
hosts = if os_filter
response_body.select { |i| i[/#{os_filter}/] }
else
response_body
end
hosts
if os_filter
response_body.select { |i| i[/#{os_filter}/] }
else
response_body
end
end
def self.list_active(verbose, url, token, _user)
@ -50,7 +48,10 @@ class Pooler
elsif response.status == 403
raise "HTTP #{response.status}: Failed to obtain VMs from the pooler at #{url}/vm/#{os_string}. Request exceeds the configured per pool maximum. #{res_body}"
else
raise "HTTP #{response.status}: Failed to obtain VMs from the pooler at #{url}/vm/#{os_string}. #{res_body}" unless ondemand
unless ondemand
raise "HTTP #{response.status}: Failed to obtain VMs from the pooler at #{url}/vm/#{os_string}. #{res_body}"
end
raise "HTTP #{response.status}: Failed to obtain VMs from the pooler at #{url}/ondemandvm/#{os_string}. #{res_body}"
end
end
@ -63,7 +64,7 @@ class Pooler
FloatyLogger.info "waiting for request #{request_id} to be fulfilled"
sleep 5
end
FloatyLogger.info "The request has been fulfilled"
FloatyLogger.info 'The request has been fulfilled'
check_ondemandvm(verbose, request_id, url)
end
@ -84,8 +85,9 @@ class Pooler
def self.modify(verbose, url, hostname, token, modify_hash)
raise TokenError, 'Token provided was nil. Request cannot be made to modify vm' if token.nil?
modify_hash.keys.each do |key|
raise ModifyError, "Configured service type does not support modification of #{key}." unless %i[tags lifetime disk].include? key
modify_hash.each_key do |key|
raise ModifyError, "Configured service type does not support modification of #{key}." unless %i[tags lifetime
disk].include? key
end
conn = Http.get_conn(verbose, url)
@ -120,8 +122,7 @@ class Pooler
response = conn.post "vm/#{hostname}/disk/#{disk}"
res_body = JSON.parse(response.body)
res_body
JSON.parse(response.body)
end
def self.delete(verbose, url, hosts, token, _user)
@ -146,25 +147,21 @@ class Pooler
conn = Http.get_conn(verbose, url)
response = conn.get '/status'
res_body = JSON.parse(response.body)
res_body
JSON.parse(response.body)
end
def self.summary(verbose, url)
conn = Http.get_conn(verbose, url)
response = conn.get '/summary'
res_body = JSON.parse(response.body)
res_body
JSON.parse(response.body)
end
def self.query(verbose, url, hostname)
conn = Http.get_conn(verbose, url)
response = conn.get "vm/#{hostname}"
res_body = JSON.parse(response.body)
res_body
JSON.parse(response.body)
end
def self.snapshot(verbose, url, hostname, token)
@ -174,8 +171,7 @@ class Pooler
conn.headers['X-AUTH-TOKEN'] = token
response = conn.post "vm/#{hostname}/snapshot"
res_body = JSON.parse(response.body)
res_body
JSON.parse(response.body)
end
def self.revert(verbose, url, hostname, token, snapshot_sha)
@ -187,7 +183,6 @@ class Pooler
raise "Snapshot SHA provided was nil, could not revert #{hostname}" if snapshot_sha.nil?
response = conn.post "vm/#{hostname}/snapshot/#{snapshot_sha}"
res_body = JSON.parse(response.body)
res_body
JSON.parse(response.body)
end
end

View file

@ -39,7 +39,7 @@ class Service
def user
unless @config['user']
FloatyLogger.info "Enter your #{@config['url']} service username:"
@config['user'] = STDIN.gets.chomp
@config['user'] = $stdin.gets.chomp
end
@config['user']
end
@ -140,8 +140,8 @@ class Service
# some methods do not exist for ABS, and if possible should target the Pooler service
def maybe_use_vmpooler
if @service_object == ABS # this is not an instance
if !self.silent
FloatyLogger.info "The service in use is ABS, but the requested method should run against vmpooler directly, using fallback_vmpooler config from ~/.vmfloaty.yml"
unless silent
FloatyLogger.info 'The service in use is ABS, but the requested method should run against vmpooler directly, using fallback_vmpooler config from ~/.vmfloaty.yml'
self.silent = true
end

View file

@ -39,7 +39,10 @@ class Utils
# "engine"=>"vmpooler"
# }
raise ArgumentError, "Bad GET response passed to format_hosts: #{response_body.to_json}" unless response_body.delete('ok')
unless response_body.delete('ok')
raise ArgumentError,
"Bad GET response passed to format_hosts: #{response_body.to_json}"
end
# vmpooler reports the domain separately from the hostname
domain = response_body.delete('domain')
@ -50,7 +53,7 @@ class Utils
abs_job_id = response_body.delete('job_id')
result['job_id'] = abs_job_id unless abs_job_id.nil?
filtered_response_body = response_body.reject { |key, _| key == 'request_id' || key == 'ready' }
filtered_response_body = response_body.reject { |key, _| %w[request_id ready].include?(key) }
filtered_response_body.each do |os, value|
hostnames = Array(value['hostname'])
hostnames.map! { |host| "#{host}.#{domain}" } if domain
@ -106,7 +109,7 @@ class Utils
def self.pretty_print_hosts(verbose, service, hostnames = [], print_to_stderr = false, indent = 0)
output_target = print_to_stderr ? $stderr : $stdout
fetched_data = self.get_host_data(verbose, service, hostnames)
fetched_data = get_host_data(verbose, service, hostnames)
fetched_data.each do |hostname, host_data|
case service.type
when 'ABS'
@ -116,13 +119,14 @@ class Utils
output_target.puts "- [JobID:#{host_data['request']['job']['id']}] <#{host_data['state']}>"
host_data['allocated_resources'].each do |allocated_resources, _i|
if (allocated_resources['engine'] == "vmpooler" || allocated_resources['engine'] == 'ondemand') && service.config["vmpooler_fallback"]
if (allocated_resources['engine'] == 'vmpooler' || allocated_resources['engine'] == 'ondemand') && service.config['vmpooler_fallback']
vmpooler_service = service.clone
vmpooler_service.silent = true
vmpooler_service.maybe_use_vmpooler
self.pretty_print_hosts(verbose, vmpooler_service, allocated_resources['hostname'].split('.')[0], print_to_stderr, indent+2)
pretty_print_hosts(verbose, vmpooler_service, allocated_resources['hostname'].split('.')[0],
print_to_stderr, indent + 2)
else
#TODO we could add more specific metadata for the other services, nspooler and aws
# TODO: we could add more specific metadata for the other services, nspooler and aws
output_target.puts " - #{allocated_resources['hostname']} (#{allocated_resources['type']})"
end
end
@ -132,7 +136,7 @@ class Utils
duration = "#{host_data['running']}/#{host_data['lifetime']} hours"
metadata = [host_data['state'], host_data['template'], duration, *tag_pairs]
message = "- #{hostname}.#{host_data['domain']} (#{metadata.join(', ')})".gsub(/^/, ' ' * indent)
if host_data['state'] && host_data['state'] == "destroyed"
if host_data['state'] && host_data['state'] == 'destroyed'
output_target.puts message.colorize(:red)
else
output_target.puts message
@ -153,30 +157,26 @@ class Utils
result = {}
hostnames = [hostnames] unless hostnames.is_a? Array
hostnames.each do |hostname|
begin
response = service.query(verbose, hostname)
host_data = response[hostname]
if block_given?
yield host_data result
response = service.query(verbose, hostname)
host_data = response[hostname]
if block_given?
yield host_data result
else
case service.type
when 'ABS'
# For ABS, 'hostname' variable is the jobID
result[hostname] = host_data if host_data['state'] == 'allocated' || host_data['state'] == 'filled'
when 'Pooler'
result[hostname] = host_data
when 'NonstandardPooler'
result[hostname] = host_data
else
case service.type
when 'ABS'
# For ABS, 'hostname' variable is the jobID
if host_data['state'] == 'allocated' || host_data['state'] == 'filled'
result[hostname] = host_data
end
when 'Pooler'
result[hostname] = host_data
when 'NonstandardPooler'
result[hostname] = host_data
else
raise "Invalid service type #{service.type}"
end
raise "Invalid service type #{service.type}"
end
rescue StandardError => e
FloatyLogger.error("Something went wrong while trying to gather information on #{hostname}:")
FloatyLogger.error(e)
end
rescue StandardError => e
FloatyLogger.error("Something went wrong while trying to gather information on #{hostname}:")
FloatyLogger.error(e)
end
result
end
@ -192,16 +192,14 @@ class Utils
width = pools.keys.map(&:length).max
pools.each do |name, pool|
begin
max = pool['max']
ready = pool['ready']
pending = pool['pending']
missing = max - ready - pending
char = 'o'
puts "#{name.ljust(width)} #{(char * ready).green}#{(char * pending).yellow}#{(char * missing).red}"
rescue StandardError => e
FloatyLogger.error "#{name.ljust(width)} #{e.red}"
end
max = pool['max']
ready = pool['ready']
pending = pool['pending']
missing = max - ready - pending
char = 'o'
puts "#{name.ljust(width)} #{(char * ready).green}#{(char * pending).yellow}#{(char * missing).red}"
rescue StandardError => e
FloatyLogger.error "#{name.ljust(width)} #{e.red}"
end
puts message.colorize(status_response['status']['ok'] ? :default : :red)
when 'NonstandardPooler'
@ -211,16 +209,14 @@ class Utils
width = pools.keys.map(&:length).max
pools.each do |name, pool|
begin
max = pool['total_hosts']
ready = pool['available_hosts']
pending = pool['pending'] || 0 # not available for nspooler
missing = max - ready - pending
char = 'o'
puts "#{name.ljust(width)} #{(char * ready).green}#{(char * pending).yellow}#{(char * missing).red}"
rescue StandardError => e
FloatyLogger.error "#{name.ljust(width)} #{e.red}"
end
max = pool['total_hosts']
ready = pool['available_hosts']
pending = pool['pending'] || 0 # not available for nspooler
missing = max - ready - pending
char = 'o'
puts "#{name.ljust(width)} #{(char * ready).green}#{(char * pending).yellow}#{(char * missing).red}"
rescue StandardError => e
FloatyLogger.error "#{name.ljust(width)} #{e.red}"
end
when 'ABS'
FloatyLogger.error 'ABS Not OK' unless status_response
@ -256,11 +252,11 @@ class Utils
def self.get_service_config(config, options)
# The top-level url, user, and token values in the config file are treated as defaults
service_config = {
'url' => config['url'],
'user' => config['user'],
'url' => config['url'],
'user' => config['user'],
'token' => config['token'],
'vmpooler_fallback' => config['vmpooler_fallback'],
'type' => config['type'] || 'vmpooler',
'type' => config['type'] || 'vmpooler'
}
if config['services']
@ -271,7 +267,10 @@ class Utils
service_config.merge! values
else
# If the user provided a service name at the command line, use that service if posible, or fail
raise ArgumentError, "Could not find a configured service named '#{options.service}' in ~/.vmfloaty.yml" unless config['services'][options.service]
unless config['services'][options.service]
raise ArgumentError,
"Could not find a configured service named '#{options.service}' in ~/.vmfloaty.yml"
end
# If the service is configured but some values are missing, use the top-level defaults to fill them in
service_config.merge! config['services'][options.service]
@ -295,22 +294,22 @@ class Utils
config = Conf.read_config
# The top-level url, user, and token values in the config file are treated as defaults
service_config = {
'url' => config['url'],
'user' => config['user'],
'token' => config['token'],
'type' => 'vmpooler',
'url' => config['url'],
'user' => config['user'],
'token' => config['token'],
'type' => 'vmpooler'
}
# at a minimum, the url needs to be configured
if config['services'] && config['services'][vmpooler_fallback] && config['services'][vmpooler_fallback]['url']
# If the service is configured but some values are missing, use the top-level defaults to fill them in
service_config.merge! config['services'][vmpooler_fallback]
elsif vmpooler_fallback.nil?
raise ArgumentError,
"The abs service should have a key named 'vmpooler_fallback' in ~/.vmfloaty.yml with a value that points to a vmpooler service name use this format:\nservices:\n myabs:\n url: 'http://abs.com'\n user: 'superman'\n token: 'kryptonite'\n vmpooler_fallback: 'myvmpooler'\n myvmpooler:\n url: 'http://vmpooler.com'\n user: 'superman'\n token: 'kryptonite'"
else
if vmpooler_fallback.nil?
raise ArgumentError, "The abs service should have a key named 'vmpooler_fallback' in ~/.vmfloaty.yml with a value that points to a vmpooler service name use this format:\nservices:\n myabs:\n url: 'http://abs.com'\n user: 'superman'\n token: 'kryptonite'\n vmpooler_fallback: 'myvmpooler'\n myvmpooler:\n url: 'http://vmpooler.com'\n user: 'superman'\n token: 'kryptonite'"
else
raise ArgumentError, "Could not find a configured service named '#{vmpooler_fallback}' in ~/.vmfloaty.yml use this format:\nservices:\n #{vmpooler_fallback}:\n url: 'http://vmpooler.com'\n user: 'superman'\n token: 'kryptonite'"
end
raise ArgumentError,
"Could not find a configured service named '#{vmpooler_fallback}' in ~/.vmfloaty.yml use this format:\nservices:\n #{vmpooler_fallback}:\n url: 'http://vmpooler.com'\n user: 'superman'\n token: 'kryptonite'"
end
service_config

View file

@ -3,4 +3,3 @@
class Vmfloaty
VERSION = '1.3.0'
end