mirror of
https://github.com/puppetlabs/vmfloaty.git
synced 2026-01-26 05:28:40 -05:00
Merge pull request #98 from puppetlabs/better-abs-config
(maint) Support any vmpooler for ABS via vmpooler_fallback
This commit is contained in:
commit
f3cd540455
4 changed files with 74 additions and 13 deletions
|
|
@ -210,7 +210,7 @@ class ABS
|
||||||
end
|
end
|
||||||
|
|
||||||
# Retrieve an OS from ABS.
|
# Retrieve an OS from ABS.
|
||||||
def self.retrieve(verbose, os_types, token, url, user, options, _ondemand = nil)
|
def self.retrieve(verbose, os_types, token, url, user, config, _ondemand = nil)
|
||||||
#
|
#
|
||||||
# Contents of post must be like:
|
# Contents of post must be like:
|
||||||
#
|
#
|
||||||
|
|
@ -231,7 +231,7 @@ class ABS
|
||||||
conn.headers['X-AUTH-TOKEN'] = token if token
|
conn.headers['X-AUTH-TOKEN'] = token if token
|
||||||
|
|
||||||
saved_job_id = DateTime.now.strftime('%Q')
|
saved_job_id = DateTime.now.strftime('%Q')
|
||||||
vmpooler_config = Utils.get_vmpooler_service_config
|
vmpooler_config = Utils.get_vmpooler_service_config(config['vmpooler_fallback'])
|
||||||
req_obj = {
|
req_obj = {
|
||||||
:resources => os_types,
|
:resources => os_types,
|
||||||
:job => {
|
:job => {
|
||||||
|
|
@ -243,15 +243,15 @@ class ABS
|
||||||
:vm_token => vmpooler_config['token'] # request with this token, on behalf of this user
|
:vm_token => vmpooler_config['token'] # request with this token, on behalf of this user
|
||||||
}
|
}
|
||||||
|
|
||||||
if options['priority']
|
if config['priority']
|
||||||
req_obj[:priority] = if options['priority'] == 'high'
|
req_obj[:priority] = if config['priority'] == 'high'
|
||||||
1
|
1
|
||||||
elsif options['priority'] == 'medium'
|
elsif config['priority'] == 'medium'
|
||||||
2
|
2
|
||||||
elsif options['priority'] == 'low'
|
elsif config['priority'] == 'low'
|
||||||
3
|
3
|
||||||
else
|
else
|
||||||
options['priority'].to_i
|
config['priority'].to_i
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,11 +141,11 @@ class Service
|
||||||
def maybe_use_vmpooler
|
def maybe_use_vmpooler
|
||||||
if @service_object.is_a?(ABS.class)
|
if @service_object.is_a?(ABS.class)
|
||||||
if !self.silent
|
if !self.silent
|
||||||
FloatyLogger.info "The service in use is ABS, but the requested method should run against vmpooler directly, using vmpooler config from ~/.vmfloaty.yml"
|
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
|
self.silent = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@config = Utils.get_vmpooler_service_config
|
@config = Utils.get_vmpooler_service_config(@config['vmpooler_fallback'])
|
||||||
@service_object = Pooler
|
@service_object = Pooler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -259,7 +259,7 @@ class Utils
|
||||||
end
|
end
|
||||||
|
|
||||||
# This method gets the vmpooler service configured in ~/.vmfloaty
|
# This method gets the vmpooler service configured in ~/.vmfloaty
|
||||||
def self.get_vmpooler_service_config
|
def self.get_vmpooler_service_config(vmpooler_fallback)
|
||||||
config = Conf.read_config
|
config = Conf.read_config
|
||||||
# The top-level url, user, and token values in the config file are treated as defaults
|
# The top-level url, user, and token values in the config file are treated as defaults
|
||||||
service_config = {
|
service_config = {
|
||||||
|
|
@ -270,11 +270,15 @@ class Utils
|
||||||
}
|
}
|
||||||
|
|
||||||
# at a minimum, the url needs to be configured
|
# at a minimum, the url needs to be configured
|
||||||
if config['services'] && config['services']['vmpooler'] && config['services']['vmpooler']['url']
|
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
|
# 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']
|
service_config.merge! config['services'][vmpooler_fallback]
|
||||||
else
|
else
|
||||||
raise ArgumentError, "Could not find a configured service named 'vmpooler' in ~/.vmfloaty.yml use this format:\nservices:\n vmpooler:\n url: 'http://vmpooler.com'\n user: 'superman'\n token: 'kryptonite'"
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
service_config
|
service_config
|
||||||
|
|
|
||||||
|
|
@ -255,4 +255,61 @@ describe Utils do
|
||||||
Utils.pretty_print_hosts(nil, service, hostname)
|
Utils.pretty_print_hosts(nil, service, hostname)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#get_vmpooler_service_config' do
|
||||||
|
let(:Conf) { double }
|
||||||
|
it 'returns an error if the vmpooler_fallback is not setup' do
|
||||||
|
config = {
|
||||||
|
'user' => 'foo',
|
||||||
|
'services' => {
|
||||||
|
'myabs' => {
|
||||||
|
'url' => 'http://abs.com',
|
||||||
|
'token' => 'krypto-night',
|
||||||
|
'type' => 'abs'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allow(Conf).to receive(:read_config).and_return(config)
|
||||||
|
expect{Utils.get_vmpooler_service_config(config['services']['myabs']['vmpooler_fallback'])}.to raise_error(ArgumentError)
|
||||||
|
end
|
||||||
|
it 'returns an error if the vmpooler_fallback is setup but cannot be found' do
|
||||||
|
config = {
|
||||||
|
'user' => 'foo',
|
||||||
|
'services' => {
|
||||||
|
'myabs' => {
|
||||||
|
'url' => 'http://abs.com',
|
||||||
|
'token' => 'krypto-night',
|
||||||
|
'type' => 'abs',
|
||||||
|
'vmpooler_fallback' => 'myvmpooler'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allow(Conf).to receive(:read_config).and_return(config)
|
||||||
|
expect{Utils.get_vmpooler_service_config(config['services']['myabs']['vmpooler_fallback'])}.to raise_error(ArgumentError, /myvmpooler/)
|
||||||
|
end
|
||||||
|
it 'returns the vmpooler_fallback config' do
|
||||||
|
config = {
|
||||||
|
'user' => 'foo',
|
||||||
|
'services' => {
|
||||||
|
'myabs' => {
|
||||||
|
'url' => 'http://abs.com',
|
||||||
|
'token' => 'krypto-night',
|
||||||
|
'type' => 'abs',
|
||||||
|
'vmpooler_fallback' => 'myvmpooler'
|
||||||
|
},
|
||||||
|
'myvmpooler' => {
|
||||||
|
'url' => 'http://vmpooler.com',
|
||||||
|
'token' => 'krypto-knight'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
allow(Conf).to receive(:read_config).and_return(config)
|
||||||
|
expect(Utils.get_vmpooler_service_config(config['services']['myabs']['vmpooler_fallback'])).to include({
|
||||||
|
'url' => 'http://vmpooler.com',
|
||||||
|
'token' => 'krypto-knight',
|
||||||
|
'user' => 'foo',
|
||||||
|
'type' => 'vmpooler'
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue