From 68254a3f1d46aec415f9b1404d64c14a728ed9e9 Mon Sep 17 00:00:00 2001 From: Kyle Rames Date: Wed, 2 Jan 2013 08:34:32 -0600 Subject: [PATCH] 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 + +