mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 10:08:40 -05:00
Merge pull request #314 from mattkirby/pooler_138
(POOLER-138) Support multiple pools per alias
This commit is contained in:
commit
8acf28d0b8
11 changed files with 41 additions and 28 deletions
|
|
@ -1,8 +1,6 @@
|
|||
cache: bundler
|
||||
sudo: false
|
||||
language: ruby
|
||||
services:
|
||||
- redis-server
|
||||
|
||||
matrix:
|
||||
include:
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@ git logs & PR history.
|
|||
|
||||
### Fixed
|
||||
- Improve support for configuration via environment variables (POOLER-137)
|
||||
- Support multiple pool backends per alias (POOLER-138)
|
||||
- Remove redis server testing requirement
|
||||
|
||||
# [0.3.0](https://github.com/puppetlabs/vmpooler/compare/0.2.2...0.3.0)
|
||||
|
||||
|
|
|
|||
|
|
@ -108,10 +108,11 @@ module Vmpooler
|
|||
parsed_config[:pool_names] << pool['name']
|
||||
if pool['alias']
|
||||
if pool['alias'].is_a?(Array)
|
||||
pool['alias'].each do |a|
|
||||
pool['alias'].each do |pool_alias|
|
||||
parsed_config[:alias] ||= {}
|
||||
parsed_config[:alias][a] = pool['name']
|
||||
parsed_config[:pool_names] << a
|
||||
parsed_config[:alias][pool_alias] = [pool['name']] unless parsed_config[:alias].key? pool_alias
|
||||
parsed_config[:alias][pool_alias] << pool['name'] unless parsed_config[:alias][pool_alias].include? pool['name']
|
||||
parsed_config[:pool_names] << pool_alias
|
||||
end
|
||||
elsif pool['alias'].is_a?(String)
|
||||
parsed_config[:alias][pool['alias']] = pool['name']
|
||||
|
|
|
|||
|
|
@ -40,8 +40,8 @@ module Vmpooler
|
|||
template_backends = [template]
|
||||
aliases = Vmpooler::API.settings.config[:alias]
|
||||
if aliases
|
||||
template_backends << aliases[template] if aliases[template]
|
||||
|
||||
template_backends = template_backends + aliases[template] if aliases[template].is_a?(Array)
|
||||
template_backends << aliases[template] if aliases[template].is_a?(String)
|
||||
pool_index = pool_index(pools)
|
||||
weighted_pools = {}
|
||||
template_backends.each do |t|
|
||||
|
|
@ -61,7 +61,9 @@ module Vmpooler
|
|||
template_backends.delete(selection)
|
||||
template_backends.unshift(selection)
|
||||
else
|
||||
template_backends = template_backends.sample(template_backends.count)
|
||||
first = template_backends.sample
|
||||
template_backends.delete(first)
|
||||
template_backends.unshift(first)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
require 'mock_redis'
|
||||
|
||||
def redis
|
||||
unless @redis
|
||||
@redis = Redis.new
|
||||
@redis.select(15) # let's use the highest numbered database available in a default install
|
||||
@redis = MockRedis.new
|
||||
end
|
||||
@redis
|
||||
end
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@ describe Vmpooler::API::V1 do
|
|||
let(:current_time) { Time.now }
|
||||
|
||||
before(:each) do
|
||||
redis.flushdb
|
||||
|
||||
app.settings.set :config, config
|
||||
app.settings.set :redis, redis
|
||||
app.settings.set :metrics, metrics
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@ describe Vmpooler::API::V1 do
|
|||
let(:current_time) { Time.now }
|
||||
|
||||
before(:each) do
|
||||
redis.flushdb
|
||||
|
||||
app.settings.set :config, config
|
||||
app.settings.set :redis, redis
|
||||
app.settings.set :config, auth: false
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@ describe Vmpooler::API::V1 do
|
|||
let(:current_time) { Time.now }
|
||||
|
||||
before(:each) do
|
||||
redis.flushdb
|
||||
|
||||
app.settings.set :config, config
|
||||
app.settings.set :redis, redis
|
||||
app.settings.set :config, auth: false
|
||||
|
|
|
|||
|
|
@ -19,19 +19,17 @@ describe Vmpooler::API::V1 do
|
|||
},
|
||||
pools: [
|
||||
{'name' => 'pool1', 'size' => 5},
|
||||
{'name' => 'pool2', 'size' => 10}
|
||||
{'name' => 'pool2', 'size' => 10},
|
||||
{'name' => 'pool3', 'size' => 10}
|
||||
],
|
||||
statsd: { 'prefix' => 'stats_prefix'},
|
||||
alias: { 'poolone' => 'pool1' },
|
||||
pool_names: [ 'pool1', 'pool2', 'poolone' ]
|
||||
alias: { 'poolone' => ['pool1'] },
|
||||
pool_names: [ 'pool1', 'pool2', 'pool3', 'poolone', 'genericpool' ]
|
||||
}
|
||||
}
|
||||
|
||||
let(:current_time) { Time.now }
|
||||
|
||||
before(:each) do
|
||||
redis.flushdb
|
||||
|
||||
app.settings.set :config, config
|
||||
app.settings.set :redis, redis
|
||||
app.settings.set :metrics, metrics
|
||||
|
|
@ -192,6 +190,29 @@ describe Vmpooler::API::V1 do
|
|||
expect_json(ok = true, http = 200)
|
||||
end
|
||||
|
||||
it 'returns VMs from multiple backend pools requested by an alias' do
|
||||
Vmpooler::API.settings.config[:alias]['genericpool'] = ['pool1', 'pool2', 'pool3']
|
||||
|
||||
create_ready_vm 'pool1', '1abcdefghijklmnop'
|
||||
create_ready_vm 'pool2', '2abcdefghijklmnop'
|
||||
create_ready_vm 'pool3', '1qrstuvwxyz012345'
|
||||
|
||||
post "#{prefix}/vm", '{"genericpool":"3"}'
|
||||
|
||||
expected = {
|
||||
ok: true,
|
||||
genericpool: {
|
||||
hostname: [ '1abcdefghijklmnop', '2abcdefghijklmnop', '1qrstuvwxyz012345' ]
|
||||
}
|
||||
}
|
||||
|
||||
result = JSON.parse(last_response.body)
|
||||
expect(result['ok']).to eq(true)
|
||||
expect(result['genericpool']['hostname']).to include('1abcdefghijklmnop', '2abcdefghijklmnop', '1qrstuvwxyz012345')
|
||||
|
||||
expect_json(ok = true, http = 200)
|
||||
end
|
||||
|
||||
it 'fails when not all requested vms can be allocated' do
|
||||
create_ready_vm 'pool1', '1abcdefghijklmnop'
|
||||
|
||||
|
|
|
|||
|
|
@ -30,8 +30,6 @@ describe Vmpooler::API::V1 do
|
|||
let(:current_time) { Time.now }
|
||||
|
||||
before(:each) do
|
||||
redis.flushdb
|
||||
|
||||
app.settings.set :config, config
|
||||
app.settings.set :redis, redis
|
||||
app.settings.set :metrics, metrics
|
||||
|
|
|
|||
|
|
@ -10,10 +10,6 @@ describe Vmpooler::API do
|
|||
|
||||
describe 'Dashboard' do
|
||||
|
||||
before(:each) do
|
||||
redis.flushdb
|
||||
end
|
||||
|
||||
context '/' do
|
||||
before { get '/' }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue