fog 0.0.58 → 0.0.59

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/README.rdoc +56 -72
  2. data/VERSION.yml +1 -1
  3. data/fog.gemspec +2 -2
  4. data/lib/fog.rb +9 -20
  5. data/lib/fog/aws.rb +119 -135
  6. data/lib/fog/aws/ec2.rb +31 -1
  7. data/lib/fog/aws/requests/ec2/authorize_security_group_ingress.rb +1 -2
  8. data/lib/fog/aws/requests/ec2/create_security_group.rb +1 -1
  9. data/lib/fog/aws/requests/ec2/run_instances.rb +1 -1
  10. data/lib/fog/connection.rb +14 -32
  11. data/lib/fog/rackspace.rb +21 -51
  12. data/lib/fog/rackspace/files.rb +102 -76
  13. data/lib/fog/rackspace/models/files/directories.rb +14 -3
  14. data/lib/fog/rackspace/models/files/directory.rb +3 -1
  15. data/lib/fog/rackspace/models/files/file.rb +3 -1
  16. data/lib/fog/rackspace/models/files/files.rb +4 -1
  17. data/lib/fog/rackspace/models/servers/flavor.rb +3 -1
  18. data/lib/fog/rackspace/models/servers/flavors.rb +16 -4
  19. data/lib/fog/rackspace/models/servers/image.rb +3 -1
  20. data/lib/fog/rackspace/models/servers/images.rb +18 -5
  21. data/lib/fog/rackspace/models/servers/server.rb +3 -1
  22. data/lib/fog/rackspace/models/servers/servers.rb +14 -3
  23. data/lib/fog/rackspace/requests/files/delete_container.rb +5 -13
  24. data/lib/fog/rackspace/requests/files/delete_object.rb +5 -13
  25. data/lib/fog/rackspace/requests/files/get_container.rb +5 -13
  26. data/lib/fog/rackspace/requests/files/get_containers.rb +5 -13
  27. data/lib/fog/rackspace/requests/files/get_object.rb +5 -13
  28. data/lib/fog/rackspace/requests/files/head_container.rb +5 -13
  29. data/lib/fog/rackspace/requests/files/head_containers.rb +5 -13
  30. data/lib/fog/rackspace/requests/files/head_object.rb +5 -13
  31. data/lib/fog/rackspace/requests/files/put_container.rb +5 -13
  32. data/lib/fog/rackspace/requests/files/put_object.rb +6 -14
  33. data/lib/fog/rackspace/requests/servers/create_image.rb +7 -15
  34. data/lib/fog/rackspace/requests/servers/create_server.rb +7 -15
  35. data/lib/fog/rackspace/requests/servers/delete_image.rb +7 -15
  36. data/lib/fog/rackspace/requests/servers/delete_server.rb +7 -15
  37. data/lib/fog/rackspace/requests/servers/get_flavor_details.rb +5 -13
  38. data/lib/fog/rackspace/requests/servers/get_server_details.rb +5 -13
  39. data/lib/fog/rackspace/requests/servers/list_addresses.rb +5 -13
  40. data/lib/fog/rackspace/requests/servers/list_flavors.rb +5 -13
  41. data/lib/fog/rackspace/requests/servers/list_flavors_detail.rb +5 -13
  42. data/lib/fog/rackspace/requests/servers/list_images.rb +5 -13
  43. data/lib/fog/rackspace/requests/servers/list_images_detail.rb +7 -15
  44. data/lib/fog/rackspace/requests/servers/list_private_addresses.rb +5 -13
  45. data/lib/fog/rackspace/requests/servers/list_public_addresses.rb +5 -13
  46. data/lib/fog/rackspace/requests/servers/list_servers.rb +5 -13
  47. data/lib/fog/rackspace/requests/servers/list_servers_detail.rb +7 -15
  48. data/lib/fog/rackspace/requests/servers/reboot_server.rb +5 -13
  49. data/lib/fog/rackspace/requests/servers/update_server.rb +5 -13
  50. data/lib/fog/rackspace/servers.rb +85 -71
  51. data/lib/fog/slicehost.rb +74 -67
  52. data/lib/fog/slicehost/models/flavor.rb +3 -1
  53. data/lib/fog/slicehost/models/flavors.rb +4 -1
  54. data/lib/fog/slicehost/models/image.rb +3 -1
  55. data/lib/fog/slicehost/models/images.rb +4 -1
  56. data/lib/fog/slicehost/models/server.rb +3 -1
  57. data/lib/fog/slicehost/models/servers.rb +4 -1
  58. data/lib/fog/slicehost/requests/create_slice.rb +5 -9
  59. data/lib/fog/slicehost/requests/delete_slice.rb +4 -10
  60. data/lib/fog/slicehost/requests/get_backups.rb +5 -9
  61. data/lib/fog/slicehost/requests/get_flavor.rb +5 -9
  62. data/lib/fog/slicehost/requests/get_flavors.rb +5 -9
  63. data/lib/fog/slicehost/requests/get_image.rb +5 -9
  64. data/lib/fog/slicehost/requests/get_images.rb +5 -9
  65. data/lib/fog/slicehost/requests/get_slice.rb +5 -9
  66. data/lib/fog/slicehost/requests/get_slices.rb +5 -9
  67. data/lib/fog/slicehost/requests/reboot_slice.rb +4 -10
  68. data/lib/fog/terremark.rb +60 -51
  69. data/lib/fog/terremark/requests/get_catalog.rb +5 -9
  70. data/lib/fog/terremark/requests/get_catalog_item.rb +5 -9
  71. data/lib/fog/terremark/requests/get_organization.rb +5 -9
  72. data/lib/fog/terremark/requests/get_organizations.rb +5 -9
  73. data/lib/fog/terremark/requests/get_vapp_template.rb +5 -9
  74. data/lib/fog/terremark/requests/get_vdc.rb +5 -9
  75. data/spec/rackspace/requests/servers/list_images_detail_spec.rb +0 -1
  76. data/spec/rackspace/requests/servers/reboot_server_spec.rb +3 -1
  77. data/spec/slicehost/requests/create_slice_spec.rb +1 -0
  78. metadata +3 -3
