From 5fc41c8dc202c3c140391eee5d5b496fc28f7f61 Mon Sep 17 00:00:00 2001 From: Blake Irvin and Eric Saxby Date: Fri, 31 May 2013 18:01:42 -0700 Subject: [PATCH] Add joyent API version and network support GH-1853 Adding support for listing networks in the Joyent Cloud. :joyent_version was defined in a way that it would always fall back to the default '~6.5'. Creating servers with a particular network requires setting :joyent_version to '~7.0' or greater. --- lib/fog/joyent/compute.rb | 8 +++- lib/fog/joyent/models/compute/network.rb | 12 ++++++ lib/fog/joyent/models/compute/networks.rb | 15 +++++++ .../joyent/requests/compute/list_networks.rb | 26 +++++++++++++ .../joyent/requests/compute/networks_tests.rb | 39 +++++++++++++++++++ 5 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 lib/fog/joyent/models/compute/network.rb create mode 100644 lib/fog/joyent/models/compute/networks.rb create mode 100644 lib/fog/joyent/requests/compute/list_networks.rb create mode 100644 tests/joyent/requests/compute/networks_tests.rb diff --git a/lib/fog/joyent/compute.rb b/lib/fog/joyent/compute.rb index 5ac8cfcf0..9bf515886 100644 --- a/lib/fog/joyent/compute.rb +++ b/lib/fog/joyent/compute.rb @@ -11,6 +11,7 @@ module Fog recognizes :joyent_url recognizes :joyent_keyname recognizes :joyent_keyfile + recognizes :joyent_version model_path 'fog/joyent/models/compute' request_path 'fog/joyent/requests/compute' @@ -71,7 +72,10 @@ module Fog request :delete_machine_tag request :delete_all_machine_tags - + # Networks + collection :networks + model :network + request :list_networks class Mock def self.data @@ -163,7 +167,7 @@ module Fog response rescue Excon::Errors::Error => e - raise_if_error(e.request, e.response) + raise_if_error!(e.request, e.response) end private diff --git a/lib/fog/joyent/models/compute/network.rb b/lib/fog/joyent/models/compute/network.rb new file mode 100644 index 000000000..5647a97fc --- /dev/null +++ b/lib/fog/joyent/models/compute/network.rb @@ -0,0 +1,12 @@ +module Fog + module Compute + class Joyent + class Network < Fog::Model + identity :id + + attribute :name + + end + end + end +end diff --git a/lib/fog/joyent/models/compute/networks.rb b/lib/fog/joyent/models/compute/networks.rb new file mode 100644 index 000000000..521bcc386 --- /dev/null +++ b/lib/fog/joyent/models/compute/networks.rb @@ -0,0 +1,15 @@ +require 'fog/joyent/models/compute/network' +module Fog + module Compute + class Joyent + class Networks < Fog::Collection + + model Fog::Compute::Joyent::Network + + def all + load(service.list_networks.body) + end + end + end + end +end diff --git a/lib/fog/joyent/requests/compute/list_networks.rb b/lib/fog/joyent/requests/compute/list_networks.rb new file mode 100644 index 000000000..97cd22681 --- /dev/null +++ b/lib/fog/joyent/requests/compute/list_networks.rb @@ -0,0 +1,26 @@ +module Fog + module Compute + class Joyent + + class Mock + def list_networks(options={}) + res = Excon::Response.new + res.status = 200 + res.body = self.data[:networks].values + res + end + end + + class Real + def list_networks(options={}) + request( + :path => "/my/networks", + :method => "GET", + :query => options, + :expects => 200 + ) + end + end + end + end +end diff --git a/tests/joyent/requests/compute/networks_tests.rb b/tests/joyent/requests/compute/networks_tests.rb new file mode 100644 index 000000000..6d47932a8 --- /dev/null +++ b/tests/joyent/requests/compute/networks_tests.rb @@ -0,0 +1,39 @@ +Shindo.tests("Fog::Compute[:joyent] | network requests", ["joyent"]) do + @provider = Fog::Compute[:joyent] + @network_format = { + "id" => String, + "name" => String, + "public" => Fog::Boolean + } + + if Fog.mock? + @networks = Fog::Compute[:joyent].data[:networks] = { + "193d6804-256c-4e89-a4cd-46f045959993" => { + "id" => "193d6804-256c-4e89-a4cd-46f045959993", + "name" => "Joyent-SDC-Private", + "public" => false + }, + "1e7bb0e1-25a9-43b6-bb19-f79ae9540b39" => { + "id" => "1e7bb0e1-25a9-43b6-bb19-f79ae9540b39", + "name" => "Joyent-SDC-Public", + "public" => true + } + } + end + + tests("#list_networks") do + if Fog.mock? + returns(@networks.length, "correct number of networks") do + @provider.list_networks.body.length + end + end + + returns(Array, "returns an Array of networks") do + @provider.list_networks.body.class + end + + formats([@network_format]) do + @provider.list_networks.body + end + end +end