cloudlb 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/cloudlb.gemspec +5 -5
- data/lib/cloudlb.rb +1 -1
- data/lib/cloudlb/authentication.rb +5 -12
- data/lib/cloudlb/balancer.rb +13 -4
- data/lib/cloudlb/connection.rb +5 -5
- data/lib/cloudlb/exception.rb +10 -0
- data/lib/cloudlb/version.rb +3 -0
- metadata +6 -6
- data/VERSION +0 -1
data/.gitignore
CHANGED
data/cloudlb.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
lib = File.expand_path('../lib/', __FILE__)
|
3
3
|
$:.unshift lib unless $:.include?(lib)
|
4
|
-
|
5
|
-
require 'cloudlb'
|
4
|
+
|
5
|
+
require File.expand_path('../lib/cloudlb/version', __FILE__)
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "cloudlb"
|
@@ -20,7 +20,6 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_runtime_dependency "json"
|
21
21
|
|
22
22
|
s.files = [
|
23
|
-
"VERSION",
|
24
23
|
"COPYING",
|
25
24
|
".gitignore",
|
26
25
|
"README.rdoc",
|
@@ -32,7 +31,8 @@ Gem::Specification.new do |s|
|
|
32
31
|
"lib/cloudlb/exception.rb",
|
33
32
|
"lib/cloudlb/node.rb",
|
34
33
|
"lib/cloudlb/health_monitor.rb",
|
35
|
-
"lib/cloudlb/connection_throttle.rb"
|
34
|
+
"lib/cloudlb/connection_throttle.rb",
|
35
|
+
"lib/cloudlb/version.rb"
|
36
36
|
]
|
37
37
|
s.require_path = 'lib'
|
38
|
-
end
|
38
|
+
end
|
data/lib/cloudlb.rb
CHANGED
@@ -20,7 +20,6 @@ module CloudLB
|
|
20
20
|
AUTH_USA = "https://auth.api.rackspacecloud.com/v1.0"
|
21
21
|
AUTH_UK = "https://lon.auth.api.rackspacecloud.com/v1.0"
|
22
22
|
|
23
|
-
VERSION = IO.read(File.dirname(__FILE__) + '/../VERSION').chomp
|
24
23
|
require 'uri'
|
25
24
|
require 'rubygems'
|
26
25
|
require 'json'
|
@@ -33,6 +32,7 @@ module CloudLB
|
|
33
32
|
end
|
34
33
|
|
35
34
|
$:.unshift(File.dirname(__FILE__))
|
35
|
+
require 'cloudlb/version'
|
36
36
|
require 'cloudlb/exception'
|
37
37
|
require 'cloudlb/authentication'
|
38
38
|
require 'cloudlb/connection'
|
@@ -9,10 +9,10 @@ module CloudLB
|
|
9
9
|
# Should probably never be called directly.
|
10
10
|
def initialize(connection)
|
11
11
|
request = Typhoeus::Request.new(connection.auth_url,
|
12
|
-
:method
|
13
|
-
:headers
|
14
|
-
:
|
15
|
-
:verbose
|
12
|
+
:method => :get,
|
13
|
+
:headers => { "X-Auth-User" => connection.authuser, "X-Auth-Key" => connection.authkey },
|
14
|
+
:user_agent => "Cloud Load Balancers Ruby API #{VERSION}",
|
15
|
+
:verbose => ENV['LOADBALANCERS_VERBOSE'] ? true : false)
|
16
16
|
CloudLB.hydra.queue(request)
|
17
17
|
CloudLB.hydra.run
|
18
18
|
response = request.response
|
@@ -20,14 +20,7 @@ module CloudLB
|
|
20
20
|
if (response.code.to_s == "204")
|
21
21
|
connection.authtoken = headers["x-auth-token"]
|
22
22
|
user_id = headers["x-server-management-url"].match(/.*\/(\d+)$/)[1]
|
23
|
-
headers["x-server-management-url"] =
|
24
|
-
when :ord
|
25
|
-
"https://ord.loadbalancers.api.rackspacecloud.com/v1.0/#{user_id}"
|
26
|
-
when :dfw
|
27
|
-
"https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/#{user_id}"
|
28
|
-
else
|
29
|
-
raise
|
30
|
-
end
|
23
|
+
headers["x-server-management-url"] = "https://#{connection.region}.loadbalancers.api.rackspacecloud.com/v1.0/#{user_id}"
|
31
24
|
connection.lbmgmthost = URI.parse(headers["x-server-management-url"]).host
|
32
25
|
connection.lbmgmtpath = URI.parse(headers["x-server-management-url"]).path.chomp
|
33
26
|
# Force the path into the v1.0 URL space
|
data/lib/cloudlb/balancer.rb
CHANGED
@@ -32,7 +32,7 @@ module CloudLB
|
|
32
32
|
@protocol = data["protocol"]
|
33
33
|
@port = data["port"]
|
34
34
|
@algorithm = data["algorithm"]
|
35
|
-
@connection_logging = data["connectionLogging"]
|
35
|
+
@connection_logging = data["connectionLogging"]["enabled"]
|
36
36
|
@status = data["status"]
|
37
37
|
true
|
38
38
|
end
|
@@ -182,10 +182,16 @@ module CloudLB
|
|
182
182
|
end
|
183
183
|
alias :access_list :list_access_list
|
184
184
|
|
185
|
-
#
|
185
|
+
# Adds an entry to your access list. You must supply the :address (an IP address) and :type (either ALLOW or DENY).
|
186
|
+
# Items that are configured with the ALLOW type will always take precedence over items with the DENY type.
|
187
|
+
#
|
188
|
+
# >> balancer.add_to_access_list(:address => '192.168.5.99', :type => 'DENY')
|
189
|
+
# => true
|
190
|
+
# >> b.list_access_list
|
191
|
+
# => [{"address"=>"192.168.5.99", "id"=>96, "type"=>"DENY"}]
|
186
192
|
def add_to_access_list(options={})
|
187
193
|
(raise CloudLB::Exception::MissingArgument, "Must supply address and type") unless (options[:address] && options[:type])
|
188
|
-
body = {'
|
194
|
+
body = {'accessList' => [ { :address => options[:address], :type => options[:type].upcase}]}.to_json
|
189
195
|
response = @connection.lbreq("POST",@lbmgmthost,"#{@lbmgmtpath}/loadbalancers/#{CloudLB.escape(@id.to_s)}/accesslist",@lbmgmtport,@lbmgmtscheme,{},body)
|
190
196
|
CloudLB::Exception.raise_exception(response) unless response.code.to_s.match(/^20.$/)
|
191
197
|
true
|
@@ -202,7 +208,10 @@ module CloudLB
|
|
202
208
|
true
|
203
209
|
end
|
204
210
|
|
205
|
-
#
|
211
|
+
# Deletes one member of the access list by id.
|
212
|
+
#
|
213
|
+
# >> balancer.delete_access_list_member(95)
|
214
|
+
# => true
|
206
215
|
def delete_access_list_member(id)
|
207
216
|
response = @connection.lbreq("DELETE",@lbmgmthost,"#{@lbmgmtpath}/loadbalancers/#{CloudLB.escape(@id.to_s)}/accesslist/#{CloudLB.escape(id.to_s)}",@lbmgmtport,@lbmgmtscheme,{})
|
208
217
|
CloudLB::Exception.raise_exception(response) unless response.code.to_s.match(/^20.$/)
|
data/lib/cloudlb/connection.rb
CHANGED
@@ -80,7 +80,7 @@ module CloudLB
|
|
80
80
|
|
81
81
|
# Creates a brand new load balancer under your account.
|
82
82
|
#
|
83
|
-
# A minimal request must pass in :name, :protocol, :nodes, and either :virtual_ip_ids or :virtual_ip_types.
|
83
|
+
# A minimal request must pass in :name, :protocol, :port, :nodes, and either :virtual_ip_ids or :virtual_ip_types.
|
84
84
|
#
|
85
85
|
# Options:
|
86
86
|
# :name - the name of the load balancer. Limted to 128 characters or less.
|
@@ -90,7 +90,7 @@ module CloudLB
|
|
90
90
|
# the port on the target server, and the condition ("ENABLED", "DISABLED", "DRAINING"). Optionally supply a :weight for use
|
91
91
|
# in the WEIGHTED_ algorithms.
|
92
92
|
# {:address => "1.2.3.4", :port => "80", :condition => "ENABLED", :weight => 1}
|
93
|
-
# :port - the port that the load balancer listens on.
|
93
|
+
# :port - the port that the load balancer listens on. *required*
|
94
94
|
# :algorithm - A valid balancing algorithm. Use the algorithms method to get the list. Valid in the current documentation
|
95
95
|
# are RANDOM (default), LEAST_CONNECTIONS, ROUND_ROBIN, WEIGHTED_LEAST_CONNECTIONS, WEIGHTED_ROUND_ROBIN
|
96
96
|
# :virtual_ip_id - If you have existing virtual IPs and would like to reuse them in a different balancer (for example, to
|
@@ -104,10 +104,10 @@ module CloudLB
|
|
104
104
|
(raise CloudLB::Exception::Syntax, "Load balancer name must be 128 characters or less") if options[:name].size > 128
|
105
105
|
(raise CloudLB::Exception::Syntax, "Must provide at least one node in the :nodes array") if (!options[:nodes].is_a?(Array) || options[:nodes].size < 1)
|
106
106
|
body[:protocol] = options[:protocol] or raise CloudLB::Exception::MissingArgument, "Must provide a protocol to create a load balancer"
|
107
|
+
body[:protocol].upcase! if body[:protocol]
|
107
108
|
body[:port] = options[:port] if options[:port]
|
108
109
|
body[:nodes] = options[:nodes]
|
109
|
-
body[:
|
110
|
-
body[:algorithm].upcase! if body[:algorithm]
|
110
|
+
body[:algorithm] = options[:algorithm].upcase if options[:algorithm]
|
111
111
|
if options[:virtual_ip_id]
|
112
112
|
body['virtualIps'] = [{:id => options[:virtual_ip_id]}]
|
113
113
|
elsif options[:virtual_ip_type]
|
@@ -159,7 +159,7 @@ module CloudLB
|
|
159
159
|
:body => data,
|
160
160
|
:method => method.downcase.to_sym,
|
161
161
|
:headers => hdrhash,
|
162
|
-
|
162
|
+
:user_agent => "Cloud Load Balancers Ruby API #{VERSION}",
|
163
163
|
:verbose => ENV['LOADBALANCERS_VERBOSE'] ? true : false)
|
164
164
|
CloudLB.hydra.queue(request)
|
165
165
|
CloudLB.hydra.run
|
data/lib/cloudlb/exception.rb
CHANGED
@@ -14,6 +14,8 @@ module CloudLB
|
|
14
14
|
|
15
15
|
end
|
16
16
|
|
17
|
+
class ServiceFault < CloudLBError # :nodoc:
|
18
|
+
end
|
17
19
|
class LoadBalancerFault < CloudLBError # :nodoc:
|
18
20
|
end
|
19
21
|
class ServiceUnavailable < CloudLBError # :nodoc:
|
@@ -22,8 +24,16 @@ module CloudLB
|
|
22
24
|
end
|
23
25
|
class BadRequest < CloudLBError # :nodoc:
|
24
26
|
end
|
27
|
+
class ItemNotFound < CloudLBError # :nodoc:
|
28
|
+
end
|
25
29
|
class OverLimit < CloudLBError # :nodoc:
|
26
30
|
end
|
31
|
+
class OutOfVirtualIps < CloudLBError # :nodoc:
|
32
|
+
end
|
33
|
+
class ImmutableEntity < CloudLBError # :nodoc:
|
34
|
+
end
|
35
|
+
class UnprocessableEntity < CloudLBError # :nodoc:
|
36
|
+
end
|
27
37
|
class Other < CloudLBError # :nodoc:
|
28
38
|
end
|
29
39
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudlb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- H. Wade Minter
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-11-05 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -56,7 +56,6 @@ extensions: []
|
|
56
56
|
extra_rdoc_files: []
|
57
57
|
|
58
58
|
files:
|
59
|
-
- VERSION
|
60
59
|
- COPYING
|
61
60
|
- .gitignore
|
62
61
|
- README.rdoc
|
@@ -69,6 +68,7 @@ files:
|
|
69
68
|
- lib/cloudlb/node.rb
|
70
69
|
- lib/cloudlb/health_monitor.rb
|
71
70
|
- lib/cloudlb/connection_throttle.rb
|
71
|
+
- lib/cloudlb/version.rb
|
72
72
|
has_rdoc: true
|
73
73
|
homepage: http://github.com/rackspace/ruby-cloudlb
|
74
74
|
licenses: []
|
@@ -101,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
101
|
requirements: []
|
102
102
|
|
103
103
|
rubyforge_project:
|
104
|
-
rubygems_version: 1.
|
104
|
+
rubygems_version: 1.6.0
|
105
105
|
signing_key:
|
106
106
|
specification_version: 3
|
107
107
|
summary: Ruby API into the Rackspace Cloud Load Balancers product
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.0.1
|