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:
parent
ddf26cc438
commit
2d71a749fd
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue