fog 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/Gemfile.lock +3 -3
  2. data/fog.gemspec +2 -2
  3. data/lib/fog.rb +1 -1
  4. data/lib/fog/cdn/aws.rb +4 -1
  5. data/lib/fog/compute/parsers/terremark_ecloud/get_ip_address.rb +23 -0
  6. data/lib/fog/compute/parsers/terremark_ecloud/get_task.rb +42 -0
  7. data/lib/fog/compute/parsers/terremark_ecloud/get_task_list.rb +51 -0
  8. data/lib/fog/compute/requests/terremark_ecloud/get_ip_address.rb +19 -0
  9. data/lib/fog/compute/requests/terremark_ecloud/get_task.rb +19 -0
  10. data/lib/fog/compute/requests/terremark_ecloud/get_task_list.rb +19 -0
  11. data/lib/fog/compute/requests/terremark_ecloud/get_versions.rb +4 -2
  12. data/lib/fog/compute/requests/terremark_ecloud/login.rb +29 -0
  13. data/lib/fog/compute/terremark_ecloud.rb +18 -34
  14. data/lib/fog/core/attributes.rb +1 -1
  15. data/lib/fog/core/collection.rb +1 -0
  16. data/lib/fog/core/credentials.rb +1 -1
  17. data/lib/fog/core/model.rb +1 -0
  18. data/lib/fog/dns/aws.rb +4 -1
  19. data/lib/fog/storage/aws.rb +4 -3
  20. data/lib/fog/storage/google.rb +4 -1
  21. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +23 -1
  22. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +47 -35
  23. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +5 -0
  24. data/spec/vcloud/models/vdc_spec.rb +7 -8
  25. data/spec/vcloud/requests/get_network_spec.rb +10 -10
  26. data/spec/vcloud/requests/get_organization_spec.rb +7 -8
  27. data/spec/vcloud/requests/get_vdc_spec.rb +4 -5
  28. data/spec/vcloud/requests/get_versions_spec.rb +2 -2
  29. data/spec/vcloud/spec_helper.rb +36 -32
  30. data/spec/vcloud/terremark/ecloud/models/backup_internet_service_spec.rb +3 -4
  31. data/spec/vcloud/terremark/ecloud/models/backup_internet_services_spec.rb +4 -5
  32. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +26 -3
  33. data/spec/vcloud/terremark/ecloud/models/internet_services_spec.rb +3 -3
  34. data/spec/vcloud/terremark/ecloud/models/ip_spec.rb +3 -3
  35. data/spec/vcloud/terremark/ecloud/models/ips_spec.rb +3 -3
  36. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +4 -4
  37. data/spec/vcloud/terremark/ecloud/models/networks_spec.rb +3 -3
  38. data/spec/vcloud/terremark/ecloud/models/node_spec.rb +3 -3
  39. data/spec/vcloud/terremark/ecloud/models/nodes_spec.rb +3 -4
  40. data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +3 -3
  41. data/spec/vcloud/terremark/ecloud/models/public_ips_spec.rb +3 -3
  42. data/spec/vcloud/terremark/ecloud/models/server_spec.rb +2 -2
  43. data/spec/vcloud/terremark/ecloud/models/vdc_spec.rb +5 -5
  44. data/spec/vcloud/terremark/ecloud/models/vdcs_spec.rb +3 -3
  45. data/spec/vcloud/terremark/ecloud/requests/add_backup_internet_service_spec.rb +2 -2
  46. data/spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb +3 -3
  47. data/spec/vcloud/terremark/ecloud/requests/add_node_spec.rb +1 -1
  48. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +1 -1
  49. data/spec/vcloud/terremark/ecloud/requests/configure_network_ip_spec.rb +1 -1
  50. data/spec/vcloud/terremark/ecloud/requests/configure_node_spec.rb +1 -1
  51. data/spec/vcloud/terremark/ecloud/requests/configure_vapp_spec.rb +2 -2
  52. data/spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb +1 -1
  53. data/spec/vcloud/terremark/ecloud/requests/delete_node_spec.rb +1 -1
  54. data/spec/vcloud/terremark/ecloud/requests/delete_vapp_spec.rb +4 -4
  55. data/spec/vcloud/terremark/ecloud/requests/get_catalog_item_spec.rb +7 -8
  56. data/spec/vcloud/terremark/ecloud/requests/get_catalog_spec.rb +3 -3
  57. data/spec/vcloud/terremark/ecloud/requests/get_customization_options_spec.rb +2 -2
  58. data/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +13 -13
  59. data/spec/vcloud/terremark/ecloud/requests/get_network_ip_spec.rb +2 -2
  60. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +3 -4
  61. data/spec/vcloud/terremark/ecloud/requests/get_network_spec.rb +2 -2
  62. data/spec/vcloud/terremark/ecloud/requests/get_node_spec.rb +2 -2
  63. data/spec/vcloud/terremark/ecloud/requests/get_nodes_spec.rb +2 -2
  64. data/spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb +2 -2
  65. data/spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb +2 -2
  66. data/spec/vcloud/terremark/ecloud/requests/get_vapp_spec.rb +5 -6
  67. data/spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb +9 -10
  68. data/spec/vcloud/terremark/ecloud/requests/instantiate_vapp_template_spec.rb +5 -6
  69. data/spec/vcloud/terremark/ecloud/requests/power_off_spec.rb +1 -1
  70. data/spec/vcloud/terremark/ecloud/requests/power_on_spec.rb +1 -1
  71. data/spec/vcloud/vcloud_spec.rb +3 -3
  72. data/tests/compute/requests/terremark_ecloud/organization_tests.rb +5 -0
  73. data/tests/compute/requests/terremark_ecloud/task_tests.rb +39 -0
  74. data/tests/helpers/formats_helper.rb +5 -3
  75. metadata +47 -38
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fog (0.5.2)
4
+ fog (0.5.3)
5
5
  builder
