cloudservers 0.3.0 → 0.4.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/README.rdoc +6 -3
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/cloudservers.gemspec +28 -30
- data/lib/cloudservers/authentication.rb +6 -4
- data/lib/cloudservers/connection.rb +17 -0
- data/lib/cloudservers/exception.rb +5 -3
- data/lib/cloudservers.rb +5 -2
- data/test/cloudservers_authentication_test.rb +5 -4
- data/test/cloudservers_connection_test.rb +23 -1
- data/test/cloudservers_exception_test.rb +2 -1
- data/test/cloudservers_servers_test.rb +11 -10
- metadata +6 -7
- data/.gitignore +0 -2
data/README.rdoc
CHANGED
@@ -26,8 +26,11 @@ See the class definitions for documentation on specific methods and operations.
|
|
26
26
|
require 'rubygems'
|
27
27
|
require 'cloudservers'
|
28
28
|
|
29
|
-
# Log into the Cloud Servers
|
30
|
-
cs = CloudServers::Connection.new(:username => USERNAME, :api_key => API_KEY)
|
29
|
+
# Log into the Cloud Servers
|
30
|
+
cs = CloudServers::Connection.new(:username => USERNAME, :api_key => API_KEY)
|
31
|
+
|
32
|
+
# Log into the Cloud Servers UK
|
33
|
+
cs = CloudServers::Connection.new(:username => USERNAME, :api_key => API_KEY, :auth_url => CloudServers::AUTH_UK)
|
31
34
|
|
32
35
|
# Get a listing of all current servers
|
33
36
|
>> cs.servers
|
@@ -80,7 +83,7 @@ See the class definitions for documentation on specific methods and operations.
|
|
80
83
|
|
81
84
|
== Authors
|
82
85
|
|
83
|
-
By H. Wade Minter <
|
86
|
+
By H. Wade Minter <minter@lunenburg.org>, Mike Mayo <mike.mayo@rackspace.com>, and Dan Prince <dan.prince@rackspace.com>
|
84
87
|
|
85
88
|
== License
|
86
89
|
|
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ begin
|
|
10
10
|
gemspec.description = "A Ruby API to version 1.0 of the Rackspace Cloud Servers product."
|
11
11
|
gemspec.email = "minter@lunenburg.org"
|
12
12
|
gemspec.homepage = "http://github.com/rackspace/cloudservers"
|
13
|
-
gemspec.authors = ["H. Wade Minter","Mike Mayo","Dan Prince"]
|
13
|
+
gemspec.authors = ["H. Wade Minter","Mike Mayo", "Dan Prince"]
|
14
14
|
gemspec.add_dependency 'json'
|
15
15
|
end
|
16
16
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/cloudservers.gemspec
CHANGED
@@ -1,55 +1,53 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cloudservers}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["H. Wade Minter", "Mike Mayo", "Dan Prince"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-01-05}
|
13
13
|
s.description = %q{A Ruby API to version 1.0 of the Rackspace Cloud Servers product.}
|
14
14
|
s.email = %q{minter@lunenburg.org}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.rdoc",
|
17
|
-
|
17
|
+
"TODO"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
|
-
"
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
"test/test_helper.rb"
|
20
|
+
"COPYING",
|
21
|
+
"README.rdoc",
|
22
|
+
"Rakefile",
|
23
|
+
"TODO",
|
24
|
+
"VERSION",
|
25
|
+
"cloudservers.gemspec",
|
26
|
+
"lib/cloudservers.rb",
|
27
|
+
"lib/cloudservers/authentication.rb",
|
28
|
+
"lib/cloudservers/connection.rb",
|
29
|
+
"lib/cloudservers/entity_manager.rb",
|
30
|
+
"lib/cloudservers/exception.rb",
|
31
|
+
"lib/cloudservers/flavor.rb",
|
32
|
+
"lib/cloudservers/image.rb",
|
33
|
+
"lib/cloudservers/server.rb",
|
34
|
+
"lib/cloudservers/shared_ip_group.rb",
|
35
|
+
"test/cloudservers_authentication_test.rb",
|
36
|
+
"test/cloudservers_connection_test.rb",
|
37
|
+
"test/cloudservers_exception_test.rb",
|
38
|
+
"test/cloudservers_servers_test.rb",
|
39
|
+
"test/test_helper.rb"
|
41
40
|
]
|
42
41
|
s.homepage = %q{http://github.com/rackspace/cloudservers}
|
43
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
44
42
|
s.require_paths = ["lib"]
|
45
43
|
s.rubygems_version = %q{1.3.7}
|
46
44
|
s.summary = %q{Rackspace Cloud Servers Ruby API}
|
47
45
|
s.test_files = [
|
48
46
|
"test/cloudservers_authentication_test.rb",
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
47
|
+
"test/cloudservers_connection_test.rb",
|
48
|
+
"test/cloudservers_exception_test.rb",
|
49
|
+
"test/cloudservers_servers_test.rb",
|
50
|
+
"test/test_helper.rb"
|
53
51
|
]
|
54
52
|
|
55
53
|
if s.respond_to? :specification_version then
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module CloudServers
|
2
2
|
class Authentication
|
3
|
-
|
3
|
+
|
4
4
|
# Performs an authentication to the Rackspace Cloud authorization servers. Opens a new HTTP connection to the API server,
|
5
5
|
# sends the credentials, and looks for a successful authentication. If it succeeds, it sets the svrmgmthost,
|
6
6
|
# svrmgtpath, svrmgmtport, svrmgmtscheme, authtoken, and authok variables on the connection. If it fails, it raises
|
@@ -11,9 +11,11 @@ module CloudServers
|
|
11
11
|
path = '/v1.0'
|
12
12
|
hdrhash = { "X-Auth-User" => connection.authuser, "X-Auth-Key" => connection.authkey }
|
13
13
|
begin
|
14
|
-
server = Net::HTTP::Proxy(connection.proxy_host, connection.proxy_port).new(
|
15
|
-
|
16
|
-
|
14
|
+
server = Net::HTTP::Proxy(connection.proxy_host, connection.proxy_port).new(connection.auth_host,connection.auth_port)
|
15
|
+
if connection.auth_scheme == "https"
|
16
|
+
server.use_ssl = true
|
17
|
+
server.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
18
|
+
end
|
17
19
|
server.start
|
18
20
|
rescue
|
19
21
|
raise CloudServers::Exception::Connection, "Unable to connect to #{server}"
|
@@ -9,6 +9,9 @@ module CloudServers
|
|
9
9
|
attr_accessor :svrmgmtpath
|
10
10
|
attr_accessor :svrmgmtport
|
11
11
|
attr_accessor :svrmgmtscheme
|
12
|
+
attr_reader :auth_host
|
13
|
+
attr_reader :auth_port
|
14
|
+
attr_reader :auth_scheme
|
12
15
|
attr_reader :proxy_host
|
13
16
|
attr_reader :proxy_port
|
14
17
|
|
@@ -26,6 +29,7 @@ module CloudServers
|
|
26
29
|
#
|
27
30
|
# :username - Your Rackspace Cloud username *required*
|
28
31
|
# :api_key - Your Rackspace Cloud API key *required*
|
32
|
+
# :auth_url - Configurable auth_url endpoint.
|
29
33
|
# :retry_auth - Whether to retry if your auth token expires (defaults to true)
|
30
34
|
# :proxy_host - If you need to connect through a proxy, supply the hostname here
|
31
35
|
# :proxy_port - If you need to connect through a proxy, supply the port here
|
@@ -34,6 +38,19 @@ module CloudServers
|
|
34
38
|
def initialize(options = {:retry_auth => true})
|
35
39
|
@authuser = options[:username] || (raise Exception::Authentication, "Must supply a :username")
|
36
40
|
@authkey = options[:api_key] || (raise Exception::Authentication, "Must supply an :api_key")
|
41
|
+
@auth_url = options[:auth_url] || @auth_url = CloudServers::AUTH_USA
|
42
|
+
|
43
|
+
auth_uri=nil
|
44
|
+
begin
|
45
|
+
auth_uri=URI.parse(@auth_url)
|
46
|
+
rescue Exception => e
|
47
|
+
raise Exception::InvalidArgument, "Invalid :auth_url parameter: #{e.message}"
|
48
|
+
end
|
49
|
+
raise Exception::InvalidArgument, "Invalid :auth_url parameter." if auth_uri.nil? or auth_uri.host.nil?
|
50
|
+
@auth_host = auth_uri.host
|
51
|
+
@auth_port = auth_uri.port
|
52
|
+
@auth_scheme = auth_uri.scheme
|
53
|
+
|
37
54
|
@retry_auth = options[:retry_auth]
|
38
55
|
@proxy_host = options[:proxy_host]
|
39
56
|
@proxy_port = options[:proxy_port]
|
@@ -49,6 +49,8 @@ module CloudServers
|
|
49
49
|
end
|
50
50
|
class MissingArgument < StandardError # :nodoc:
|
51
51
|
end
|
52
|
+
class InvalidArgument < StandardError # :nodoc:
|
53
|
+
end
|
52
54
|
class TooManyPersonalityItems < StandardError # :nodoc:
|
53
55
|
end
|
54
56
|
class PersonalityFilePathTooLong < StandardError # :nodoc:
|
@@ -69,9 +71,9 @@ module CloudServers
|
|
69
71
|
fault = nil
|
70
72
|
info = nil
|
71
73
|
JSON.parse(response.body).each_pair do |key, val|
|
72
|
-
|
73
|
-
|
74
|
-
|
74
|
+
fault=key
|
75
|
+
info=val
|
76
|
+
end
|
75
77
|
exception_class = self.const_get(fault[0,1].capitalize+fault[1,fault.length])
|
76
78
|
raise exception_class.new(info["message"], response.code, response.body)
|
77
79
|
rescue NameError
|
data/lib/cloudservers.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# == Cloud Servers API
|
4
4
|
# ==== Connects Ruby Applications to Rackspace's {Cloud Servers service}[http://www.rackspacecloud.com/cloud_hosting_products/servers]
|
5
|
-
# By H. Wade Minter <minter@lunenburg.org
|
5
|
+
# By H. Wade Minter <minter@lunenburg.org>, Mike Mayo <mike.mayo@rackspace.com>, and Dan Prince <dan.prince@rackspace.com>
|
6
6
|
#
|
7
7
|
# See COPYING for license information.
|
8
8
|
# Copyright (c) 2009, Rackspace US, Inc.
|
@@ -13,10 +13,13 @@
|
|
13
13
|
# CloudServers::Connection class.
|
14
14
|
#
|
15
15
|
# The CloudServers class is the base class. Not much of note aside from housekeeping happens here.
|
16
|
-
# To create a new CloudServers connection, use the CloudServers::Connection.new(
|
16
|
+
# To create a new CloudServers connection, use the CloudServers::Connection.new(:username => USERNAME, :api_key => API_KEY)
|
17
17
|
|
18
18
|
module CloudServers
|
19
19
|
|
20
|
+
AUTH_USA = "https://auth.api.rackspacecloud.com"
|
21
|
+
AUTH_UK = "https://lon.auth.api.rackspacecloud.com"
|
22
|
+
|
20
23
|
VERSION = IO.read(File.dirname(__FILE__) + '/../VERSION')
|
21
24
|
require 'net/http'
|
22
25
|
require 'net/https'
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
require 'test_helper'
|
2
3
|
|
3
4
|
class CloudserversAuthenticationTest < Test::Unit::TestCase
|
4
5
|
|
@@ -8,7 +9,7 @@ class CloudserversAuthenticationTest < Test::Unit::TestCase
|
|
8
9
|
server = mock(:use_ssl= => true, :verify_mode= => true, :start => true, :finish => true)
|
9
10
|
server.stubs(:get).returns(response)
|
10
11
|
Net::HTTP.stubs(:new).returns(server)
|
11
|
-
connection = stub(:authuser => '
|
12
|
+
connection = stub(:authuser => 'myuser', :authkey => 'bad_key', :auth_host => "a.b.c", :auth_port => "443", :auth_scheme => "https", :authok= => true, :authtoken= => true, :svrmgmthost= => "", :svrmgmtpath= => "", :svrmgmtpath => "", :svrmgmtport= => "", :svrmgmtscheme= => "", :proxy_host => nil, :proxy_port => nil)
|
12
13
|
result = CloudServers::Authentication.new(connection)
|
13
14
|
assert_equal result.class, CloudServers::Authentication
|
14
15
|
end
|
@@ -19,7 +20,7 @@ class CloudserversAuthenticationTest < Test::Unit::TestCase
|
|
19
20
|
server = mock(:use_ssl= => true, :verify_mode= => true, :start => true)
|
20
21
|
server.stubs(:get).returns(response)
|
21
22
|
Net::HTTP.stubs(:new).returns(server)
|
22
|
-
connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :authok= => true, :authtoken= => true, :proxy_host => nil, :proxy_port => nil)
|
23
|
+
connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :auth_host => "a.b.c", :auth_port => "443", :auth_scheme => "https", :authok= => true, :authtoken= => true, :proxy_host => nil, :proxy_port => nil)
|
23
24
|
assert_raises(CloudServers::Exception::Authentication) do
|
24
25
|
result = CloudServers::Authentication.new(connection)
|
25
26
|
end
|
@@ -27,7 +28,7 @@ class CloudserversAuthenticationTest < Test::Unit::TestCase
|
|
27
28
|
|
28
29
|
def test_bad_hostname
|
29
30
|
Net::HTTP.stubs(:new).raises(CloudServers::Exception::Connection)
|
30
|
-
connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :authok= => true, :authtoken= => true, :proxy_host => nil, :proxy_port => nil)
|
31
|
+
connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :auth_host => "a.b.c", :auth_port => "443", :auth_scheme => "https", :authok= => true, :authtoken= => true, :proxy_host => nil, :proxy_port => nil)
|
31
32
|
assert_raises(CloudServers::Exception::Connection) do
|
32
33
|
result = CloudServers::Authentication.new(connection)
|
33
34
|
end
|
@@ -1,6 +1,12 @@
|
|
1
|
-
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
require 'test_helper'
|
2
3
|
|
3
4
|
class CloudServersConnectionTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
connection = stub()
|
8
|
+
CloudServers::Authentication.stubs(:new).returns(connection)
|
9
|
+
end
|
4
10
|
|
5
11
|
def test_init_connection_no_credentials
|
6
12
|
assert_raises(CloudServers::Exception::Authentication) do
|
@@ -13,5 +19,21 @@ class CloudServersConnectionTest < Test::Unit::TestCase
|
|
13
19
|
conn = CloudServers::Connection.new(:username => "test_account")
|
14
20
|
end
|
15
21
|
end
|
22
|
+
|
23
|
+
def test_init_connection_bad_auth_url
|
24
|
+
assert_raises(CloudServers::Exception::InvalidArgument) do
|
25
|
+
conn = CloudServers::Connection.new(:username => "test_account", :api_key => "AABBCCDD11", :auth_url => "***")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_init_connection
|
30
|
+
conn = CloudServers::Connection.new(:username => "test_account", :api_key => "AABBCCDD11", :auth_url => "https://a.b.c")
|
31
|
+
assert_not_nil conn, "Connection.new returned nil."
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_init_connection_with_custom_auth_url
|
35
|
+
conn = CloudServers::Connection.new(:username => "test_account", :api_key => "AABBCCDD11", :auth_url => CloudServers::AUTH_UK)
|
36
|
+
assert_not_nil conn, "Connection.new returned nil."
|
37
|
+
end
|
16
38
|
|
17
39
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
require 'test_helper'
|
2
3
|
|
3
4
|
class CloudServersServersTest < Test::Unit::TestCase
|
4
5
|
|
@@ -70,15 +71,15 @@ json_response = %{{
|
|
70
71
|
def test_get_server
|
71
72
|
|
72
73
|
server=get_test_server
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
74
|
+
assert_equal "sample-server", server.name
|
75
|
+
assert_equal 2, server.imageId
|
76
|
+
assert_equal 1, server.flavorId
|
77
|
+
assert_equal "e4d909c290d0fb1ca068ffaddf22cbd0", server.hostId
|
78
|
+
assert_equal "BUILD", server.status
|
79
|
+
assert_equal 60, server.progress
|
80
|
+
assert_equal "67.23.10.132", server.addresses[:public][0]
|
81
|
+
assert_equal "67.23.10.131", server.addresses[:public][1]
|
82
|
+
assert_equal "10.176.42.16", server.addresses[:private][0]
|
82
83
|
|
83
84
|
end
|
84
85
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudservers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- H. Wade Minter
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date:
|
20
|
+
date: 2011-01-05 00:00:00 -05:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -44,7 +44,6 @@ extra_rdoc_files:
|
|
44
44
|
- README.rdoc
|
45
45
|
- TODO
|
46
46
|
files:
|
47
|
-
- .gitignore
|
48
47
|
- COPYING
|
49
48
|
- README.rdoc
|
50
49
|
- Rakefile
|
@@ -70,8 +69,8 @@ homepage: http://github.com/rackspace/cloudservers
|
|
70
69
|
licenses: []
|
71
70
|
|
72
71
|
post_install_message:
|
73
|
-
rdoc_options:
|
74
|
-
|
72
|
+
rdoc_options: []
|
73
|
+
|
75
74
|
require_paths:
|
76
75
|
- lib
|
77
76
|
required_ruby_version: !ruby/object:Gem::Requirement
|
data/.gitignore
DELETED