mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 18:08:42 -05:00
(MOB) "Good luck"
This commit is contained in:
parent
5cfc4ed3bb
commit
cd8a87560f
2 changed files with 145 additions and 62 deletions
|
|
@ -737,6 +737,22 @@ module Vmpooler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_ready_pool_vms(pool_name, provider, pool_check_response, inventory, pool_ttl)
|
||||||
|
# READY
|
||||||
|
$redis.smembers("vmpooler__ready__#{pool_name}").each do |vm|
|
||||||
|
if inventory[vm]
|
||||||
|
begin
|
||||||
|
pool_check_response[:checked_ready_vms] += 1
|
||||||
|
check_ready_vm(vm, pool_name, pool_ttl || 0, provider)
|
||||||
|
rescue => err
|
||||||
|
$logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating ready VMs: #{err}")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
move_vm_queue(pool_name, vm, 'ready', 'completed', 'is a ready VM but is missing from inventory. Marking as completed.')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def _check_pool(pool, provider)
|
def _check_pool(pool, provider)
|
||||||
pool_check_response = {
|
pool_check_response = {
|
||||||
discovered_vms: 0,
|
discovered_vms: 0,
|
||||||
|
|
@ -756,20 +772,7 @@ module Vmpooler
|
||||||
|
|
||||||
check_running_pool_vms(pool['name'], provider, pool_check_response, inventory)
|
check_running_pool_vms(pool['name'], provider, pool_check_response, inventory)
|
||||||
|
|
||||||
|
check_ready_pool_vms(pool['name'], provider, pool_check_response, inventory, pool['ready_ttl'])
|
||||||
# READY
|
|
||||||
$redis.smembers("vmpooler__ready__#{pool['name']}").each do |vm|
|
|
||||||
if inventory[vm]
|
|
||||||
begin
|
|
||||||
pool_check_response[:checked_ready_vms] += 1
|
|
||||||
check_ready_vm(vm, pool['name'], pool['ready_ttl'] || 0, provider)
|
|
||||||
rescue => err
|
|
||||||
$logger.log('d', "[!] [#{pool['name']}] _check_pool failed with an error while evaluating ready VMs: #{err}")
|
|
||||||
end
|
|
||||||
else
|
|
||||||
move_vm_queue(pool['name'], vm, 'ready', 'completed', 'is a ready VM but is missing from inventory. Marking as completed.')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# PENDING
|
# PENDING
|
||||||
$redis.smembers("vmpooler__pending__#{pool['name']}").each do |vm|
|
$redis.smembers("vmpooler__pending__#{pool['name']}").each do |vm|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ describe 'Pool Manager' do
|
||||||
|
|
||||||
let(:config) { YAML.load(<<-EOT
|
let(:config) { YAML.load(<<-EOT
|
||||||
---
|
---
|
||||||
:config:
|
:config: {}
|
||||||
:providers:
|
:providers:
|
||||||
:mock:
|
:mock:
|
||||||
:pools:
|
:pools:
|
||||||
|
|
@ -2664,6 +2664,86 @@ EOT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#check_running_pool_vms' do
|
||||||
|
let(:new_vm_response) {
|
||||||
|
# Mock response from Base Provider for vms_in_pool
|
||||||
|
[{ 'name' => vm}]
|
||||||
|
}
|
||||||
|
let(:inventory) {
|
||||||
|
# mock response from create_inventory
|
||||||
|
{vm => 1}
|
||||||
|
}
|
||||||
|
let(:pool_check_response) {
|
||||||
|
{:checked_running_vms => 0}
|
||||||
|
}
|
||||||
|
|
||||||
|
context 'Running VM not in the inventory' do
|
||||||
|
before(:each) do
|
||||||
|
expect(provider).to receive(:vms_in_pool).with(pool).and_return(new_vm_response)
|
||||||
|
expect(logger).to receive(:log).with('s', "[?] [#{pool}] '#{vm}' added to 'discovered' queue")
|
||||||
|
create_running_vm(pool,vm,token)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should not call check_running_vm' do
|
||||||
|
expect(subject).to receive(:check_running_vm).exactly(0).times
|
||||||
|
|
||||||
|
subject.check_running_pool_vms(pool, provider, pool_check_response, inventory)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should move the VM to completed queue' do
|
||||||
|
expect(subject).to receive(:move_vm_queue).with(pool,vm,'running','completed',String).and_call_original
|
||||||
|
|
||||||
|
subject._check_pool(pool_object,provider)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'Running VM in the inventory' do
|
||||||
|
before(:each) do
|
||||||
|
expect(provider).to receive(:vms_in_pool).with(pool).and_return(vm_response)
|
||||||
|
allow(subject).to receive(:check_running_vm)
|
||||||
|
create_running_vm(pool,vm,token)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should log an error if one occurs' do
|
||||||
|
expect(subject).to receive(:check_running_vm).and_raise(RuntimeError,'MockError')
|
||||||
|
expect(logger).to receive(:log).with('d', "[!] [#{pool}] _check_pool with an error while evaluating running VMs: MockError")
|
||||||
|
|
||||||
|
subject._check_pool(pool_object,provider)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the number of checked running VMs' do
|
||||||
|
result = subject._check_pool(pool_object,provider)
|
||||||
|
|
||||||
|
expect(result[:checked_running_vms]).to be(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use the VM lifetime in preference to defaults' do
|
||||||
|
big_lifetime = 2000
|
||||||
|
|
||||||
|
redis.hset("vmpooler__vm__#{vm}", 'lifetime',big_lifetime)
|
||||||
|
# The lifetime comes in as string
|
||||||
|
expect(subject).to receive(:check_running_vm).with(vm,pool,"#{big_lifetime}",provider)
|
||||||
|
|
||||||
|
subject._check_pool(pool_object,provider)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use the configuration default if the VM lifetime is not set' do
|
||||||
|
config[:config]['vm_lifetime'] = 50
|
||||||
|
expect(subject).to receive(:check_running_vm).with(vm,pool,50,provider)
|
||||||
|
|
||||||
|
subject._check_pool(pool_object,provider)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should use a lifetime of 12 if nothing is set' do
|
||||||
|
expect(subject).to receive(:check_running_vm).with(vm,pool,12,provider)
|
||||||
|
|
||||||
|
subject._check_pool(pool_object,provider)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
describe '#_check_pool' do
|
describe '#_check_pool' do
|
||||||
let(:new_vm_response) {
|
let(:new_vm_response) {
|
||||||
# Mock response from Base Provider for vms_in_pool
|
# Mock response from Base Provider for vms_in_pool
|
||||||
|
|
@ -2794,69 +2874,69 @@ EOT
|
||||||
end
|
end
|
||||||
|
|
||||||
# RUNNING
|
# RUNNING
|
||||||
context 'Running VM not in the inventory' do
|
# context 'Running VM not in the inventory' do
|
||||||
before(:each) do
|
# before(:each) do
|
||||||
expect(provider).to receive(:vms_in_pool).with(pool).and_return(new_vm_response)
|
# expect(provider).to receive(:vms_in_pool).with(pool).and_return(new_vm_response)
|
||||||
expect(logger).to receive(:log).with('s', "[?] [#{pool}] '#{new_vm}' added to 'discovered' queue")
|
# expect(logger).to receive(:log).with('s', "[?] [#{pool}] '#{new_vm}' added to 'discovered' queue")
|
||||||
create_running_vm(pool,vm,token)
|
# create_running_vm(pool,vm,token)
|
||||||
end
|
# end
|
||||||
|
|
||||||
it 'should not call check_running_vm' do
|
# it 'should not call check_running_vm' do
|
||||||
expect(subject).to receive(:check_running_vm).exactly(0).times
|
# expect(subject).to receive(:check_running_vm).exactly(0).times
|
||||||
|
|
||||||
subject._check_pool(pool_object,provider)
|
# subject._check_pool(pool_object,provider)
|
||||||
end
|
# end
|
||||||
|
|
||||||
it 'should move the VM to completed queue' do
|
# it 'should move the VM to completed queue' do
|
||||||
expect(subject).to receive(:move_vm_queue).with(pool,vm,'running','completed',String).and_call_original
|
# expect(subject).to receive(:move_vm_queue).with(pool,vm,'running','completed',String).and_call_original
|
||||||
|
|
||||||
subject._check_pool(pool_object,provider)
|
# subject._check_pool(pool_object,provider)
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
|
|
||||||
context 'Running VM in the inventory' do
|
# context 'Running VM in the inventory' do
|
||||||
before(:each) do
|
# before(:each) do
|
||||||
expect(provider).to receive(:vms_in_pool).with(pool).and_return(vm_response)
|
# expect(provider).to receive(:vms_in_pool).with(pool).and_return(vm_response)
|
||||||
allow(subject).to receive(:check_running_vm)
|
# allow(subject).to receive(:check_running_vm)
|
||||||
create_running_vm(pool,vm,token)
|
# create_running_vm(pool,vm,token)
|
||||||
end
|
# end
|
||||||
|
|
||||||
it 'should log an error if one occurs' do
|
# it 'should log an error if one occurs' do
|
||||||
expect(subject).to receive(:check_running_vm).and_raise(RuntimeError,'MockError')
|
# expect(subject).to receive(:check_running_vm).and_raise(RuntimeError,'MockError')
|
||||||
expect(logger).to receive(:log).with('d', "[!] [#{pool}] _check_pool with an error while evaluating running VMs: MockError")
|
# expect(logger).to receive(:log).with('d', "[!] [#{pool}] _check_pool with an error while evaluating running VMs: MockError")
|
||||||
|
|
||||||
subject._check_pool(pool_object,provider)
|
# subject._check_pool(pool_object,provider)
|
||||||
end
|
# end
|
||||||
|
|
||||||
it 'should return the number of checked running VMs' do
|
# it 'should return the number of checked running VMs' do
|
||||||
result = subject._check_pool(pool_object,provider)
|
# result = subject._check_pool(pool_object,provider)
|
||||||
|
|
||||||
expect(result[:checked_running_vms]).to be(1)
|
# expect(result[:checked_running_vms]).to be(1)
|
||||||
end
|
# end
|
||||||
|
|
||||||
it 'should use the VM lifetime in preference to defaults' do
|
# it 'should use the VM lifetime in preference to defaults' do
|
||||||
big_lifetime = 2000
|
# big_lifetime = 2000
|
||||||
|
|
||||||
redis.hset("vmpooler__vm__#{vm}", 'lifetime',big_lifetime)
|
# redis.hset("vmpooler__vm__#{vm}", 'lifetime',big_lifetime)
|
||||||
# The lifetime comes in as string
|
# # The lifetime comes in as string
|
||||||
expect(subject).to receive(:check_running_vm).with(vm,pool,"#{big_lifetime}",provider)
|
# expect(subject).to receive(:check_running_vm).with(vm,pool,"#{big_lifetime}",provider)
|
||||||
|
|
||||||
subject._check_pool(pool_object,provider)
|
# subject._check_pool(pool_object,provider)
|
||||||
end
|
# end
|
||||||
|
|
||||||
it 'should use the configuration default if the VM lifetime is not set' do
|
# it 'should use the configuration default if the VM lifetime is not set' do
|
||||||
config[:config]['vm_lifetime'] = 50
|
# config[:config]['vm_lifetime'] = 50
|
||||||
expect(subject).to receive(:check_running_vm).with(vm,pool,50,provider)
|
# expect(subject).to receive(:check_running_vm).with(vm,pool,50,provider)
|
||||||
|
|
||||||
subject._check_pool(pool_object,provider)
|
# subject._check_pool(pool_object,provider)
|
||||||
end
|
# end
|
||||||
|
|
||||||
it 'should use a lifetime of 12 if nothing is set' do
|
# it 'should use a lifetime of 12 if nothing is set' do
|
||||||
expect(subject).to receive(:check_running_vm).with(vm,pool,12,provider)
|
# expect(subject).to receive(:check_running_vm).with(vm,pool,12,provider)
|
||||||
|
|
||||||
subject._check_pool(pool_object,provider)
|
# subject._check_pool(pool_object,provider)
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
|
|
||||||
# READY
|
# READY
|
||||||
context 'Ready VM not in the inventory' do
|
context 'Ready VM not in the inventory' do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue