From ebcc5beeb4098c4f337ab70612c02ceb27e7282f Mon Sep 17 00:00:00 2001 From: Tzu-Mainn Chen Date: Tue, 12 May 2015 10:20:48 -0400 Subject: [PATCH 1/2] [openstack|compute] added support for flavor extra_specs --- lib/fog/openstack/compute.rb | 4 ++ lib/fog/openstack/models/compute/flavor.rb | 13 +++++++ .../compute/create_flavor_extra_specs.rb | 38 +++++++++++++++++++ .../compute/get_flavor_extra_specs.rb | 27 +++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb create mode 100644 lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb diff --git a/lib/fog/openstack/compute.rb b/lib/fog/openstack/compute.rb index 54750cf25..8ccc2971a 100644 --- a/lib/fog/openstack/compute.rb +++ b/lib/fog/openstack/compute.rb @@ -98,6 +98,10 @@ module Fog request :create_flavor request :delete_flavor + # Flavor Actions + request :get_flavor_extra_specs + request :create_flavor_extra_specs + # Flavor Access request :add_flavor_access request :remove_flavor_access diff --git a/lib/fog/openstack/models/compute/flavor.rb b/lib/fog/openstack/models/compute/flavor.rb index d97c006ad..1c33de7ff 100644 --- a/lib/fog/openstack/models/compute/flavor.rb +++ b/lib/fog/openstack/models/compute/flavor.rb @@ -13,6 +13,7 @@ module Fog attribute :links attribute :swap attribute :rxtx_factor + attribute :extra_specs attribute :ephemeral, :aliases => 'OS-FLV-EXT-DATA:ephemeral' attribute :is_public, :aliases => 'os-flavor-access:is_public' attribute :disabled, :aliases => 'OS-FLV-DISABLED:disabled' @@ -39,6 +40,18 @@ module Fog service.delete_flavor(self.id) true end + + def extra_specs + service.get_flavor_extra_specs(self.id).body['extra_specs'] + rescue Fog::Compute::OpenStack::NotFound + nil + end + + def create_extra_specs(extra_specs) + service.create_flavor_extra_specs(self.id, extra_specs) + rescue Fog::Compute::OpenStack::NotFound + nil + end end end end diff --git a/lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb b/lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb new file mode 100644 index 000000000..2ee26f0be --- /dev/null +++ b/lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb @@ -0,0 +1,38 @@ +module Fog + module Compute + class OpenStack + class Real + def create_flavor_extra_specs(flavor_ref, extra_specs) + data = { + 'extra_specs' => extra_specs + } + + request( + :body => Fog::JSON.encode(data), + :expects => 200, + :method => 'POST', + :path => "flavors/#{flavor_ref}/os-extra_specs" + ) + end + end + + class Mock + def create_flavor_extra_specs(attributes) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new + } + response.body = { "extra_specs" => { + "cpu_arch" => "x86_64" + } + } + response + end + end # mock + end # openstack + end # compute +end # fog diff --git a/lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb b/lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb new file mode 100644 index 000000000..d30aa2053 --- /dev/null +++ b/lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb @@ -0,0 +1,27 @@ +module Fog + module Compute + class OpenStack + class Real + def get_flavor_extra_specs(flavor_ref) + request( + :expects => [200, 203], + :method => 'GET', + :path => "flavors/#{flavor_ref}/os-extra_specs" + ) + end + end + + class Mock + def get_flavor_extra_specs(host) + response = Excon::Response.new + response.status = 200 + response.body = { "extra_specs" => { + "cpu_arch" => "x86_64" + } + } + response + end + end # mock + end # openstack + end # compute +end # fog From b16b5222e6dea4276c25f2f914a15927a4dbaf03 Mon Sep 17 00:00:00 2001 From: Tzu-Mainn Chen Date: Tue, 12 May 2015 14:03:18 -0400 Subject: [PATCH 2/2] added tests for flavor extra_specs --- .../compute/create_flavor_extra_specs.rb | 2 +- .../requests/compute/get_flavor_extra_specs.rb | 2 +- .../openstack/requests/compute/flavor_tests.rb | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb b/lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb index 2ee26f0be..9aa644766 100644 --- a/lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb +++ b/lib/fog/openstack/requests/compute/create_flavor_extra_specs.rb @@ -17,7 +17,7 @@ module Fog end class Mock - def create_flavor_extra_specs(attributes) + def create_flavor_extra_specs(flavor_ref, extra_specs) response = Excon::Response.new response.status = 200 response.headers = { diff --git a/lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb b/lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb index d30aa2053..15ea7b667 100644 --- a/lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb +++ b/lib/fog/openstack/requests/compute/get_flavor_extra_specs.rb @@ -12,7 +12,7 @@ module Fog end class Mock - def get_flavor_extra_specs(host) + def get_flavor_extra_specs(flavor_ref) response = Excon::Response.new response.status = 200 response.body = { "extra_specs" => { diff --git a/tests/openstack/requests/compute/flavor_tests.rb b/tests/openstack/requests/compute/flavor_tests.rb index 48ab91da7..f5e82ce4c 100644 --- a/tests/openstack/requests/compute/flavor_tests.rb +++ b/tests/openstack/requests/compute/flavor_tests.rb @@ -49,6 +49,14 @@ Shindo.tests('Fog::Compute[:openstack] | flavor requests', ['openstack']) do Fog::Compute[:openstack].delete_flavor('100') end + tests('#get_flavor_extra_specs(flavor_ref)').data_matches_schema('extra_specs' => {'cpu_arch' => String}) do + Fog::Compute[:openstack].get_flavor_extra_specs("1").body + end + + tests('#create_flavor_extra_specs(flavor_ref, extra_specs)').data_matches_schema('extra_specs' => {'cpu_arch' => String}) do + extra_specs = {:cpu_arch => 'x86_64'} + Fog::Compute[:openstack].create_flavor_extra_specs("1", extra_specs).body + end end tests('failure') do @@ -72,6 +80,16 @@ Shindo.tests('Fog::Compute[:openstack] | flavor requests', ['openstack']) do Fog::Compute[:openstack].list_tenants_with_flavor_access(1234) end + tests('get_flavor_extra_specs(flavor_ref)').raises(Fog::Compute::OpenStack::NotFound) do + pending if Fog.mocking? + Fog::Compute[:openstack].get_flavor_extra_specs("1234").body + end + + tests('create_flavor_extra_specs(flavor_ref)').raises(Fog::Compute::OpenStack::NotFound) do + pending if Fog.mocking? + extra_specs = {:cpu_arch => 'x86_64'} + Fog::Compute[:openstack].create_flavor_extra_specs("1234", extra_specs).body + end end end