@@ -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' => owner}],
46
+ 'groups' => [{'groupName' => options['GroupName'], 'userId' => @owner_id}],
48
47
  'fromPort' => 1,
49
48
  'ipRanges' => [],
50
49
  'ipProtocol' => protocol,
@@ -36,7 +36,7 @@ module Fog
36
36
  'groupDescription' => description,
37
37
  'groupName' => name,
38
38
  'ipPermissions' => [],
39
- 'ownerId' => Fog::AWS::Mock.owner_id
39
+ 'ownerId' => @owner_id
40
40
  }
41
41
  @data[:security_groups][name] = data
42
42
  response.body = {
@@ -102,7 +102,7 @@ module Fog
102
102
 
103
103
  group_set = [ (options['GroupId'] || 'default') ]
104
104
  instances_set = []
105
- owner_id = Fog::AWS::Mock.owner_id
105
+ owner_id = @owner_id
106
106
  reservation_id = Fog::AWS::Mock.reservation_id
107
107
 
108
108
  min_count.times do |i|
@@ -1,43 +1,25 @@
1
- unless Fog.mocking?
1
+ module Fog
2
+ class Connection
2
3
 
3
- module Fog
4
- class Connection
4
+ def initialize(url)
5
+ @excon = Excon.new(url)
6
+ end
5
7
 
6
- def initialize(url)
7
- @excon = Excon.new(url)
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
- def request(params)
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
- response
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
@@ -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.dependencies
5
- [
6
- 'fog/rackspace/files.rb',
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
- else
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
- srand(Time.now.to_i)
52
-
53
- class Mock
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
@@ -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
- class Files
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.reload
25
- self.dependencies.each {|dependency| load(dependency)}
26
- end
27
-
28
- def initialize(options={})
29
- credentials = Fog::Rackspace.authenticate(options)
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 cdn_request(params)
65
- @cdn_connection = Fog::Connection.new("#{@cdn_scheme}://#{@cdn_host}:#{@cdn_port}")
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
- def storage_request(params, parse_json = true)
85
- @storage_connection = Fog::Connection.new("#{@storage_scheme}://#{@storage_host}:#{@storage_port}")
86
- response = @storage_connection.request({
87
- :body => params[:body],
88
- :expects => params[:expects],
89
- :headers => {
90
- 'Content-Type' => 'application/json',
91
- 'X-Auth-Token' => @auth_token
92
- }.merge!(params[:headers] || {}),
93
- :host => @storage_host,
94
- :method => params[:method],
95
- :path => "#{@storage_path}/#{params[:path]}",
96
- :query => params[:query]
97
- })
98
- if !response.body.empty? && parse_json
99
- response.body = JSON.parse(response.body)
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
- response
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
- class Files
6
+ module Files
4
7
 
5
- def directories
6
- Fog::Rackspace::Files::Directories.new(:connection => self)
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
@@ -1,6 +1,8 @@
1
+ require 'fog/model'
2
+
1
3
  module Fog
2
4
  module Rackspace
3
- class Files
5
+ module Files
4
6
 
5
7
  class Directory < Fog::Model
6
8