6
6
  excon (>= 0.5.2)
7
7
  formatador (>= 0.0.16)
@@ -17,9 +17,9 @@ GEM
17
17
  builder (3.0.0)
18
18
  excon (0.5.2)
19
19
  formatador (0.0.16)
20
- json (1.4.6)
20
+ json (1.5.1)
21
21
  mime-types (1.16)
22
- net-ssh (2.0.23)
22
+ net-ssh (2.1.0)
23
23
  nokogiri (1.4.4)
24
24
  rake (0.8.7)
25
25
  rspec (1.3.1)
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  ## If your rubyforge_project name is different, then edit it and comment out
8
8
  ## the sub! line in the Rakefile
9
9
  s.name = 'fog'
10
- s.version = '0.5.2'
11
- s.date = '2011-02-11'
10
+ s.version = '0.5.3'
11
+ s.date = '2011-02-15'
12
12
  s.rubyforge_project = 'fog'
13
13
 
14
14
  ## Make sure your summary is short. The description may be as long
data/lib/fog.rb CHANGED
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'fog', 'core')
3
3
  module Fog
4
4
 
5
5
  unless const_defined?(:VERSION)
6
- VERSION = '0.5.2'
6
+ VERSION = '0.5.3'
7
7
  end
8
8
 
9
9
  end
@@ -87,7 +87,10 @@ module Fog
87
87
  @port = options[:port] || 443
88
88
  @scheme = options[:scheme] || 'https'
89
89
  @version = options[:version] || '2010-11-01'
90
- @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent] || true)
90
+ unless options.has_key?(:persistent)
91
+ options[:persistent] = true
92
+ end
93
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent])
91
94
  end
92
95
 
93
96
  def reload
