fog 0.0.58 → 0.0.59
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +56 -72
- data/VERSION.yml +1 -1
- data/fog.gemspec +2 -2
- data/lib/fog.rb +9 -20
- data/lib/fog/aws.rb +119 -135
- data/lib/fog/aws/ec2.rb +31 -1
- data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +1 -2
- data/lib/fog/aws/requests/ec2/create_security_group.rb +1 -1
- data/lib/fog/aws/requests/ec2/run_instances.rb +1 -1
- data/lib/fog/connection.rb +14 -32
- data/lib/fog/rackspace.rb +21 -51
- data/lib/fog/rackspace/files.rb +102 -76
- data/lib/fog/rackspace/models/files/directories.rb +14 -3
- data/lib/fog/rackspace/models/files/directory.rb +3 -1
- data/lib/fog/rackspace/models/files/file.rb +3 -1
- data/lib/fog/rackspace/models/files/files.rb +4 -1
- data/lib/fog/rackspace/models/servers/flavor.rb +3 -1
- data/lib/fog/rackspace/models/servers/flavors.rb +16 -4
- data/lib/fog/rackspace/models/servers/image.rb +3 -1
- data/lib/fog/rackspace/models/servers/images.rb +18 -5
- data/lib/fog/rackspace/models/servers/server.rb +3 -1
- data/lib/fog/rackspace/models/servers/servers.rb +14 -3
- data/lib/fog/rackspace/requests/files/delete_container.rb +5 -13
- data/lib/fog/rackspace/requests/files/delete_object.rb +5 -13
- data/lib/fog/rackspace/requests/files/get_container.rb +5 -13
- data/lib/fog/rackspace/requests/files/get_containers.rb +5 -13
- data/lib/fog/rackspace/requests/files/get_object.rb +5 -13
- data/lib/fog/rackspace/requests/files/head_container.rb +5 -13
- data/lib/fog/rackspace/requests/files/head_containers.rb +5 -13
- data/lib/fog/rackspace/requests/files/head_object.rb +5 -13
- data/lib/fog/rackspace/requests/files/put_container.rb +5 -13
- data/lib/fog/rackspace/requests/files/put_object.rb +6 -14
- data/lib/fog/rackspace/requests/servers/create_image.rb +7 -15
- data/lib/fog/rackspace/requests/servers/create_server.rb +7 -15
- data/lib/fog/rackspace/requests/servers/delete_image.rb +7 -15
- data/lib/fog/rackspace/requests/servers/delete_server.rb +7 -15
- data/lib/fog/rackspace/requests/servers/get_flavor_details.rb +5 -13
- data/lib/fog/rackspace/requests/servers/get_server_details.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_addresses.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_flavors.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_flavors_detail.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_images.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_images_detail.rb +7 -15
- data/lib/fog/rackspace/requests/servers/list_private_addresses.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_public_addresses.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_servers.rb +5 -13
- data/lib/fog/rackspace/requests/servers/list_servers_detail.rb +7 -15
- data/lib/fog/rackspace/requests/servers/reboot_server.rb +5 -13
- data/lib/fog/rackspace/requests/servers/update_server.rb +5 -13
- data/lib/fog/rackspace/servers.rb +85 -71
- data/lib/fog/slicehost.rb +74 -67
- data/lib/fog/slicehost/models/flavor.rb +3 -1
- data/lib/fog/slicehost/models/flavors.rb +4 -1
- data/lib/fog/slicehost/models/image.rb +3 -1
- data/lib/fog/slicehost/models/images.rb +4 -1
- data/lib/fog/slicehost/models/server.rb +3 -1
- data/lib/fog/slicehost/models/servers.rb +4 -1
- data/lib/fog/slicehost/requests/create_slice.rb +5 -9
- data/lib/fog/slicehost/requests/delete_slice.rb +4 -10
- data/lib/fog/slicehost/requests/get_backups.rb +5 -9
- data/lib/fog/slicehost/requests/get_flavor.rb +5 -9
- data/lib/fog/slicehost/requests/get_flavors.rb +5 -9
- data/lib/fog/slicehost/requests/get_image.rb +5 -9
- data/lib/fog/slicehost/requests/get_images.rb +5 -9
- data/lib/fog/slicehost/requests/get_slice.rb +5 -9
- data/lib/fog/slicehost/requests/get_slices.rb +5 -9
- data/lib/fog/slicehost/requests/reboot_slice.rb +4 -10
- data/lib/fog/terremark.rb +60 -51
- data/lib/fog/terremark/requests/get_catalog.rb +5 -9
- data/lib/fog/terremark/requests/get_catalog_item.rb +5 -9
- data/lib/fog/terremark/requests/get_organization.rb +5 -9
- data/lib/fog/terremark/requests/get_organizations.rb +5 -9
- data/lib/fog/terremark/requests/get_vapp_template.rb +5 -9
- data/lib/fog/terremark/requests/get_vdc.rb +5 -9
- data/spec/rackspace/requests/servers/list_images_detail_spec.rb +0 -1
- data/spec/rackspace/requests/servers/reboot_server_spec.rb +3 -1
- data/spec/slicehost/requests/create_slice_spec.rb +1 -0
- metadata +3 -3
data/lib/fog/aws/ec2.rb
CHANGED
@@ -76,7 +76,36 @@ module Fog
|
|
76
76
|
:addresses => {},
|
77
77
|
:instances => {},
|
78
78
|
:key_pairs => {},
|
79
|
-
:security_groups => {
|
79
|
+
:security_groups => {
|
80
|
+
'default' => {
|
81
|
+
'groupDescription' => 'default group',
|
82
|
+
'groupName' => 'default',
|
83
|
+
'ipPermissions' => [
|
84
|
+
{
|
85
|
+
'groups' => [{'groupName' => 'default', 'userId' => @owner_id}],
|
86
|
+
'fromPort' => -1,
|
87
|
+
'toPort' => -1,
|
88
|
+
'ipProtocol' => 'icmp',
|
89
|
+
'ipRanges' => []
|
90
|
+
},
|
91
|
+
{
|
92
|
+
'groups' => [{'groupName' => 'default', 'userId' => @owner_id}],
|
93
|
+
'fromPort' => 0,
|
94
|
+
'toPort' => 65535,
|
95
|
+
'ipProtocol' => 'tcp',
|
96
|
+
'ipRanges' => []
|
97
|
+
},
|
98
|
+
{
|
99
|
+
'groups' => [{'groupName' => 'default', 'userId' => @owner_id}],
|
100
|
+
'fromPort' => 0,
|
101
|
+
'toPort' => 65535,
|
102
|
+
'ipProtocol' => 'udp',
|
103
|
+
'ipRanges' => []
|
104
|
+
}
|
105
|
+
],
|
106
|
+
'ownerId' => @owner_id
|
107
|
+
}
|
108
|
+
},
|
80
109
|
:snapshots => {},
|
81
110
|
:volumes => {}
|
82
111
|
}
|
@@ -91,6 +120,7 @@ module Fog
|
|
91
120
|
|
92
121
|
def initialize(options={})
|
93
122
|
@aws_access_key_id = options[:aws_access_key_id]
|
123
|
+
@owner_id = Fog::AWS::Mock.owner_id
|
94
124
|
@data = self.class.data[@aws_access_key_id]
|
95
125
|
end
|
96
126
|
|
@@ -41,10 +41,9 @@ module Fog
|
|
41
41
|
group['ipPermissions'] ||= []
|
42
42
|
|
43
43
|
if options['GroupName'] && options['SourceSecurityGroupName'] && options['SourceSecurityGroupOwnerId']
|
44
|
-
owner = Fog::AWS::Mock.owner_id
|
45
44
|
['icmp', 'tcp', 'udp'].each do |protocol|
|
46
45
|
group['ipPermissions'] << {
|
47
|
-
'groups' => [{'groupName' => options['GroupName'], 'userId' =>
|
46
|
+
'groups' => [{'groupName' => options['GroupName'], 'userId' => @owner_id}],
|
48
47
|
'fromPort' => 1,
|
49
48
|
'ipRanges' => [],
|
50
49
|
'ipProtocol' => protocol,
|
data/lib/fog/connection.rb
CHANGED
@@ -1,43 +1,25 @@
|
|
1
|
-
|
1
|
+
module Fog
|
2
|
+
class Connection
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
def initialize(url)
|
5
|
+
@excon = Excon.new(url)
|
6
|
+
end
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
def request(params)
|
9
|
+
if parser = params.delete(:parser)
|
10
|
+
body = Nokogiri::XML::SAX::PushParser.new(parser)
|
11
|
+
params[:block] = lambda { |chunk| body << chunk }
|
8
12
|
end
|
9
13
|
|
10
|
-
|
11
|
-
if parser = params.delete(:parser)
|
12
|
-
body = Nokogiri::XML::SAX::PushParser.new(parser)
|
13
|
-
params[:block] = lambda { |chunk| body << chunk }
|
14
|
-
end
|
15
|
-
|
16
|
-
response = @excon.request(params)
|
17
|
-
|
18
|
-
if parser
|
19
|
-
body.finish
|
20
|
-
response.body = parser.response
|
21
|
-
end
|
14
|
+
response = @excon.request(params)
|
22
15
|
|
23
|
-
|
16
|
+
if parser
|
17
|
+
body.finish
|
18
|
+
response.body = parser.response
|
24
19
|
end
|
25
20
|
|
21
|
+
response
|
26
22
|
end
|
27
|
-
end
|
28
|
-
|
29
|
-
else
|
30
|
-
|
31
|
-
module Fog
|
32
|
-
class Connection
|
33
23
|
|
34
|
-
def initialize(url)
|
35
|
-
end
|
36
|
-
|
37
|
-
def request(params)
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
24
|
end
|
42
|
-
|
43
25
|
end
|
data/lib/fog/rackspace.rb
CHANGED
@@ -1,61 +1,31 @@
|
|
1
|
+
require 'fog/rackspace/files'
|
2
|
+
require 'fog/rackspace/servers'
|
3
|
+
|
1
4
|
module Fog
|
2
5
|
module Rackspace
|
3
6
|
|
4
|
-
def self.
|
5
|
-
[
|
6
|
-
'
|
7
|
-
'fog/rackspace/servers.rb'
|
8
|
-
]
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.reload
|
12
|
-
self.dependencies.each {|dependency| load(dependency)}
|
13
|
-
end
|
14
|
-
|
15
|
-
unless Fog.mocking?
|
16
|
-
|
17
|
-
def self.authenticate(options)
|
18
|
-
unless @rackspace_api_key = options[:rackspace_api_key]
|
19
|
-
raise ArgumentError.new('rackspace_api_key is required to access rackspace')
|
20
|
-
end
|
21
|
-
unless @rackspace_username = options[:rackspace_username]
|
22
|
-
raise ArgumentError.new('rackspace_username is required to access rackspace')
|
23
|
-
end
|
24
|
-
connection = Fog::Connection.new("https://auth.api.rackspacecloud.com")
|
25
|
-
response = connection.request({
|
26
|
-
:expects => 204,
|
27
|
-
:headers => {
|
28
|
-
'X-Auth-Key' => @rackspace_api_key,
|
29
|
-
'X-Auth-User' => @rackspace_username
|
30
|
-
},
|
31
|
-
:host => 'auth.api.rackspacecloud.com',
|
32
|
-
:method => 'GET',
|
33
|
-
:path => 'v1.0'
|
34
|
-
})
|
35
|
-
response.headers.reject do |key, value|
|
36
|
-
!['X-Server-Management-Url', 'X-Storage-Url', 'X-CDN-Management-Url', 'X-Auth-Token'].include?(key)
|
37
|
-
end
|
7
|
+
def self.authenticate(options)
|
8
|
+
unless @rackspace_api_key = options[:rackspace_api_key]
|
9
|
+
raise ArgumentError.new('rackspace_api_key is required to access rackspace')
|
38
10
|
end
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
def self.authenticate(options)
|
43
|
-
{
|
44
|
-
'X-Auth_Token' => '01234567-0123-0123-0123-01234',
|
45
|
-
'X-CDN-Management-Url' => 'https://cdn.cloaddrive.com/v1/CloudFS_01234-0123',
|
46
|
-
'X-Server-Management-Url' => 'https://servers.api.rackspacecloud.com/v1.0/01234',
|
47
|
-
'X-Storage-Url' => 'https://storage.clouddrive.com/v1/CloudFS_01234-0123'
|
48
|
-
}
|
11
|
+
unless @rackspace_username = options[:rackspace_username]
|
12
|
+
raise ArgumentError.new('rackspace_username is required to access rackspace')
|
49
13
|
end
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
14
|
+
connection = Fog::Connection.new("https://auth.api.rackspacecloud.com")
|
15
|
+
response = connection.request({
|
16
|
+
:expects => 204,
|
17
|
+
:headers => {
|
18
|
+
'X-Auth-Key' => @rackspace_api_key,
|
19
|
+
'X-Auth-User' => @rackspace_username
|
20
|
+
},
|
21
|
+
:host => 'auth.api.rackspacecloud.com',
|
22
|
+
:method => 'GET',
|
23
|
+
:path => 'v1.0'
|
24
|
+
})
|
25
|
+
response.headers.reject do |key, value|
|
26
|
+
!['X-Server-Management-Url', 'X-Storage-Url', 'X-CDN-Management-Url', 'X-Auth-Token'].include?(key)
|
54
27
|
end
|
55
|
-
|
56
28
|
end
|
57
29
|
|
58
30
|
end
|
59
31
|
end
|
60
|
-
|
61
|
-
Fog::Rackspace.reload
|
data/lib/fog/rackspace/files.rb
CHANGED
@@ -1,51 +1,36 @@
|
|
1
|
+
require 'fog/rackspace/models/files/directory'
|
2
|
+
require 'fog/rackspace/models/files/directories'
|
3
|
+
require 'fog/rackspace/models/files/file'
|
4
|
+
require 'fog/rackspace/models/files/files'
|
5
|
+
require 'fog/rackspace/requests/files/delete_container'
|
6
|
+
require 'fog/rackspace/requests/files/delete_object'
|
7
|
+
require 'fog/rackspace/requests/files/get_container'
|
8
|
+
require 'fog/rackspace/requests/files/get_containers'
|
9
|
+
require 'fog/rackspace/requests/files/get_object'
|
10
|
+
require 'fog/rackspace/requests/files/head_container'
|
11
|
+
require 'fog/rackspace/requests/files/head_containers'
|
12
|
+
require 'fog/rackspace/requests/files/head_object'
|
13
|
+
require 'fog/rackspace/requests/files/put_container'
|
14
|
+
require 'fog/rackspace/requests/files/put_object'
|
15
|
+
|
1
16
|
module Fog
|
2
17
|
module Rackspace
|
3
|
-
|
4
|
-
|
5
|
-
def self.dependencies
|
6
|
-
[
|
7
|
-
"fog/rackspace/models/files/directory.rb",
|
8
|
-
"fog/rackspace/models/files/directories.rb",
|
9
|
-
"fog/rackspace/models/files/file.rb",
|
10
|
-
"fog/rackspace/models/files/files.rb",
|
11
|
-
"fog/rackspace/requests/files/delete_container.rb",
|
12
|
-
"fog/rackspace/requests/files/delete_object.rb",
|
13
|
-
"fog/rackspace/requests/files/get_container.rb",
|
14
|
-
"fog/rackspace/requests/files/get_containers.rb",
|
15
|
-
"fog/rackspace/requests/files/get_object.rb",
|
16
|
-
"fog/rackspace/requests/files/head_container.rb",
|
17
|
-
"fog/rackspace/requests/files/head_containers.rb",
|
18
|
-
"fog/rackspace/requests/files/head_object.rb",
|
19
|
-
"fog/rackspace/requests/files/put_container.rb",
|
20
|
-
"fog/rackspace/requests/files/put_object.rb"
|
21
|
-
]
|
22
|
-
end
|
18
|
+
module Files
|
23
19
|
|
24
|
-
def self.
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
@auth_token = credentials['X-Auth-Token']
|
31
|
-
cdn_uri = URI.parse(credentials['X-CDN-Management-Url'])
|
32
|
-
@cdn_host = cdn_uri.host
|
33
|
-
@cdn_path = cdn_uri.path
|
34
|
-
@cdn_port = cdn_uri.port
|
35
|
-
@cdn_scheme = cdn_uri.scheme
|
36
|
-
storage_uri = URI.parse(credentials['X-Storage-Url'])
|
37
|
-
@storage_host = storage_uri.host
|
38
|
-
@storage_path = storage_uri.path
|
39
|
-
@storage_port = storage_uri.port
|
40
|
-
@storage_scheme = storage_uri.scheme
|
20
|
+
def self.new(options={})
|
21
|
+
if Fog.mocking?
|
22
|
+
Fog::Rackspace::Files::Mock.new(options)
|
23
|
+
else
|
24
|
+
Fog::Rackspace::Files::Real.new(options)
|
25
|
+
end
|
41
26
|
end
|
42
27
|
|
43
|
-
def parse_data(data)
|
28
|
+
def self.parse_data(data)
|
44
29
|
metadata = {
|
45
30
|
:body => nil,
|
46
31
|
:headers => {}
|
47
32
|
}
|
48
|
-
|
33
|
+
|
49
34
|
if data.is_a?(String)
|
50
35
|
metadata[:body] = data
|
51
36
|
metadata[:headers]['Content-Length'] = metadata[:body].size.to_s
|
@@ -61,48 +46,89 @@ module Fog
|
|
61
46
|
metadata
|
62
47
|
end
|
63
48
|
|
64
|
-
def
|
65
|
-
|
66
|
-
response = @cdn_connection.request({
|
67
|
-
:body => params[:body],
|
68
|
-
:expects => params[:expects],
|
69
|
-
:headers => {
|
70
|
-
'Content-Type' => 'application/json',
|
71
|
-
'X-Auth-Token' => @auth_token
|
72
|
-
}.merge!(params[:headers] || {}),
|
73
|
-
:host => @cdn_host,
|
74
|
-
:method => params[:method],
|
75
|
-
:path => "#{@cdn_path}/#{params[:path]}",
|
76
|
-
:query => params[:query]
|
77
|
-
})
|
78
|
-
unless response.body.empty?
|
79
|
-
response.body = JSON.parse(response.body)
|
80
|
-
end
|
81
|
-
response
|
49
|
+
def self.reset_data(keys=Mock.data.keys)
|
50
|
+
Mock.reset_data(keys)
|
82
51
|
end
|
83
52
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
53
|
+
class Mock
|
54
|
+
|
55
|
+
def self.data
|
56
|
+
@data ||= Hash.new do |hash, key|
|
57
|
+
hash[key] = {}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.reset_data(keys=data.keys)
|
62
|
+
for key in [*keys]
|
63
|
+
data.delete(key)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def initialize(options={})
|
68
|
+
@rackspace_username = options[:rackspace_username]
|
69
|
+
@data = self.class.data[@rackspace_username]
|
100
70
|
end
|
101
|
-
|
71
|
+
|
102
72
|
end
|
103
73
|
|
74
|
+
class Real
|
75
|
+
|
76
|
+
def initialize(options={})
|
77
|
+
credentials = Fog::Rackspace.authenticate(options)
|
78
|
+
@auth_token = credentials['X-Auth-Token']
|
79
|
+
cdn_uri = URI.parse(credentials['X-CDN-Management-Url'])
|
80
|
+
@cdn_host = cdn_uri.host
|
81
|
+
@cdn_path = cdn_uri.path
|
82
|
+
@cdn_port = cdn_uri.port
|
83
|
+
@cdn_scheme = cdn_uri.scheme
|
84
|
+
storage_uri = URI.parse(credentials['X-Storage-Url'])
|
85
|
+
@storage_host = storage_uri.host
|
86
|
+
@storage_path = storage_uri.path
|
87
|
+
@storage_port = storage_uri.port
|
88
|
+
@storage_scheme = storage_uri.scheme
|
89
|
+
end
|
90
|
+
|
91
|
+
def cdn_request(params)
|
92
|
+
@cdn_connection = Fog::Connection.new("#{@cdn_scheme}://#{@cdn_host}:#{@cdn_port}")
|
93
|
+
response = @cdn_connection.request({
|
94
|
+
:body => params[:body],
|
95
|
+
:expects => params[:expects],
|
96
|
+
:headers => {
|
97
|
+
'Content-Type' => 'application/json',
|
98
|
+
'X-Auth-Token' => @auth_token
|
99
|
+
}.merge!(params[:headers] || {}),
|
100
|
+
:host => @cdn_host,
|
101
|
+
:method => params[:method],
|
102
|
+
:path => "#{@cdn_path}/#{params[:path]}",
|
103
|
+
:query => params[:query]
|
104
|
+
})
|
105
|
+
unless response.body.empty?
|
106
|
+
response.body = JSON.parse(response.body)
|
107
|
+
end
|
108
|
+
response
|
109
|
+
end
|
110
|
+
|
111
|
+
def storage_request(params, parse_json = true)
|
112
|
+
@storage_connection = Fog::Connection.new("#{@storage_scheme}://#{@storage_host}:#{@storage_port}")
|
113
|
+
response = @storage_connection.request({
|
114
|
+
:body => params[:body],
|
115
|
+
:expects => params[:expects],
|
116
|
+
:headers => {
|
117
|
+
'Content-Type' => 'application/json',
|
118
|
+
'X-Auth-Token' => @auth_token
|
119
|
+
}.merge!(params[:headers] || {}),
|
120
|
+
:host => @storage_host,
|
121
|
+
:method => params[:method],
|
122
|
+
:path => "#{@storage_path}/#{params[:path]}",
|
123
|
+
:query => params[:query]
|
124
|
+
})
|
125
|
+
if !response.body.empty? && parse_json
|
126
|
+
response.body = JSON.parse(response.body)
|
127
|
+
end
|
128
|
+
response
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
104
132
|
end
|
105
133
|
end
|
106
134
|
end
|
107
|
-
|
108
|
-
Fog::Rackspace::Files.reload
|
@@ -1,9 +1,20 @@
|
|
1
|
+
require 'fog/collection'
|
2
|
+
require 'fog/rackspace/models/files/directory'
|
3
|
+
|
1
4
|
module Fog
|
2
5
|
module Rackspace
|
3
|
-
|
6
|
+
module Files
|
4
7
|
|
5
|
-
|
6
|
-
|
8
|
+
class Real
|
9
|
+
def directories
|
10
|
+
Fog::Rackspace::Files::Directories.new(:connection => self)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Mock
|
15
|
+
def directories
|
16
|
+
Fog::Rackspace::Files::Directories.new(:connection => self)
|
17
|
+
end
|
7
18
|
end
|
8
19
|
|
9
20
|
class Directories < Fog::Collection
|