1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

OpenStack: Add missing metadatum requests.

Add missing delete_meta and update_meta calls to the OpenStack
API. Also updates the model with some tests on these new calls.
This commit is contained in:
Dan Prince 2013-02-26 14:48:36 -05:00
parent 60fefe7b80
commit 8509d5c05d
4 changed files with 135 additions and 3 deletions

View file

@ -100,6 +100,10 @@ module Fog
request :update_metadata
request :delete_metadata
# Metadatam
request :delete_meta
request :update_meta
# Address
request :list_addresses
request :list_address_pools

View file

@ -0,0 +1,43 @@
module Fog
module Compute
class OpenStack
class Real
def delete_meta(collection_name, parent_id, key)
request(
:expects => 204,
:method => 'DELETE',
:path => "#{collection_name}/#{parent_id}/metadata/#{key}"
)
end
end
class Mock
def delete_meta(collection_name, parent_id, key)
if collection_name == "images" then
if not list_images_detail.body['images'].detect {|_| _['id'] == parent_id}
raise Fog::Compute::OpenStack::NotFound
end
end
if collection_name == "servers" then
if not list_servers_detail.body['servers'].detect {|_| _['id'] == parent_id}
raise Fog::Compute::OpenStack::NotFound
end
end
response = Excon::Response.new
response.status = 204
response
end
end
end
end
end

View file

@ -0,0 +1,46 @@
module Fog
module Compute
class OpenStack
class Real
def update_meta(collection_name, parent_id, key, value)
request(
:body => Fog::JSON.encode({ 'meta' => {key => value}}),
:expects => 200,
:method => 'PUT',
:path => "#{collection_name}/#{parent_id}/metadata/#{key}"
)
end
end
class Mock
def update_meta(collection_name, parent_id, key, value)
if collection_name == "images" then
if not list_images_detail.body['images'].detect {|_| _['id'] == parent_id}
raise Fog::Compute::OpenStack::NotFound
end
end
if collection_name == "servers" then
if not list_servers_detail.body['servers'].detect {|_| _['id'] == parent_id}
raise Fog::Compute::OpenStack::NotFound
end
end
#FIXME join w/ existing metadata here
response = Excon::Response.new
response.body = { "metadata" => {key => value} }
response.status = 200
response
end
end
end
end
end

View file

@ -1,6 +1,7 @@
Shindo.tests("Fog::Compute[:openstack] | server", ['openstack']) do
tests('success') do
tests('#security_groups').succeeds do
fog = Fog::Compute[:openstack]
@ -12,7 +13,6 @@ Shindo.tests("Fog::Compute[:openstack] | server", ['openstack']) do
image = fog.images.first.id
server = fog.servers.new(:name => 'test server',
:metadata => {"foo" => "bar"},
:flavor_ref => flavor,
:image_ref => image)
@ -23,8 +23,6 @@ Shindo.tests("Fog::Compute[:openstack] | server", ['openstack']) do
found_groups = server.security_groups
returns(1) { found_groups.length }
returns(1) { server.metadata.length }
group = found_groups.first
returns('my_group') { group.name }
returns(server.connection) { group.connection }
@ -42,6 +40,47 @@ Shindo.tests("Fog::Compute[:openstack] | server", ['openstack']) do
my_group.destroy if my_group
end
end
tests('#metadata').succeeds do
fog = Fog::Compute[:openstack]
begin
flavor = fog.flavors.first.id
image = fog.images.first.id
server = fog.servers.new(:name => 'test server',
:metadata => {"foo" => "bar"},
:flavor_ref => flavor,
:image_ref => image)
server.save
returns(1) { server.metadata.length }
server.metadata.each do |datum|
datum.value = 'foo'
datum.save
datum.destroy
end
ensure
unless Fog.mocking? then
server.destroy if server
begin
fog.servers.get(server.id).wait_for do false end
rescue Fog::Errors::Error
# ignore, server went away
end
end
end
end
end
end