@@ -0,0 +1,23 @@
1
+ module Fog
2
+ module Parsers
3
+ module TerremarkEcloud
4
+ module Compute
5
+
6
+ class GetIpAddress < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @response = {}
10
+ end
11
+
12
+ def end_element(name)
13
+ case name
14
+ when 'Id', 'Href', 'Name', 'RnatAddress', 'Server', 'Status'
15
+ @response[name] = @value
16
+ end
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module Parsers
3
+ module TerremarkEcloud
4
+ module Compute
5
+
6
+ class GetTask < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @response = {}
10
+ end
11
+
12
+ def start_element(name, attrs = [])
13
+ case name
14
+ when 'Task'
15
+ for attribute in %w{href status type}
16
+ if value = attr_value(attribute, attrs)
17
+ @response[attribute] = value
18
+ end
19
+ end
20
+ for attribute in %w{endTime startTime}
21
+ if value = attr_value(attribute, attrs)
22
+ @response[attribute] = Time.parse(value)
23
+ end
24
+ end
25
+ when 'Owner', 'Result'
26
+ data = {}
27
+ for attribute in %w{href name type}
28
+ if value = attr_value(attribute, attrs)
29
+ data[attribute] = value
30
+ end
31
+ end
32
+ @response[name] = data
33
+ end
34
+
35
+ super
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,51 @@
1
+ module Fog
2
+ module Parsers
3
+ module TerremarkEcloud
4
+ module Compute
5
+
6
+ class GetTaskList < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @response = { 'Tasks' => [] }
10
+ @task = {}
11
+ end
12
+
13
+ def start_element(name, attrs = [])
14
+ case name
15
+ when 'Task'
16
+ for attribute in %w{href status type}
17
+ if value = attr_value(attribute, attrs)
18
+ @task[attribute] = value
19
+ end
20
+ end
21
+ for attribute in %w{endTime startTime}
22
+ if value = attr_value(attribute, attrs)
23
+ @task[attribute] = Time.parse(value)
24
+ end
25
+ end
26
+ when 'Owner', 'Result'
27
+ data = {}
28
+ for attribute in %w{href name type}
29
+ if value = attr_value(attribute, attrs)
30
+ data[attribute] = value
31
+ end
32
+ end
33
+ @task[name] = data
34
+ end
35
+
36
+ super
37
+ end
38
+
39
+ def end_element(name)
40
+ case name
41
+ when 'Task'
42
+ @response['Tasks'] << @task
43
+ @task = {}
44
+ end
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ module Fog
2
+ module TerremarkEcloud
3
+ class Compute
4
+ class Real
5
+
6
+ require 'fog/compute/parsers/terremark_ecloud/get_ip_address'
7
+
8
+ def get_ip_address(href)
9
+ request({
10
+ :href => href,
11
+ :idempotent => true,
12
+ :parser => Fog::Parsers::TerremarkEcloud::Compute::GetIpAddress.new
13
+ })
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Fog
2
+ module TerremarkEcloud
3
+ class Compute
4
+ class Real
5
+
6
+ require 'fog/compute/parsers/terremark_ecloud/get_task'
7
+
8
+ def get_task(href)
9
+ request({
10
+ :href => href,
11
+ :idempotent => true,
12
+ :parser => Fog::Parsers::TerremarkEcloud::Compute::GetTask.new
13
+ })
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Fog
2
+ module TerremarkEcloud
3
+ class Compute
4
+ class Real
5
+
6
+ require 'fog/compute/parsers/terremark_ecloud/get_task_list'
7
+
8
+ def get_task_list(href)
9
+ request({
10
+ :href => href,
11
+ :idempotent => true,
12
+ :parser => Fog::Parsers::TerremarkEcloud::Compute::GetTaskList.new
13
+ })
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -11,11 +11,13 @@ module Fog
11
11
  :expects => 200,
12
12
  :method => 'GET',
13
13
  :parser => Fog::Parsers::TerremarkEcloud::Compute::GetVersions.new
14
- });
14
+ })
15
15
  version_info = response.body['SupportedVersions'].detect {|version_info| version_info['Version'] == @version}
16
- unless login_url = version_info && version_info['LoginUrl']
16
+ unless @login_url = version_info && version_info['LoginUrl']
17
+ # no LoginUrl matches specified version
17
18
  raise "TerremarkEcloud does not support version #{@version}"
18
19
  end
20
+ response
19
21
  end
20
22
 
21
23
  end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module TerremarkEcloud
3
+ class Compute
4
+ class Real
5
+
6
+ require 'fog/compute/parsers/terremark_ecloud/login'
7
+
8
+ def login
9
+ unless @login_url
10
+ get_versions
11
+ end
12
+ connection = Fog::Connection.new(@login_url)
13
+ response = connection.request({
14
+ :expects => 200,
15
+ :method => 'POST',
16
+ :headers => {
17
+ 'Authorization' => ('Basic ' << Base64.encode64("#{@username}:#{@password}").chomp!),
18
+ 'Content-Type' => 'application/vnd.vmware.vcloud.orgList+xml'
19
+ },
20
+ :parser => Fog::Parsers::TerremarkEcloud::Compute::Login.new
21
+ })
22
+ @token = response.headers['Set-Cookie']
23
+ response
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
@@ -10,10 +10,15 @@ module Fog
10
10
  request_path 'fog/compute/requests/terremark_ecloud'
11
11
  request :get_catalog
12
12
  request :get_catalog_item
13
+ request :get_ip_address
13
14
  request :get_ip_addresses
14
15
  request :get_network
15
16
  request :get_organization
17
+ request :get_task
18
+ request :get_task_list
19
+ request :get_versions
16
20
  request :get_vdc
21
+ request :login
17
22
 
18
23
  class Mock
19
24
 
@@ -36,6 +41,7 @@ module Fog
36
41
  @password = options[:terremark_ecloud_password]
37
42
  @version = '0.8b-ext2.6'
38
43
  @versions_endpoint = options[:versions_endpoint] || 'https://services.enterprisecloud.terremark.com/api/versions'
44
+ @connection = Fog::Connection.new(@versions_endpoint, options[:persistent])
39
45
  end
40
46
 
41
47
  def organization_href
@@ -54,14 +60,16 @@ module Fog
54
60
  end
55
61
 
56
62
  begin
