From 68254a3f1d46aec415f9b1404d64c14a728ed9e9 Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Wed, 2 Jan 2013 08:34:32 -0600 Subject: [PATCH 1/9] added server metadata operations for Fog::Compute::RackspaceV2 --- lib/fog/rackspace/compute_v2.rb | 7 +++ .../compute_v2/delete_server_metadata_item.rb | 26 ++++++++ .../compute_v2/get_server_metadata_item.rb | 26 ++++++++ .../compute_v2/list_server_metadata.rb | 26 ++++++++ .../compute_v2/set_server_metadata.rb | 28 +++++++++ .../compute_v2/set_server_metadata_item.rb | 27 ++++++++ .../compute_v2/update_server_metadata.rb | 27 ++++++++ .../requests/compute_v2/metadata_tests.rb | 61 +++++++++++++++++++ 8 files changed, 228 insertions(+) create mode 100644 lib/fog/rackspace/requests/compute_v2/delete_server_metadata_item.rb create mode 100644 lib/fog/rackspace/requests/compute_v2/get_server_metadata_item.rb create mode 100644 lib/fog/rackspace/requests/compute_v2/list_server_metadata.rb create mode 100644 lib/fog/rackspace/requests/compute_v2/set_server_metadata.rb create mode 100644 lib/fog/rackspace/requests/compute_v2/set_server_metadata_item.rb create mode 100644 lib/fog/rackspace/requests/compute_v2/update_server_metadata.rb create mode 100644 tests/rackspace/requests/compute_v2/metadata_tests.rb diff --git a/lib/fog/rackspace/compute_v2.rb b/lib/fog/rackspace/compute_v2.rb index 1c6891979..73e3e1f26 100644 --- a/lib/fog/rackspace/compute_v2.rb +++ b/lib/fog/rackspace/compute_v2.rb @@ -52,6 +52,13 @@ module Fog request :get_attachment request :list_attachments request :delete_attachment + + request :list_server_metadata + request :set_server_metadata + request :update_server_metadata + request :get_server_metadata_item + request :set_server_metadata_item + request :delete_server_metadata_item class Mock diff --git a/lib/fog/rackspace/requests/compute_v2/delete_server_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/delete_server_metadata_item.rb new file mode 100644 index 000000000..0e1dd25b5 --- /dev/null +++ b/lib/fog/rackspace/requests/compute_v2/delete_server_metadata_item.rb @@ -0,0 +1,26 @@ +module Fog + module Compute + class RackspaceV2 + class Real + def delete_server_metadata_item(server_id, key) + request( + :expects => 204, + :method => 'DELETE', + :path => "/servers/#{server_id}/metadata/#{key}" + ) + end + end + + class Mock + def delete_server_metadata_item(server_id, key) + raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + + response = Excon::Response.new + response.body = "" + response.status = 204 + response + end + end + end + end +end diff --git a/lib/fog/rackspace/requests/compute_v2/get_server_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/get_server_metadata_item.rb new file mode 100644 index 000000000..c4c8380bb --- /dev/null +++ b/lib/fog/rackspace/requests/compute_v2/get_server_metadata_item.rb @@ -0,0 +1,26 @@ +module Fog + module Compute + class RackspaceV2 + class Real + def get_server_metadata_item(server_id, key) + request( + :expects => 200, + :method => 'GET', + :path => "/servers/#{server_id}/metadata/#{key}" + ) + end + end + + class Mock + def get_server_metadata_item(server_id, key) + raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + + response = Excon::Response.new + response.status = 202 + response.body = {"meta" => {"environment" => "dev"}} + response + end + end + end + end +end diff --git a/lib/fog/rackspace/requests/compute_v2/list_server_metadata.rb b/lib/fog/rackspace/requests/compute_v2/list_server_metadata.rb new file mode 100644 index 000000000..9c8cdb0cf --- /dev/null +++ b/lib/fog/rackspace/requests/compute_v2/list_server_metadata.rb @@ -0,0 +1,26 @@ +module Fog + module Compute + class RackspaceV2 + class Real + def list_server_metadata(server_id) + request( + :expects => [200, 203], + :method => 'GET', + :path => "/servers/#{server_id}/metadata" + ) + end + end + + class Mock + def list_server_metadata(server_id) + raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + + response = Excon::Response.new + response.status = 202 + response.body = { "metadata"=>{"Tag"=>"Database"} } + response + end + end + end + end +end diff --git a/lib/fog/rackspace/requests/compute_v2/set_server_metadata.rb b/lib/fog/rackspace/requests/compute_v2/set_server_metadata.rb new file mode 100644 index 000000000..29d6dbdc0 --- /dev/null +++ b/lib/fog/rackspace/requests/compute_v2/set_server_metadata.rb @@ -0,0 +1,28 @@ +module Fog + module Compute + class RackspaceV2 + class Real + def set_server_metadata(server_id, metadata = {}) + request( + :expects => [200, 203], + :method => 'PUT', + :path => "/servers/#{server_id}/metadata", + :body => Fog::JSON.encode('metadata' => metadata) + ) + end + end + + + class Mock + def set_server_metadata(server_id, metadata = {}) + raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + + response = Excon::Response.new + response.status = 202 + response.body = {"metadata"=>{"environment"=>"dev"}} + response + end + end + end + end +end diff --git a/lib/fog/rackspace/requests/compute_v2/set_server_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/set_server_metadata_item.rb new file mode 100644 index 000000000..825844f31 --- /dev/null +++ b/lib/fog/rackspace/requests/compute_v2/set_server_metadata_item.rb @@ -0,0 +1,27 @@ +module Fog + module Compute + class RackspaceV2 + class Real + def set_server_metadata_item(server_id, key, value) + request( + :expects => 200, + :method => 'PUT', + :path => "/servers/#{server_id}/metadata/#{key}", + :body => Fog::JSON.encode('meta' => { key => value }) + ) + end + end + + class Mock + def set_server_metadata_item(server_id, key, value) + raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + + response = Excon::Response.new + response.status = 202 + response.body = {"meta" => {"environment", "test"}} + response + end + end + end + end +end diff --git a/lib/fog/rackspace/requests/compute_v2/update_server_metadata.rb b/lib/fog/rackspace/requests/compute_v2/update_server_metadata.rb new file mode 100644 index 000000000..a2c3d07ac --- /dev/null +++ b/lib/fog/rackspace/requests/compute_v2/update_server_metadata.rb @@ -0,0 +1,27 @@ +module Fog + module Compute + class RackspaceV2 + class Real + def update_server_metadata(server_id, metadata = {}) + request( + :expects => [200, 203], + :method => 'POST', + :path => "/servers/#{server_id}/metadata", + :body => Fog::JSON.encode('metadata' => metadata) + ) + end + end + + class Mock + def update_server_metadata(server_id, metadata = {}) + raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + + response = Excon::Response.new + response.status = 202 + response.body = {"metadata" => {"environment" => "dev", "Tag" => "Database"}} + response + end + end + end + end +end diff --git a/tests/rackspace/requests/compute_v2/metadata_tests.rb b/tests/rackspace/requests/compute_v2/metadata_tests.rb new file mode 100644 index 000000000..25777a106 --- /dev/null +++ b/tests/rackspace/requests/compute_v2/metadata_tests.rb @@ -0,0 +1,61 @@ +Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do + + @service = Fog::Compute.new(:provider => 'Rackspace', :version => 'V2') + + tests('success') do + begin + metadata = {"Tag" => "Database"} + + unless Fog.mocking? + @server = @service.servers.create(:name => "fog-server-metadata-#{Time.now.to_i}", + :flavor_id => 2, + :image_id => '3afe97b2-26dc-49c5-a2cc-a2fc8d80c001', + :metadata => {"Tag" => "Database"}) + @server.wait_for(timeout = 1200) { ready? } + end + tests('list_server_metadata').returns("metadata" => metadata) do + @service.list_server_metadata(@server.id).body + end + tests('set_server_metadata').returns("metadata" => {"environment" => "dev"}) do + @service.set_server_metadata(@server.id, {"environment" => "dev"}).body + end + tests('update_server_metadata').returns("metadata" => {"environment" => "dev", "Tag" => "Database"}) do + @service.update_server_metadata(@server.id, {"environment" => "dev", "Tag" => "Database"}).body + end + tests('get_server_metadata_item').returns("meta" => {"environment" => "dev"}) do + @service.get_server_metadata_item(@server.id, "environment").body + end + tests('set_server_metadata_item').returns("meta" => {"environment", "test"}) do + @service.set_server_metadata_item(@server.id, "environment", "test").body + end + tests('delete_server_metadata_item').succeeds do + @service.delete_server_metadata_item(@server.id, "environment").body + end + ensure + @server.destroy if @server + end + end + + tests('failure') do + tests('list_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.list_server_metadata(0) + end + tests('set_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.set_server_metadata(0, {"environment" => "dev"}) + end + tests('update_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.update_server_metadata(0, {"environment" => "dev", "Tag" => "Database"}) + end + tests('get_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.get_server_metadata_item(0, "environment") + end + tests('set_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.set_server_metadata_item(0, "environment", "test") + end + tests('delete_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.delete_server_metadata_item(0, "environment") + end + end +end + + From fc1c77ca7efc8e994cc6a5abca0b3364887b17bc Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Wed, 2 Jan 2013 15:39:44 -0600 Subject: [PATCH 2/9] refactored Fog::Compute::RackspaceV2 metadata to take collection as a parameter rather than using it as part of the method name. --- lib/fog/rackspace/compute_v2.rb | 12 +-- ...tadata_item.rb => delete_metadata_item.rb} | 6 +- ..._metadata_item.rb => get_metadata_item.rb} | 6 +- ...st_server_metadata.rb => list_metadata.rb} | 6 +- ...set_server_metadata.rb => set_metadata.rb} | 6 +- ..._metadata_item.rb => set_metadata_item.rb} | 6 +- ..._server_metadata.rb => update_metadata.rb} | 6 +- .../requests/compute_v2/metadata_tests.rb | 78 +++++++++++-------- 8 files changed, 68 insertions(+), 58 deletions(-) rename lib/fog/rackspace/requests/compute_v2/{delete_server_metadata_item.rb => delete_metadata_item.rb} (71%) rename lib/fog/rackspace/requests/compute_v2/{get_server_metadata_item.rb => get_metadata_item.rb} (72%) rename lib/fog/rackspace/requests/compute_v2/{list_server_metadata.rb => list_metadata.rb} (75%) rename lib/fog/rackspace/requests/compute_v2/{set_server_metadata.rb => set_metadata.rb} (75%) rename lib/fog/rackspace/requests/compute_v2/{set_server_metadata_item.rb => set_metadata_item.rb} (74%) rename lib/fog/rackspace/requests/compute_v2/{update_server_metadata.rb => update_metadata.rb} (75%) diff --git a/lib/fog/rackspace/compute_v2.rb b/lib/fog/rackspace/compute_v2.rb index 73e3e1f26..a425d43c5 100644 --- a/lib/fog/rackspace/compute_v2.rb +++ b/lib/fog/rackspace/compute_v2.rb @@ -53,12 +53,12 @@ module Fog request :list_attachments request :delete_attachment - request :list_server_metadata - request :set_server_metadata - request :update_server_metadata - request :get_server_metadata_item - request :set_server_metadata_item - request :delete_server_metadata_item + request :list_metadata + request :set_metadata + request :update_metadata + request :get_metadata_item + request :set_metadata_item + request :delete_metadata_item class Mock diff --git a/lib/fog/rackspace/requests/compute_v2/delete_server_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb similarity index 71% rename from lib/fog/rackspace/requests/compute_v2/delete_server_metadata_item.rb rename to lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb index 0e1dd25b5..6d8d41776 100644 --- a/lib/fog/rackspace/requests/compute_v2/delete_server_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb @@ -2,17 +2,17 @@ module Fog module Compute class RackspaceV2 class Real - def delete_server_metadata_item(server_id, key) + def delete_metadata_item(collection, server_id, key) request( :expects => 204, :method => 'DELETE', - :path => "/servers/#{server_id}/metadata/#{key}" + :path => "/#{collection}/#{server_id}/metadata/#{key}" ) end end class Mock - def delete_server_metadata_item(server_id, key) + def delete_metadata_item(collection, server_id, key) raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 response = Excon::Response.new diff --git a/lib/fog/rackspace/requests/compute_v2/get_server_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb similarity index 72% rename from lib/fog/rackspace/requests/compute_v2/get_server_metadata_item.rb rename to lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb index c4c8380bb..cef3f0242 100644 --- a/lib/fog/rackspace/requests/compute_v2/get_server_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb @@ -2,17 +2,17 @@ module Fog module Compute class RackspaceV2 class Real - def get_server_metadata_item(server_id, key) + def get_metadata_item(collection, server_id, key) request( :expects => 200, :method => 'GET', - :path => "/servers/#{server_id}/metadata/#{key}" + :path => "/#{collection}/#{server_id}/metadata/#{key}" ) end end class Mock - def get_server_metadata_item(server_id, key) + def get_metadata_item(collection, server_id, key) raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 response = Excon::Response.new diff --git a/lib/fog/rackspace/requests/compute_v2/list_server_metadata.rb b/lib/fog/rackspace/requests/compute_v2/list_metadata.rb similarity index 75% rename from lib/fog/rackspace/requests/compute_v2/list_server_metadata.rb rename to lib/fog/rackspace/requests/compute_v2/list_metadata.rb index 9c8cdb0cf..7623f1f95 100644 --- a/lib/fog/rackspace/requests/compute_v2/list_server_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/list_metadata.rb @@ -2,17 +2,17 @@ module Fog module Compute class RackspaceV2 class Real - def list_server_metadata(server_id) + def list_metadata(collection, server_id) request( :expects => [200, 203], :method => 'GET', - :path => "/servers/#{server_id}/metadata" + :path => "/#{collection}/#{server_id}/metadata" ) end end class Mock - def list_server_metadata(server_id) + def list_metadata(collection, server_id) raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 response = Excon::Response.new diff --git a/lib/fog/rackspace/requests/compute_v2/set_server_metadata.rb b/lib/fog/rackspace/requests/compute_v2/set_metadata.rb similarity index 75% rename from lib/fog/rackspace/requests/compute_v2/set_server_metadata.rb rename to lib/fog/rackspace/requests/compute_v2/set_metadata.rb index 29d6dbdc0..fa2eddfe2 100644 --- a/lib/fog/rackspace/requests/compute_v2/set_server_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/set_metadata.rb @@ -2,11 +2,11 @@ module Fog module Compute class RackspaceV2 class Real - def set_server_metadata(server_id, metadata = {}) + def set_metadata(collection, server_id, metadata = {}) request( :expects => [200, 203], :method => 'PUT', - :path => "/servers/#{server_id}/metadata", + :path => "/#{collection}/#{server_id}/metadata", :body => Fog::JSON.encode('metadata' => metadata) ) end @@ -14,7 +14,7 @@ module Fog class Mock - def set_server_metadata(server_id, metadata = {}) + def set_metadata(collection, server_id, metadata = {}) raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 response = Excon::Response.new diff --git a/lib/fog/rackspace/requests/compute_v2/set_server_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb similarity index 74% rename from lib/fog/rackspace/requests/compute_v2/set_server_metadata_item.rb rename to lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb index 825844f31..2c2d47d4f 100644 --- a/lib/fog/rackspace/requests/compute_v2/set_server_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb @@ -2,18 +2,18 @@ module Fog module Compute class RackspaceV2 class Real - def set_server_metadata_item(server_id, key, value) + def set_metadata_item(collection, server_id, key, value) request( :expects => 200, :method => 'PUT', - :path => "/servers/#{server_id}/metadata/#{key}", + :path => "/#{collection}/#{server_id}/metadata/#{key}", :body => Fog::JSON.encode('meta' => { key => value }) ) end end class Mock - def set_server_metadata_item(server_id, key, value) + def set_metadata_item(collection, server_id, key, value) raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 response = Excon::Response.new diff --git a/lib/fog/rackspace/requests/compute_v2/update_server_metadata.rb b/lib/fog/rackspace/requests/compute_v2/update_metadata.rb similarity index 75% rename from lib/fog/rackspace/requests/compute_v2/update_server_metadata.rb rename to lib/fog/rackspace/requests/compute_v2/update_metadata.rb index a2c3d07ac..6ee360b08 100644 --- a/lib/fog/rackspace/requests/compute_v2/update_server_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/update_metadata.rb @@ -2,18 +2,18 @@ module Fog module Compute class RackspaceV2 class Real - def update_server_metadata(server_id, metadata = {}) + def update_metadata(collection, server_id, metadata = {}) request( :expects => [200, 203], :method => 'POST', - :path => "/servers/#{server_id}/metadata", + :path => "/#{collection}/#{server_id}/metadata", :body => Fog::JSON.encode('metadata' => metadata) ) end end class Mock - def update_server_metadata(server_id, metadata = {}) + def update_metadata(collection, server_id, metadata = {}) raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 response = Excon::Response.new diff --git a/tests/rackspace/requests/compute_v2/metadata_tests.rb b/tests/rackspace/requests/compute_v2/metadata_tests.rb index 25777a106..54344f8ea 100644 --- a/tests/rackspace/requests/compute_v2/metadata_tests.rb +++ b/tests/rackspace/requests/compute_v2/metadata_tests.rb @@ -13,23 +13,29 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do :metadata => {"Tag" => "Database"}) @server.wait_for(timeout = 1200) { ready? } end - tests('list_server_metadata').returns("metadata" => metadata) do - @service.list_server_metadata(@server.id).body - end - tests('set_server_metadata').returns("metadata" => {"environment" => "dev"}) do - @service.set_server_metadata(@server.id, {"environment" => "dev"}).body - end - tests('update_server_metadata').returns("metadata" => {"environment" => "dev", "Tag" => "Database"}) do - @service.update_server_metadata(@server.id, {"environment" => "dev", "Tag" => "Database"}).body - end - tests('get_server_metadata_item').returns("meta" => {"environment" => "dev"}) do - @service.get_server_metadata_item(@server.id, "environment").body - end - tests('set_server_metadata_item').returns("meta" => {"environment", "test"}) do - @service.set_server_metadata_item(@server.id, "environment", "test").body - end - tests('delete_server_metadata_item').succeeds do - @service.delete_server_metadata_item(@server.id, "environment").body + [['server', @server.id]].each do |params| + collection = params[0] + id = params[1] + tests(collection) do + tests('list_metadata').returns("metadata" => metadata) do + @service.list_metadata(collection, id).body + end + tests('set_metadata').returns("metadata" => {"environment" => "dev"}) do + @service.set_metadata(collection, id, {"environment" => "dev"}).body + end + tests('update_metadata').returns("metadata" => {"environment" => "dev", "Tag" => "Database"}) do + @service.update_metadata(collection, id, {"environment" => "dev", "Tag" => "Database"}).body + end + tests('get_metadata_item').returns("meta" => {"environment" => "dev"}) do + @service.get_metadata_item(collection, id, "environment").body + end + tests('set_metadata_item').returns("meta" => {"environment", "test"}) do + @service.set_metadata_item(collection, id, "environment", "test").body + end + tests('delete_metadata_item').succeeds do + @service.delete_metadata_item(collection, id, "environment").body + end + end end ensure @server.destroy if @server @@ -37,23 +43,27 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do end tests('failure') do - tests('list_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do - @service.list_server_metadata(0) - end - tests('set_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do - @service.set_server_metadata(0, {"environment" => "dev"}) - end - tests('update_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do - @service.update_server_metadata(0, {"environment" => "dev", "Tag" => "Database"}) - end - tests('get_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do - @service.get_server_metadata_item(0, "environment") - end - tests('set_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do - @service.set_server_metadata_item(0, "environment", "test") - end - tests('delete_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do - @service.delete_server_metadata_item(0, "environment") + ['server'].each do |collection| + tests(collection) do + tests('list_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.list_metadata(collection, 0) + end + tests('set_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.set_metadata(collection, 0, {"environment" => "dev"}) + end + tests('update_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.update_metadata(collection, 0, {"environment" => "dev", "Tag" => "Database"}) + end + tests('get_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.get_metadata_item(collection, 0, "environment") + end + tests('set_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.set_metadata_item(collection, 0, "environment", "test") + end + tests('delete_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do + @service.delete_metadata_item(collection, 0, "environment") + end + end end end end From 7ccdc04050d064b02ce63435025de75ed50d5272 Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Thu, 3 Jan 2013 14:51:36 -0600 Subject: [PATCH 3/9] fixing broken metadata tests --- .../requests/compute_v2/metadata_tests.rb | 70 ++++++++++++++----- 1 file changed, 51 insertions(+), 19 deletions(-) diff --git a/tests/rackspace/requests/compute_v2/metadata_tests.rb b/tests/rackspace/requests/compute_v2/metadata_tests.rb index 54344f8ea..02800bdd8 100644 --- a/tests/rackspace/requests/compute_v2/metadata_tests.rb +++ b/tests/rackspace/requests/compute_v2/metadata_tests.rb @@ -4,46 +4,78 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do tests('success') do begin - metadata = {"Tag" => "Database"} + metadata = {"tag" => "database"} unless Fog.mocking? - @server = @service.servers.create(:name => "fog-server-metadata-#{Time.now.to_i}", + name = "fog-server-metadata-#{Time.now.to_i}" + @server = @service.servers.create(:name => name, :flavor_id => 2, :image_id => '3afe97b2-26dc-49c5-a2cc-a2fc8d80c001', - :metadata => {"Tag" => "Database"}) - @server.wait_for(timeout = 1200) { ready? } + :metadata => metadata) + @server.wait_for(timeout = 1500) { ready? } + + + @server_id = @server.id + @image_id = @server.create_image(name, :metadata => metadata) + @image = @service.images.get @image_id + else + @image_id = 1 + @server_id = 1 end - [['server', @server.id]].each do |params| - collection = params[0] - id = params[1] - tests(collection) do + + tests("servers") do tests('list_metadata').returns("metadata" => metadata) do - @service.list_metadata(collection, id).body + @service.list_metadata("servers", @server_id).body end tests('set_metadata').returns("metadata" => {"environment" => "dev"}) do - @service.set_metadata(collection, id, {"environment" => "dev"}).body + @service.set_metadata("servers", @server_id, {"environment" => "dev"}).body end - tests('update_metadata').returns("metadata" => {"environment" => "dev", "Tag" => "Database"}) do - @service.update_metadata(collection, id, {"environment" => "dev", "Tag" => "Database"}).body + tests('update_metadata').returns("metadata" => {"environment" => "dev", "tag" => "database"}) do + @service.update_metadata("servers", @server_id, {"environment" => "dev", "tag" => "database"}).body end tests('get_metadata_item').returns("meta" => {"environment" => "dev"}) do - @service.get_metadata_item(collection, id, "environment").body + @service.get_metadata_item("servers", @server_id, "environment").body end tests('set_metadata_item').returns("meta" => {"environment", "test"}) do - @service.set_metadata_item(collection, id, "environment", "test").body + @service.set_metadata_item("servers", @server_id, "environment", "test").body end tests('delete_metadata_item').succeeds do - @service.delete_metadata_item(collection, id, "environment").body + @service.delete_metadata_item("servers", @server_id, "environment").body + end + end + + tests("images") do + @image.wait_for(timeout = 1500) { ready? } + tests('list_metadata').returns(metadata) do + h = @service.list_metadata("images", @image_id).body + h["metadata"].reject {|k,v| k.downcase != "tag"} #only look at the metadata we created + end + tests('set_metadata').returns({"environment" => "dev"}) do + h = @service.set_metadata("images", @image_id, {"environment" => "dev"}).body + h["metadata"].reject {|k,v| k.downcase != "environment"} #only look at the metadata we created + end + tests('update_metadata').returns({"environment" => "dev", "tag" => "Database"}) do + h = @service.update_metadata("images", @image_id, {"environment" => "dev", "tag" => "Database"}).body + h["metadata"].reject {|k,v| !['environment', 'tag'].include?(k.downcase)} #only look at the metadata we created + end + tests('get_metadata_item').returns("meta" => {"environment" => "dev"}) do + @service.get_metadata_item("images", @image_id, "environment").body + end + tests('set_metadata_item').returns("meta" => {"environment", "test"}) do + @service.set_metadata_item("images", @image_id, "environment", "test").body + end + tests('delete_metadata_item').succeeds do + @service.delete_metadata_item("images", @image_id, "environment").body end end - end ensure - @server.destroy if @server + @image.destroy if @image + @server.destroy if @server end end tests('failure') do - ['server'].each do |collection| + ['server', 'image'].each do |collection| tests(collection) do tests('list_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do @service.list_metadata(collection, 0) @@ -52,7 +84,7 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do @service.set_metadata(collection, 0, {"environment" => "dev"}) end tests('update_server_metadata').raises(Fog::Compute::RackspaceV2::NotFound) do - @service.update_metadata(collection, 0, {"environment" => "dev", "Tag" => "Database"}) + @service.update_metadata(collection, 0, {"environment" => "dev", "tag" => "database"}) end tests('get_server_metadata_item').raises(Fog::Compute::RackspaceV2::NotFound) do @service.get_metadata_item(collection, 0, "environment") From 4116970d662f90fa06fe8f6f0245998073bc2886 Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Mon, 7 Jan 2013 11:10:17 -0600 Subject: [PATCH 4/9] changed metadata implementation for Fog::Compute::RackspaceV2::Server and Fog::Compute::RackspaceV2::Image --- lib/fog/rackspace/models/compute_v2/image.rb | 21 +++++- .../models/compute_v2/meta_parent.rb | 33 ++++++++ .../rackspace/models/compute_v2/metadata.rb | 75 +++++++++++++++++++ .../rackspace/models/compute_v2/metadatum.rb | 29 +++++++ lib/fog/rackspace/models/compute_v2/server.rb | 25 ++++++- .../models/compute_v2/metadata_tests.rb | 40 ++++++++++ 6 files changed, 219 insertions(+), 4 deletions(-) create mode 100644 lib/fog/rackspace/models/compute_v2/meta_parent.rb create mode 100644 lib/fog/rackspace/models/compute_v2/metadata.rb create mode 100644 lib/fog/rackspace/models/compute_v2/metadatum.rb create mode 100644 tests/rackspace/models/compute_v2/metadata_tests.rb diff --git a/lib/fog/rackspace/models/compute_v2/image.rb b/lib/fog/rackspace/models/compute_v2/image.rb index 1e30727d7..34a82f5e0 100644 --- a/lib/fog/rackspace/models/compute_v2/image.rb +++ b/lib/fog/rackspace/models/compute_v2/image.rb @@ -21,9 +21,28 @@ module Fog attribute :progress attribute :minDisk attribute :minRam - attribute :metadata attribute :disk_config, :aliases => 'OS-DCF:diskConfig' attribute :links + + def initialize(attributes={}) + @connection = attributes[:connection] + super + end + + def metadata + raise "Please save image before accessing metadata" unless identity + @metadata ||= begin + Fog::Compute::RackspaceV2::Metadata.new({ + :connection => connection, + :parent => self + }) + end + end + + def metadata=(hash={}) + raise "Please save image before accessing metadata" unless identity + metadata.from_hash(hash) + end def ready? state == ACTIVE diff --git a/lib/fog/rackspace/models/compute_v2/meta_parent.rb b/lib/fog/rackspace/models/compute_v2/meta_parent.rb new file mode 100644 index 000000000..c2b92c2a5 --- /dev/null +++ b/lib/fog/rackspace/models/compute_v2/meta_parent.rb @@ -0,0 +1,33 @@ +module Fog + module Compute + class RackspaceV2 + module MetaParent + + def parent + @parent + end + + def parent=(new_parent) + @parent = new_parent + end + + def collection_name + if parent.class == Fog::Compute::RackspaceV2::Image + return "images" + elsif parent.class == Fog::Compute::RackspaceV2::Server + return "servers" + else + raise "Metadata is not supported for this model type." + end + end + + def metas_to_hash(metas) + hash = {} + metas.each { |meta| hash[meta.key] = meta.value } + hash + end + + end + end + end +end diff --git a/lib/fog/rackspace/models/compute_v2/metadata.rb b/lib/fog/rackspace/models/compute_v2/metadata.rb new file mode 100644 index 000000000..3994efd37 --- /dev/null +++ b/lib/fog/rackspace/models/compute_v2/metadata.rb @@ -0,0 +1,75 @@ +require 'fog/core/collection' +require 'fog/rackspace/models/compute_v2/meta_parent' +require 'fog/rackspace/models/compute_v2/metadatum' +require 'fog/rackspace/models/compute_v2/image' +require 'fog/rackspace/models/compute_v2/server' + +module Fog + module Compute + class RackspaceV2 + + class Metadata < Fog::Collection + + model Fog::Compute::RackspaceV2::Metadatum + + include Fog::Compute::RackspaceV2::MetaParent + + def all + requires :parent + data = connection.list_metadata(collection_name, parent.id).body['metadata'] + from_hash(data) + end + + def get(key) + requires :parent + data = connection.get_metadata_item(collection_name, parent.id, key).body["meta"] + datum = data.first + new(:key => datum[0], :value => datum[1]) + rescue Fog::Compute::RackspaceV2::NotFound + nil + end + + def [](key) + return nil unless key + datum = self.find {|datum| datum.key == key || datum.key == key.to_sym } + datum ? datum.value : nil + end + + def []=(key, value) + return nil unless key + datum = self.find {|datum| datum.key == key || datum.key == key.to_sym } + if datum + data.value = value + else + self << Fog::Compute::RackspaceV2::Metadatum.new(:key => key, :value => value, :connection => connection, :parent => parent) + end + value + end + + def save + requires :parent + connection.set_metadata(collection_name, parent.id, to_hash) + end + + def new(attributes = {}) + requires :parent + super({ :parent => parent }.merge!(attributes)) + end + + def from_hash(hash) + return unless hash + metas = [] + hash.each_pair {|k,v| metas << {:key => k, :value => v} } + load(metas) + end + + def to_hash + h = {} + self.each { |datum| h[datum.key] = datum.value } + h + end + + end + end + end +end diff --git a/lib/fog/rackspace/models/compute_v2/metadatum.rb b/lib/fog/rackspace/models/compute_v2/metadatum.rb new file mode 100644 index 000000000..3cd98952a --- /dev/null +++ b/lib/fog/rackspace/models/compute_v2/metadatum.rb @@ -0,0 +1,29 @@ +require 'fog/core/model' +require 'fog/rackspace/models/compute_v2/meta_parent' + +module Fog + module Compute + class RackspaceV2 + class Metadatum < Fog::Model + + include Fog::Compute::RackspaceV2::MetaParent + + identity :key + attribute :value + + def destroy + requires :identity + connection.delete_metadata_item(collection_name, parent.id, key) + true + end + + def save + requires :identity, :value + connection.set_metadata_item(collection_name, parent.id, key, value) + true + end + + end + end + end +end diff --git a/lib/fog/rackspace/models/compute_v2/server.rb b/lib/fog/rackspace/models/compute_v2/server.rb index 6a4f30b97..ade61cc50 100644 --- a/lib/fog/rackspace/models/compute_v2/server.rb +++ b/lib/fog/rackspace/models/compute_v2/server.rb @@ -1,4 +1,5 @@ require 'fog/compute/models/server' +require 'fog/rackspace/models/compute_v2/metadata' module Fog module Compute @@ -32,7 +33,6 @@ module Fog attribute :user_id attribute :tenant_id attribute :links - attribute :metadata attribute :personality attribute :ipv4_address, :aliases => 'accessIPv4' attribute :ipv6_address, :aliases => 'accessIPv6' @@ -42,7 +42,26 @@ module Fog attribute :flavor_id, :aliases => 'flavor', :squash => 'id' attribute :image_id, :aliases => 'image', :squash => 'id' - attr_reader :password + attr_reader :password + def initialize(attributes={}) + @connection = attributes[:connection] + super + end + + def metadata + raise "Please save server before accessing metadata" unless identity + @metadata ||= begin + Fog::Compute::RackspaceV2::Metadata.new({ + :connection => connection, + :parent => self + }) + end + end + + def metadata=(hash={}) + raise "Please save server before accessing metadata" unless identity + metadata.from_hash(hash) + end def save if identity @@ -58,7 +77,7 @@ module Fog options = {} options[:disk_config] = disk_config unless disk_config.nil? - options[:metadata] = metadata unless metadata.nil? + options[:metadata] = metadata unless @metadata.nil? options[:personality] = personality unless personality.nil? data = connection.create_server(name, image_id, flavor_id, 1, 1, options) diff --git a/tests/rackspace/models/compute_v2/metadata_tests.rb b/tests/rackspace/models/compute_v2/metadata_tests.rb new file mode 100644 index 000000000..821854a83 --- /dev/null +++ b/tests/rackspace/models/compute_v2/metadata_tests.rb @@ -0,0 +1,40 @@ +Shindo.tests('Fog::Compute::RackspaceV2 | metadata', ['rackspace']) do + + pending if Fog.mocking? + + service = Fog::Compute::RackspaceV2.new + test_time = Time.now.to_i.to_s + + tests('success') do + begin + @server = service.servers.create(:name => "fog_server_#{test_time}", :flavor_id => 2, :image_id => "3afe97b2-26dc-49c5-a2cc-a2fc8d80c001") + @server.wait_for(timeout=1500) { ready? } + @server = service.servers.get "2ee0e1b5-3350-40ae-873a-fff4941cc400" + + tests('server') do + collection_tests(@server.metadata, {:key => 'my_key', :value => 'my_value'}) do + @server.wait_for { ready? } + end + end + + tests('image') do + image_id = @server.create_image("fog_image_#{test_time}", :metadata => {:my_key => 'my_value'}) + @image = service.images.get image_id + @image.wait_for(timeout = 1500) { ready? } + tests("#all").succeeds do + pending if Fog.mocking? && !mocks_implemented + @image.metadata.all + end + + tests("#get('my_key')").succeeds do + pending if Fog.mocking? && !mocks_implemented + @image.metadata.get('my_key') + end + end + + ensure + @image.destroy if @image + @server.destroy if @server + end + end +end \ No newline at end of file From 84ec8d580c8ecdc4efa5bafe22631834b3973aec Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Mon, 7 Jan 2013 11:25:49 -0600 Subject: [PATCH 5/9] changing variable names to make code clearer --- .../rackspace/requests/compute_v2/delete_metadata_item.rb | 8 ++++---- .../rackspace/requests/compute_v2/get_metadata_item.rb | 8 ++++---- lib/fog/rackspace/requests/compute_v2/list_metadata.rb | 8 ++++---- lib/fog/rackspace/requests/compute_v2/set_metadata.rb | 8 ++++---- .../rackspace/requests/compute_v2/set_metadata_item.rb | 8 ++++---- lib/fog/rackspace/requests/compute_v2/update_metadata.rb | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb index 6d8d41776..6ae393ccb 100644 --- a/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb @@ -2,18 +2,18 @@ module Fog module Compute class RackspaceV2 class Real - def delete_metadata_item(collection, server_id, key) + def delete_metadata_item(collection, obj_id, key) request( :expects => 204, :method => 'DELETE', - :path => "/#{collection}/#{server_id}/metadata/#{key}" + :path => "/#{collection}/#{obj_id}/metadata/#{key}" ) end end class Mock - def delete_metadata_item(collection, server_id, key) - raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + def delete_metadata_item(collection, obj_id, key) + raise Fog::Compute::RackspaceV2::NotFound if obj_id == 0 response = Excon::Response.new response.body = "" diff --git a/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb index cef3f0242..ef60369d6 100644 --- a/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb @@ -2,18 +2,18 @@ module Fog module Compute class RackspaceV2 class Real - def get_metadata_item(collection, server_id, key) + def get_metadata_item(collection, obj_id, key) request( :expects => 200, :method => 'GET', - :path => "/#{collection}/#{server_id}/metadata/#{key}" + :path => "/#{collection}/#{obj_id}/metadata/#{key}" ) end end class Mock - def get_metadata_item(collection, server_id, key) - raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + def get_metadata_item(collection, obj_id, key) + raise Fog::Compute::RackspaceV2::NotFound if obj_id == 0 response = Excon::Response.new response.status = 202 diff --git a/lib/fog/rackspace/requests/compute_v2/list_metadata.rb b/lib/fog/rackspace/requests/compute_v2/list_metadata.rb index 7623f1f95..4a1629157 100644 --- a/lib/fog/rackspace/requests/compute_v2/list_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/list_metadata.rb @@ -2,18 +2,18 @@ module Fog module Compute class RackspaceV2 class Real - def list_metadata(collection, server_id) + def list_metadata(collection, obj_id) request( :expects => [200, 203], :method => 'GET', - :path => "/#{collection}/#{server_id}/metadata" + :path => "/#{collection}/#{obj_id}/metadata" ) end end class Mock - def list_metadata(collection, server_id) - raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + def list_metadata(collection, obj_id) + raise Fog::Compute::RackspaceV2::NotFound if obj_id == 0 response = Excon::Response.new response.status = 202 diff --git a/lib/fog/rackspace/requests/compute_v2/set_metadata.rb b/lib/fog/rackspace/requests/compute_v2/set_metadata.rb index fa2eddfe2..3c94d3f60 100644 --- a/lib/fog/rackspace/requests/compute_v2/set_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/set_metadata.rb @@ -2,11 +2,11 @@ module Fog module Compute class RackspaceV2 class Real - def set_metadata(collection, server_id, metadata = {}) + def set_metadata(collection, obj_id, metadata = {}) request( :expects => [200, 203], :method => 'PUT', - :path => "/#{collection}/#{server_id}/metadata", + :path => "/#{collection}/#{obj_id}/metadata", :body => Fog::JSON.encode('metadata' => metadata) ) end @@ -14,8 +14,8 @@ module Fog class Mock - def set_metadata(collection, server_id, metadata = {}) - raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + def set_metadata(collection, obj_id, metadata = {}) + raise Fog::Compute::RackspaceV2::NotFound if obj_id == 0 response = Excon::Response.new response.status = 202 diff --git a/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb index 2c2d47d4f..2b3af5dd1 100644 --- a/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb @@ -2,19 +2,19 @@ module Fog module Compute class RackspaceV2 class Real - def set_metadata_item(collection, server_id, key, value) + def set_metadata_item(collection, obj_id, key, value) request( :expects => 200, :method => 'PUT', - :path => "/#{collection}/#{server_id}/metadata/#{key}", + :path => "/#{collection}/#{obj_id}/metadata/#{key}", :body => Fog::JSON.encode('meta' => { key => value }) ) end end class Mock - def set_metadata_item(collection, server_id, key, value) - raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + def set_metadata_item(collection, obj_id, key, value) + raise Fog::Compute::RackspaceV2::NotFound if obj_id == 0 response = Excon::Response.new response.status = 202 diff --git a/lib/fog/rackspace/requests/compute_v2/update_metadata.rb b/lib/fog/rackspace/requests/compute_v2/update_metadata.rb index 6ee360b08..c4d5a8d2d 100644 --- a/lib/fog/rackspace/requests/compute_v2/update_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/update_metadata.rb @@ -2,19 +2,19 @@ module Fog module Compute class RackspaceV2 class Real - def update_metadata(collection, server_id, metadata = {}) + def update_metadata(collection, obj_id, metadata = {}) request( :expects => [200, 203], :method => 'POST', - :path => "/#{collection}/#{server_id}/metadata", + :path => "/#{collection}/#{obj_id}/metadata", :body => Fog::JSON.encode('metadata' => metadata) ) end end class Mock - def update_metadata(collection, server_id, metadata = {}) - raise Fog::Compute::RackspaceV2::NotFound if server_id == 0 + def update_metadata(collection, obj_id, metadata = {}) + raise Fog::Compute::RackspaceV2::NotFound if obj_id == 0 response = Excon::Response.new response.status = 202 From d8b8bb41347fbb6cb5e77652230d4a7694c3a80d Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Mon, 7 Jan 2013 11:42:37 -0600 Subject: [PATCH 6/9] fixing broken tests --- lib/fog/rackspace/requests/compute_v2/list_metadata.rb | 2 +- lib/fog/rackspace/requests/compute_v2/update_metadata.rb | 2 +- tests/rackspace/requests/compute_v2/metadata_tests.rb | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/fog/rackspace/requests/compute_v2/list_metadata.rb b/lib/fog/rackspace/requests/compute_v2/list_metadata.rb index 4a1629157..04479f931 100644 --- a/lib/fog/rackspace/requests/compute_v2/list_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/list_metadata.rb @@ -17,7 +17,7 @@ module Fog response = Excon::Response.new response.status = 202 - response.body = { "metadata"=>{"Tag"=>"Database"} } + response.body = { "metadata"=>{"tag"=>"database"} } response end end diff --git a/lib/fog/rackspace/requests/compute_v2/update_metadata.rb b/lib/fog/rackspace/requests/compute_v2/update_metadata.rb index c4d5a8d2d..aab4a7fab 100644 --- a/lib/fog/rackspace/requests/compute_v2/update_metadata.rb +++ b/lib/fog/rackspace/requests/compute_v2/update_metadata.rb @@ -18,7 +18,7 @@ module Fog response = Excon::Response.new response.status = 202 - response.body = {"metadata" => {"environment" => "dev", "Tag" => "Database"}} + response.body = {"metadata" => {"environment" => "dev", "tag" => "database"}} response end end diff --git a/tests/rackspace/requests/compute_v2/metadata_tests.rb b/tests/rackspace/requests/compute_v2/metadata_tests.rb index 02800bdd8..cbe9b457d 100644 --- a/tests/rackspace/requests/compute_v2/metadata_tests.rb +++ b/tests/rackspace/requests/compute_v2/metadata_tests.rb @@ -45,7 +45,8 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do end tests("images") do - @image.wait_for(timeout = 1500) { ready? } + @image.wait_for(timeout = 1500) { ready? } unless Fog.mocking? + tests('list_metadata').returns(metadata) do h = @service.list_metadata("images", @image_id).body h["metadata"].reject {|k,v| k.downcase != "tag"} #only look at the metadata we created @@ -54,8 +55,8 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do h = @service.set_metadata("images", @image_id, {"environment" => "dev"}).body h["metadata"].reject {|k,v| k.downcase != "environment"} #only look at the metadata we created end - tests('update_metadata').returns({"environment" => "dev", "tag" => "Database"}) do - h = @service.update_metadata("images", @image_id, {"environment" => "dev", "tag" => "Database"}).body + tests('update_metadata').returns({"environment" => "dev", "tag" => "database"}) do + h = @service.update_metadata("images", @image_id, {"environment" => "dev", "tag" => "database"}).body h["metadata"].reject {|k,v| !['environment', 'tag'].include?(k.downcase)} #only look at the metadata we created end tests('get_metadata_item').returns("meta" => {"environment" => "dev"}) do From 49d1c385a631f17afa3d6aabb6d394be58cb9aed Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Mon, 7 Jan 2013 16:00:50 -0600 Subject: [PATCH 7/9] added better acceptance criteria to server/image metadata tests; added metadata to ignored_attributes to address bug --- lib/fog/core/attributes.rb | 2 +- lib/fog/rackspace/models/compute_v2/image.rb | 2 ++ lib/fog/rackspace/models/compute_v2/metadata.rb | 2 ++ lib/fog/rackspace/models/compute_v2/server.rb | 2 ++ tests/rackspace/models/compute_v2/metadata_tests.rb | 10 ++++++---- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/fog/core/attributes.rb b/lib/fog/core/attributes.rb index 3abd63232..dbebb9d8f 100644 --- a/lib/fog/core/attributes.rb +++ b/lib/fog/core/attributes.rb @@ -104,7 +104,7 @@ module Fog end def ignore_attributes(*args) - @ignored_attributes = args + @ignored_attributes = args.collect {|attr| attr.to_s } end def ignored_attributes diff --git a/lib/fog/rackspace/models/compute_v2/image.rb b/lib/fog/rackspace/models/compute_v2/image.rb index 34a82f5e0..b8b674b67 100644 --- a/lib/fog/rackspace/models/compute_v2/image.rb +++ b/lib/fog/rackspace/models/compute_v2/image.rb @@ -23,6 +23,8 @@ module Fog attribute :minRam attribute :disk_config, :aliases => 'OS-DCF:diskConfig' attribute :links + + ignore_attributes :metadata def initialize(attributes={}) @connection = attributes[:connection] diff --git a/lib/fog/rackspace/models/compute_v2/metadata.rb b/lib/fog/rackspace/models/compute_v2/metadata.rb index 3994efd37..731bdd254 100644 --- a/lib/fog/rackspace/models/compute_v2/metadata.rb +++ b/lib/fog/rackspace/models/compute_v2/metadata.rb @@ -30,12 +30,14 @@ module Fog end def [](key) + return super(key) if key.is_a?(Integer) return nil unless key datum = self.find {|datum| datum.key == key || datum.key == key.to_sym } datum ? datum.value : nil end def []=(key, value) + return super(key,value) if key.is_a?(Integer) return nil unless key datum = self.find {|datum| datum.key == key || datum.key == key.to_sym } if datum diff --git a/lib/fog/rackspace/models/compute_v2/server.rb b/lib/fog/rackspace/models/compute_v2/server.rb index 8999fe984..6a6db2643 100644 --- a/lib/fog/rackspace/models/compute_v2/server.rb +++ b/lib/fog/rackspace/models/compute_v2/server.rb @@ -42,6 +42,8 @@ module Fog attribute :flavor_id, :aliases => 'flavor', :squash => 'id' attribute :image_id, :aliases => 'image', :squash => 'id' + ignore_attributes :metadata + attr_reader :password def initialize(attributes={}) @connection = attributes[:connection] diff --git a/tests/rackspace/models/compute_v2/metadata_tests.rb b/tests/rackspace/models/compute_v2/metadata_tests.rb index 821854a83..9b6c4c1de 100644 --- a/tests/rackspace/models/compute_v2/metadata_tests.rb +++ b/tests/rackspace/models/compute_v2/metadata_tests.rb @@ -9,7 +9,6 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata', ['rackspace']) do begin @server = service.servers.create(:name => "fog_server_#{test_time}", :flavor_id => 2, :image_id => "3afe97b2-26dc-49c5-a2cc-a2fc8d80c001") @server.wait_for(timeout=1500) { ready? } - @server = service.servers.get "2ee0e1b5-3350-40ae-873a-fff4941cc400" tests('server') do collection_tests(@server.metadata, {:key => 'my_key', :value => 'my_value'}) do @@ -23,12 +22,15 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata', ['rackspace']) do @image.wait_for(timeout = 1500) { ready? } tests("#all").succeeds do pending if Fog.mocking? && !mocks_implemented - @image.metadata.all + metadata = @image.metadata.all + my_metadata = metadata.select {|datum| datum.key == 'my_key'} + returns(1) { my_metadata.size } + returns('my_value') {my_metadata[0].value } end - tests("#get('my_key')").succeeds do + tests("#get('my_key')").returns('my_value') do pending if Fog.mocking? && !mocks_implemented - @image.metadata.get('my_key') + @image.metadata.get('my_key').value end end From f83f744470deb50bf66a7bc27ee14cfd528b0ef1 Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Tue, 8 Jan 2013 09:57:45 -0600 Subject: [PATCH 8/9] fixing typo --- lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb index 2b3af5dd1..e47a98e89 100644 --- a/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb @@ -18,7 +18,7 @@ module Fog response = Excon::Response.new response.status = 202 - response.body = {"meta" => {"environment", "test"}} + response.body = {"meta" => {"environment" => "test"}} response end end From 9d72ff3f35c22be292a0e5a3217b3d311547c115 Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Tue, 8 Jan 2013 10:32:24 -0600 Subject: [PATCH 9/9] fixing broken tests --- lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb | 2 +- tests/rackspace/requests/compute_v2/metadata_tests.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb index e47a98e89..76e2ee01a 100644 --- a/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb +++ b/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb @@ -18,7 +18,7 @@ module Fog response = Excon::Response.new response.status = 202 - response.body = {"meta" => {"environment" => "test"}} + response.body = {"meta" => {key => value}} response end end diff --git a/tests/rackspace/requests/compute_v2/metadata_tests.rb b/tests/rackspace/requests/compute_v2/metadata_tests.rb index cbe9b457d..615212ba4 100644 --- a/tests/rackspace/requests/compute_v2/metadata_tests.rb +++ b/tests/rackspace/requests/compute_v2/metadata_tests.rb @@ -36,7 +36,7 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do tests('get_metadata_item').returns("meta" => {"environment" => "dev"}) do @service.get_metadata_item("servers", @server_id, "environment").body end - tests('set_metadata_item').returns("meta" => {"environment", "test"}) do + tests('set_metadata_item').returns("meta" => {"environment" => "test"}) do @service.set_metadata_item("servers", @server_id, "environment", "test").body end tests('delete_metadata_item').succeeds do @@ -62,7 +62,7 @@ Shindo.tests('Fog::Compute::RackspaceV2 | metadata_tests', ['rackspace']) do tests('get_metadata_item').returns("meta" => {"environment" => "dev"}) do @service.get_metadata_item("images", @image_id, "environment").body end - tests('set_metadata_item').returns("meta" => {"environment", "test"}) do + tests('set_metadata_item').returns("meta" => {"environment" => "test"}) do @service.set_metadata_item("images", @image_id, "environment", "test").body end tests('delete_metadata_item').succeeds do