Add support for the Linode avail.nodebalancers API call.

- Add avail_nodebalancers implementation and mock.
- Add NodeBalancerFlavor model.
- Add NodeBalancerFlavors collection.
This commit is contained in:
Phil Ross 2015-10-24 23:33:31 +01:00
parent ddf26cc438
commit 2d71a749fd
5 changed files with 105 additions and 0 deletions

View File

@ -23,12 +23,15 @@ module Fog
collection :ips
model :disk
collection :disks
model :node_balancer_flavor
collection :node_balancer_flavors
request_path 'fog/linode/requests/compute'
request :avail_datacenters
request :avail_distributions
request :avail_kernels
request :avail_linodeplans
request :avail_nodebalancers
request :avail_stackscripts
request :linode_disk_create
request :linode_disk_list

View File

@ -0,0 +1,13 @@
require 'fog/core/model'
module Fog
module Compute
class Linode
class NodeBalancerFlavor < Fog::Model
attribute :price_monthly
attribute :price_hourly
attribute :connections
end
end
end
end

View File

@ -0,0 +1,27 @@
require 'fog/core/collection'
require 'fog/linode/models/compute/node_balancer_flavor'
module Fog
module Compute
class Linode
class NodeBalancerFlavors < Fog::Collection
model Fog::Compute::Linode::NodeBalancerFlavor
def all
load node_balancer_flavors
end
private
def node_balancer_flavors
service.avail_nodebalancers.body['DATA'].map { |node_balancer_flavor| map_node_balancer_flavor node_balancer_flavor }
end
def map_node_balancer_flavor(node_balancer_flavor)
node_balancer_flavor = node_balancer_flavor.each_with_object({}) { |(k, v), h| h[k.downcase.to_sym] = v }
node_balancer_flavor.merge! :price_monthly => node_balancer_flavor[:monthly],
:price_hourly => node_balancer_flavor[:hourly]
end
end
end
end
end

View File

@ -0,0 +1,42 @@
module Fog
module Compute
class Linode
class Real
# Get NodeBalancer pricing information.
#
# ==== Parameters
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Array>:
# * 'MONTHLY'<~Float> - Monthly price
# * 'HOURLY'<~Float>: - Hourly price
# * 'CONNECTIONS'<~Integer>: - Maximum concurrent connections
def avail_nodebalancers
request(
:expects => 200,
:method => 'GET',
:query => { :api_action => 'avail.nodebalancers' }
)
end
end
class Mock
def avail_nodebalancers
response = Excon::Response.new
response.status = 200
response.body = {
"ERRORARRAY" => [],
"ACTION" => "avail.nodebalancers",
"DATA" => [{
"MONTHLY" => 20.0,
"HOURLY" => 0.03,
"CONNECTIONS" => 10000
}]
}
response
end
end
end
end
end

View File

@ -0,0 +1,20 @@
Shindo.tests('Fog::Compute[:linode] | linodenodebalancers requests', ['linode']) do
@linodenodebalancers_format = Linode::Compute::Formats::BASIC.merge({
'DATA' => [{
'MONTHLY' => Float,
'HOURLY' => Float,
'CONNECTIONS' => Integer
}]
})
tests('success') do
tests('#avail_nodebalancers').formats(@linodenodebalancers_format) do
pending if Fog.mocking?
Fog::Compute[:linode].avail_nodebalancers.body
end
end
end