57
- Fog::Connection.new(params[:href]).request({
58
- :parser => params[:parser],
59
- :expects => params[:expects] || 200,
60
- :method => params[:method] || 'GET',
61
- :body => params[:body],
62
- :headers => {
63
+ uri = URI.parse(params.delete(:href))
64
+ @connection.request({
65
+ :body => params[:body],
66
+ :expects => params[:expects] || 200,
67
+ :headers => {
63
68
  'Cookie' => @token
64
- }.merge(params[:headers] || {})
69
+ }.merge(params[:headers] || {}),
70
+ :method => params[:method] || 'GET',
71
+ :parser => params[:parser],
72
+ :path => uri.path
65
73
  })
66
74
  rescue Excon::Errors::Unauthorized # expired token
67
75
  get_token_and_organization
@@ -72,33 +80,9 @@ module Fog
72
80
  private
73
81
 
74
82
  def get_token_and_organization
75
- # lookup LoginUrl for specified version
76
- connection = Fog::Connection.new(@versions_endpoint)
77
- response = connection.request({
78
- :expects => 200,
79
- :method => 'GET',
80
- :parser => Fog::Parsers::TerremarkEcloud::Compute::GetVersions.new
81
- });
82
- version_info = response.body['SupportedVersions'].detect {|version_info| version_info['Version'] == @version}
83
- unless login_url = version_info && version_info['LoginUrl']
84
- # no LoginUrl matches specified version
85
- raise "TerremarkEcloud does not support version #{@version}"
86
- end
87
-
88
- connection = Fog::Connection.new(login_url)
89
- response = connection.request({
90
- :expects => 200,
91
- :method => 'POST',
92
- :headers => {
93
- 'Authorization' => ('Basic ' << Base64.encode64("#{@username}:#{@password}").chomp!),
94
- 'Content-Type' => 'application/vnd.vmware.vcloud.orgList+xml'
95
- },
96
- :parser => Fog::Parsers::TerremarkEcloud::Compute::Login.new
97
- })
98
-
99
- @token = response.headers['Set-Cookie']
100
-
101
- if organization = response.body['OrgList'].first
83
+ response = self.login
84
+ # if there is only one organization we will note it as a starting point
85
+ if (response.body['OrgList'].length == 1) && (organization = response.body['OrgList'].first)
102
86
  @organization_href = organization['href']
103
87
  end
104
88
  end
@@ -113,7 +113,7 @@ module Fog
113
113
 
114
114
  module InstanceMethods
115
115
 
116
- def _dump
116
+ def _dump(level)
117
117
  Marshal.dump(attributes)
118
118
  end
119
119
 
@@ -113,6 +113,7 @@ module Fog
113
113
  end
114
114
 
115
115
  def to_json
116
+ require 'json'
116
117
  self.map {|member| member.attributes}.to_json
117
118
  end
118
119
 
@@ -33,7 +33,7 @@ module Fog
33
33
  @credentials ||= begin
34
34
  if File.exists?(credentials_path)
35
35
  credentials = YAML.load_file(credentials_path)
36
- (credentials && credentials[credential]) or raise LoadError.new missing_credentials
36
+ (credentials && credentials[credential]) or raise LoadError.new(missing_credentials)
37
37
  else
38
38
  {}
39
39
  end
@@ -33,6 +33,7 @@ module Fog
33
33
  end
34
34
 
35
35
  def to_json
36
+ require 'json'
36
37
  attributes.to_json
37
38
  end
38
39
 
@@ -92,7 +92,10 @@ module Fog
92
92
  @port = options[:port] || 443
93
93
  @scheme = options[:scheme] || 'https'
94
94
  @version = options[:version] || '2010-10-01'
95
- @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent] || true)
95
+ unless options.has_key?(:persistent)
96
+ options[:persistent] = true
97
+ end
98
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent])
96
99
  end
97
100
 
98
101
  def reload
@@ -99,7 +99,6 @@ module Fog
99
99
  query << "AWSAccessKeyId=#{@aws_access_key_id}"
100
100
  query << "Signature=#{CGI.escape(signature(params))}"
101
101
  query << "Expires=#{params[:headers]['Date']}"
102
- bucket = params[:host].split('.').first
103
102
  "https://#{@host}/#{params[:path]}?#{query.join('&')}"
104
103
  end
105
104
 
@@ -221,7 +220,6 @@ module Fog
221
220
  end
222
221
  end
223
222
 
224
-
225
223
  class Real
226
224
  include Utils
227
225
  extend Fog::Deprecation
@@ -278,8 +276,11 @@ module Fog
278
276
  @path = options[:path] || '/'
279
277
  @port = options[:port] || 443
280
278
  @scheme = options[:scheme] || 'https'
279
+ unless options.has_key?(:persistent)
280
+ options[:persistent] = true
281
+ end
281
282
  end
282
- @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent] || true)
283
+ @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent])
283
284
  end
284
285
 
285
286
  def reload