(POOLER-140) Ensure a VM is alive at checkout

This commit duplicates the vm_ready? check to the API layer to allow for API to validate that a VM is alive at checkout. Without this change API relies upon the checks in pool_manager validating pools. This change should allow for additional insight into whether a machine is in a ready state and resopnding at checkout time.
This commit is contained in:
kirby@puppetlabs.com 2019-07-16 09:19:47 -07:00
parent a755d8d6a2
commit d6e948d34d
5 changed files with 118 additions and 17 deletions

View file

@ -28,6 +28,7 @@ describe Vmpooler::API::V1 do
}
let(:current_time) { Time.now }
let(:socket) { double('socket') }
before(:each) do
app.settings.set :config, config
@ -41,6 +42,8 @@ describe Vmpooler::API::V1 do
it 'returns a single VM' do
create_ready_vm 'pool1', 'abcdefghijklmnop'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1", ''
expect_json(ok = true, http = 200)
@ -57,6 +60,8 @@ describe Vmpooler::API::V1 do
it 'returns a single VM for an alias' do
create_ready_vm 'pool1', 'abcdefghijklmnop'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/poolone", ''
expected = {
@ -104,6 +109,8 @@ describe Vmpooler::API::V1 do
create_ready_vm 'pool1', 'abcdefghijklmnop'
create_ready_vm 'pool2', 'qrstuvwxyz012345'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1+pool2", ''
expect_json(ok = true, http = 200)
@ -128,6 +135,8 @@ describe Vmpooler::API::V1 do
create_ready_vm 'pool2', '2qrstuvwxyz012345'
create_ready_vm 'pool2', '3qrstuvwxyz012345'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1+pool1+pool2+pool2+pool2", ''
expected = {
@ -161,6 +170,8 @@ describe Vmpooler::API::V1 do
it 'returns any checked out vms to their pools when not all requested vms can be allocated' do
create_ready_vm 'pool1', 'abcdefghijklmnop'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1+pool2", ''
expected = { ok: false }
@ -187,6 +198,8 @@ describe Vmpooler::API::V1 do
create_ready_vm 'pool1', 'abcdefghijklmnop'
create_ready_vm 'pool1', '0123456789012345'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1+pool1+pool2", ''
expected = { ok: false }
@ -214,6 +227,8 @@ describe Vmpooler::API::V1 do
create_ready_vm 'pool1', 'abcdefghijklmnop'
create_ready_vm 'pool2', '0123456789012345'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1+pool1+pool2+pool2+pool2", ''
expected = { ok: false }
@ -231,6 +246,8 @@ describe Vmpooler::API::V1 do
create_ready_vm 'pool1', 'abcdefghijklmnop'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1", '', {
'HTTP_X_AUTH_TOKEN' => 'abcdefghijklmnopqrstuvwxyz012345'
}
@ -255,6 +272,8 @@ describe Vmpooler::API::V1 do
create_ready_vm 'pool1', 'abcdefghijklmnop'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1", '', {
'HTTP_X_AUTH_TOKEN' => 'abcdefghijklmnopqrstuvwxyz012345'
}
@ -276,6 +295,8 @@ describe Vmpooler::API::V1 do
app.settings.set :config, auth: true
create_ready_vm 'pool1', 'abcdefghijklmnop'
allow_any_instance_of(Vmpooler::API::Helpers).to receive(:open_socket).and_return(socket)
post "#{prefix}/vm/pool1", ''
expected = {