bbcloud 0.10.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/bbcloud.gemspec +2 -2
  2. data/lib/bbcloud/api.rb +1 -1
  3. data/lib/bbcloud/cli.rb +8 -2
  4. data/lib/bbcloud/commands/servers-activate-cloud.rb +23 -0
  5. data/lib/bbcloud/commands/types-list.rb +1 -1
  6. data/lib/bbcloud/config.rb +1 -0
  7. data/lib/bbcloud/servers.rb +4 -0
  8. data/lib/bbcloud/types.rb +8 -0
  9. data/lib/bbcloud/vendor/fog/lib/fog/compute/brightbox.rb +162 -0
  10. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/account.rb +51 -0
  11. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/cloud_ip.rb +47 -0
  12. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/cloud_ips.rb +34 -0
  13. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/flavor.rb +33 -0
  14. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/flavors.rb +28 -0
  15. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/image.rb +56 -0
  16. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/images.rb +28 -0
  17. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/load_balancer.rb +50 -0
  18. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/load_balancers.rb +28 -0
  19. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/server.rb +108 -0
  20. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/servers.rb +29 -0
  21. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/user.rb +39 -0
  22. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/users.rb +29 -0
  23. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/zone.rb +21 -0
  24. data/lib/bbcloud/vendor/fog/lib/fog/compute/models/brightbox/zones.rb +29 -0
  25. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/activate_console_server.rb +20 -0
  26. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/add_listeners_load_balancer.rb +20 -0
  27. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/add_nodes_load_balancer.rb +20 -0
  28. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_api_client.rb +19 -0
  29. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_cloud_ip.rb +19 -0
  30. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_image.rb +19 -0
  31. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_load_balancer.rb +19 -0
  32. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/create_server.rb +19 -0
  33. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_api_client.rb +20 -0
  34. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_cloud_ip.rb +20 -0
  35. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_image.rb +20 -0
  36. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_load_balancer.rb +20 -0
  37. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/destroy_server.rb +20 -0
  38. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_account.rb +19 -0
  39. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_api_client.rb +20 -0
  40. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_cloud_ip.rb +20 -0
  41. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_image.rb +20 -0
  42. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_interface.rb +20 -0
  43. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_load_balancer.rb +20 -0
  44. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_server.rb +20 -0
  45. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_server_type.rb +20 -0
  46. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_user.rb +20 -0
  47. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/get_zone.rb +20 -0
  48. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_api_clients.rb +19 -0
  49. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_cloud_ips.rb +19 -0
  50. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_images.rb +19 -0
  51. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_load_balancers.rb +19 -0
  52. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_server_types.rb +19 -0
  53. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_servers.rb +19 -0
  54. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_users.rb +19 -0
  55. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/list_zones.rb +19 -0
  56. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/map_cloud_ip.rb +20 -0
  57. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/remove_listeners_load_balancer.rb +20 -0
  58. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/remove_nodes_load_balancer.rb +20 -0
  59. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/reset_ftp_password_account.rb +19 -0
  60. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/resize_server.rb +19 -0
  61. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/shutdown_server.rb +20 -0
  62. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/snapshot_server.rb +20 -0
  63. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/start_server.rb +20 -0
  64. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/stop_server.rb +20 -0
  65. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/unmap_cloud_ip.rb +20 -0
  66. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_account.rb +20 -0
  67. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_api_client.rb +21 -0
  68. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_image.rb +21 -0
  69. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_load_balancer.rb +21 -0
  70. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_server.rb +21 -0
  71. data/lib/bbcloud/vendor/fog/lib/fog/compute/requests/brightbox/update_user.rb +21 -0
  72. data/lib/bbcloud/vendor/fog/lib/fog/compute.rb +43 -0
  73. data/lib/bbcloud/vendor/fog/lib/fog/core/attributes.rb +178 -0
  74. data/lib/bbcloud/vendor/fog/lib/fog/core/collection.rb +127 -0
  75. data/lib/bbcloud/vendor/fog/lib/fog/core/connection.rb +35 -0
  76. data/lib/bbcloud/vendor/fog/lib/fog/core/credentials.rb +92 -0
  77. data/lib/bbcloud/vendor/fog/lib/fog/core/deprecation.rb +23 -0
  78. data/lib/bbcloud/vendor/fog/lib/fog/core/errors.rb +20 -0
  79. data/lib/bbcloud/vendor/fog/lib/fog/core/hmac.rb +48 -0
  80. data/lib/bbcloud/vendor/fog/lib/fog/core/mock.rb +68 -0
  81. data/lib/bbcloud/vendor/fog/lib/fog/core/model.rb +57 -0
  82. data/lib/bbcloud/vendor/fog/lib/fog/core/parser.rb +99 -0
  83. data/lib/bbcloud/vendor/fog/lib/fog/core/provider.rb +18 -0
  84. data/lib/bbcloud/vendor/fog/lib/fog/core/scp.rb +67 -0
  85. data/lib/bbcloud/vendor/fog/lib/fog/core/service.rb +175 -0
  86. data/lib/bbcloud/vendor/fog/lib/fog/core/ssh.rb +120 -0
  87. data/lib/bbcloud/vendor/fog/lib/fog/core/time.rb +27 -0
  88. data/lib/bbcloud/vendor/fog/lib/fog/core/wait_for.rb +17 -0
  89. data/lib/bbcloud/vendor/fog/lib/fog/core.rb +32 -0
  90. data/lib/bbcloud/vendor/fog/lib/fog/providers/brightbox.rb +9 -0
  91. data/lib/bbcloud/vendor/fog/lib/fog/providers.rb +9 -0
  92. data/lib/bbcloud/vendor/fog/lib/fog.rb +14 -0
  93. data/lib/bbcloud/version.rb +1 -1
  94. metadata +105 -26
@@ -0,0 +1,99 @@
1
+ require 'nokogiri'
2
+
3
+ module Fog
4
+ module Parsers
5
+ class Base < Nokogiri::XML::SAX::Document
6
+
7
+ attr_reader :response
8
+
9
+ def initialize
10
+ reset
11
+ end
12
+
13
+ def reset
14
+ @response = {}
15
+ end
16
+
17
+ def characters(string)
18
+ @value ||= ''
19
+ @value << string.strip
20
+ end
21
+
22
+ def start_element(name, attrs = [])
23
+ @value = nil
24
+ end
25
+
26
+ def attr_value(name, attrs)
27
+ (entry = attrs.detect {|a, v| a == name }) && entry.last
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+
34
+ module Fog
35
+ class ToHashDocument < Nokogiri::XML::SAX::Document
36
+
37
+ def initialize
38
+ @stack = []
39
+ end
40
+
41
+ def characters(string)
42
+ @value ||= ''
43
+ @value << string.strip
44
+ end
45
+
46
+ def end_element(name)
47
+ last = @stack.pop
48
+ if last.empty? && @value.empty?
49
+ @stack.last[name.to_sym] = ''
50
+ elsif last == {:i_nil=>"true"}
51
+ @stack.last[name.to_sym] = nil
52
+ elsif !@value.empty?
53
+ @stack.last[name.to_sym] = @value
54
+ end
55
+ @value = ''
56
+ end
57
+
58
+ def body
59
+ @stack.first
60
+ end
61
+
62
+ def response
63
+ body
64
+ end
65
+
66
+ def start_element(name, attributes = [])
67
+ @value = ''
68
+ parsed_attributes = {}
69
+ until attributes.empty?
70
+ if attributes.first.is_a?(Array)
71
+ key, value = attributes.shift
72
+ else
73
+ key, value = attributes.shift, attributes.shift
74
+ end
75
+ parsed_attributes[key.gsub(':','_').to_sym] = value
76
+ end
77
+ if @stack.last.is_a?(Array)
78
+ @stack.last << {name.to_sym => parsed_attributes}
79
+ else
80
+ data = if @stack.empty?
81
+ @stack.push(parsed_attributes)
82
+ parsed_attributes
83
+ elsif @stack.last[name.to_sym]
84
+ unless @stack.last[name.to_sym].is_a?(Array)
85
+ @stack.last[name.to_sym] = [@stack.last[name.to_sym]]
86
+ end
87
+ @stack.last[name.to_sym] << parsed_attributes
88
+ @stack.last[name.to_sym].last
89
+ else
90
+ @stack.last[name.to_sym] = {}
91
+ @stack.last[name.to_sym].merge!(parsed_attributes)
92
+ @stack.last[name.to_sym]
93
+ end
94
+ @stack.push(data)
95
+ end
96
+ end
97
+
98
+ end
99
+ end
@@ -0,0 +1,18 @@
1
+ module Fog
2
+ module Provider
3
+
4
+ def self.extended(base)
5
+ Fog.providers << base.to_s.split('::').last
6
+ end
7
+
8
+ def service(new_service, path)
9
+ services << new_service
10
+ require File.join('fog', path)
11
+ end
12
+
13
+ def services
14
+ @services ||= []
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,67 @@
1
+ module Fog
2
+ module SCP
3
+
4
+ def self.new(address, username, options = {})
5
+ if Fog.mocking?
6
+ Fog::SCP::Mock.new(address, username, options)
7
+ else
8
+ Fog::SCP::Real.new(address, username, options)
9
+ end
10
+ end
11
+
12
+ def self.reset_data(keys=Mock.data.keys)
13
+ Mock.reset_data(keys)
14
+ end
15
+
16
+ class Mock
17
+
18
+ def self.data
19
+ @data ||= Hash.new do |hash, key|
20
+ hash[key] = {}
21
+ end
22
+ end
23
+
24
+ def initialize(address, username, options)
25
+ @address = address
26
+ @username = username
27
+ @options = options
28
+ end
29
+
30
+ def upload(local_path, remote_path)
31
+ Fog::Mock.not_implemented
32
+ end
33
+
34
+ end
35
+
36
+ class Real
37
+
38
+ def initialize(address, username, options)
39
+ require 'net/scp'
40
+
41
+ key_manager = Net::SSH::Authentication::KeyManager.new(nil, options)
42
+
43
+ unless options[:key_data] || options[:keys] || options[:password] || key_manager.agent
44
+ raise ArgumentError.new(':key_data, :keys, :password or a loaded ssh-agent is required to initialize SSH')
45
+ end
46
+
47
+ @address = address
48
+ @username = username
49
+ @options = { :paranoid => false }.merge(options)
50
+ end
51
+
52
+ def upload(local_path, remote_path)
53
+ begin
54
+ Net::SCP.start(@address, @username, @options) do |scp|
55
+ scp.upload!(local_path, remote_path) do |ch, name, sent, total|
56
+ # TODO: handle progress display?
57
+ end
58
+ end
59
+ rescue Exception => error
60
+ raise error
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,175 @@
1
+ module Fog
2
+ class Service
3
+
4
+ class Error < Fog::Errors::Error; end
5
+ class NotFound < Fog::Errors::NotFound; end
6
+
7
+ module Collections
8
+
9
+ def collections
10
+ service.collections
11
+ end
12
+
13
+ def mocked_requests
14
+ service.mocked_requests
15
+ end
16
+
17
+ def requests
18
+ service.requests
19
+ end
20
+
21
+ end
22
+
23
+ class << self
24
+
25
+ def inherited(child)
26
+ child.class_eval <<-EOS, __FILE__, __LINE__
27
+ module Collections
28
+ include Fog::Service::Collections
29
+
30
+ def service
31
+ #{child}
32
+ end
33
+ end
34
+
35
+ def self.service
36
+ #{child}
37
+ end
38
+ EOS
39
+ end
40
+
41
+ def new(options={})
42
+ # attempt to load credentials from config file
43
+ begin
44
+ default_credentials = Fog.credentials.reject {|key, value| !(recognized | requirements).include?(key)}
45
+ options = default_credentials.merge(options)
46
+ rescue LoadError
47
+ # if there are no configured credentials, do nothing
48
+ end
49
+
50
+ validate_options(options)
51
+ setup_requirements
52
+
53
+ if Fog.mocking?
54
+ service::Mock.send(:include, service::Collections)
55
+ service::Mock.new(options)
56
+ else
57
+ service::Real.send(:include, service::Collections)
58
+ service::Real.new(options)
59
+ end
60
+ end
61
+
62
+ def setup_requirements
63
+ if superclass.respond_to?(:setup_requirements)
64
+ superclass.setup_requirements
65
+ end
66
+
67
+ @required ||= false
68
+ unless @required
69
+ for collection in collections
70
+ require [@model_path, collection].join('/')
71
+ constant = collection.to_s.split('_').map {|characters| characters[0...1].upcase << characters[1..-1]}.join('')
72
+ service::Collections.module_eval <<-EOS, __FILE__, __LINE__
73
+ def #{collection}(attributes = {})
74
+ #{service}::#{constant}.new({:connection => self}.merge(attributes))
75
+ end
76
+ EOS
77
+ end
78
+ for model in models
79
+ require [@model_path, model].join('/')
80
+ end
81
+ for request in requests
82
+ require [@request_path, request].join('/')
83
+ if service::Mock.method_defined?(request)
84
+ mocked_requests << request
85
+ else
86
+ service::Mock.module_eval <<-EOS, __FILE__, __LINE__
87
+ def #{request}(*args)
88
+ Fog::Mock.not_implemented
89
+ end
90
+ EOS
91
+ end
92
+ end
93
+ @required = true
94
+ end
95
+ end
96
+
97
+ def model_path(new_path)
98
+ @model_path = new_path
99
+ end
100
+
101
+ def collection(new_collection)
102
+ collections << new_collection
103
+ end
104
+
105
+ def collections
106
+ @collections ||= []
107
+ end
108
+
109
+ def mocked_requests
110
+ @mocked_requests ||= []
111
+ end
112
+
113
+ def model(new_model)
114
+ models << new_model
115
+ end
116
+
117
+ def models
118
+ @models ||= []
119
+ end
120
+
121
+ def request_path(new_path)
122
+ @request_path = new_path
123
+ end
124
+
125
+ def request(new_request)
126
+ requests << new_request
127
+ end
128
+
129
+ def requests
130
+ @requests ||= []
131
+ end
132
+
133
+ def requires(*args)
134
+ requirements.concat(args)
135
+ end
136
+
137
+ def requirements
138
+ @requirements ||= []
139
+ end
140
+
141
+ def recognizes(*args)
142
+ recognized.concat(args)
143
+ end
144
+
145
+ def recognized
146
+ @recognized ||= []
147
+ end
148
+
149
+ def reset_data(keys=Mock.data.keys)
150
+ Mock.reset_data(keys)
151
+ end
152
+
153
+ def reset_data(keys=Mock.data.keys)
154
+ Mock.reset_data(keys)
155
+ end
156
+
157
+ def validate_options(options)
158
+ missing = requirements - options.keys
159
+ unless missing.empty?
160
+ raise ArgumentError, "Missing required arguments: #{missing.join(', ')}"
161
+ end
162
+
163
+ unless recognizes.empty?
164
+ unrecognized = options.keys - requirements - recognized
165
+ unless unrecognized.empty?
166
+ raise ArgumentError, "Unrecognized arguments: #{unrecognized.join(', ')}"
167
+ end
168
+ end
169
+ end
170
+
171
+ end
172
+
173
+ end
174
+ end
175
+
@@ -0,0 +1,120 @@
1
+ module Fog
2
+ module SSH
3
+
4
+ def self.new(address, username, options = {})
5
+ if Fog.mocking?
6
+ Fog::SSH::Mock.new(address, username, options)
7
+ else
8
+ Fog::SSH::Real.new(address, username, options)
9
+ end
10
+ end
11
+
12
+ def self.reset_data(keys=Mock.data.keys)
13
+ Mock.reset_data(keys)
14
+ end
15
+
16
+ class Mock
17
+
18
+ def self.data
19
+ @data ||= Hash.new do |hash, key|
20
+ hash[key] = {}
21
+ end
22
+ end
23
+
24
+ def initialize(address, username, options)
25
+ @address = address
26
+ @username = username
27
+ @options = options
28
+ end
29
+
30
+ def run(commands)
31
+ Fog::Mock.not_implemented
32
+ end
33
+
34
+ end
35
+
36
+ class Real
37
+
38
+ def initialize(address, username, options)
39
+ require 'net/ssh'
40
+
41
+ key_manager = Net::SSH::Authentication::KeyManager.new(nil, options)
42
+
43
+ unless options[:key_data] || options[:keys] || options[:password] || key_manager.agent
44
+ raise ArgumentError.new(':key_data, :keys, :password or a loaded ssh-agent is required to initialize SSH')
45
+ end
46
+
47
+ @address = address
48
+ @username = username
49
+ @options = { :paranoid => false }.merge(options)
50
+ end
51
+
52
+ def run(commands)
53
+ commands = [*commands]
54
+ results = []
55
+ begin
56
+ Net::SSH.start(@address, @username, @options) do |ssh|
57
+ commands.each do |command|
58
+ escaped_command = command.sub(/'/, %{'"'"'})
59
+ result = Result.new(escaped_command)
60
+ ssh.open_channel do |ssh_channel|
61
+ ssh_channel.request_pty
62
+ ssh_channel.exec(%{bash -lc '#{escaped_command}'}) do |channel, success|
63
+ unless success
64
+ raise "Could not execute command: #{command.inspect}"
65
+ end
66
+
67
+ channel.on_data do |ch, data|
68
+ result.stdout << data
69
+ end
70
+
71
+ channel.on_extended_data do |ch, type, data|
72
+ next unless type == 1
73
+ result.stderr << data
74
+ end
75
+
76
+ channel.on_request('exit-status') do |ch, data|
77
+ result.status = data.read_long
78
+ end
79
+
80
+ channel.on_request('exit-signal') do |ch, data|
81
+ result.status = 255
82
+ end
83
+ end
84
+ end
85
+ ssh.loop
86
+ results << result
87
+ end
88
+ end
89
+ rescue Net::SSH::HostKeyMismatch => exception
90
+ exception.remember_host!
91
+ sleep 0.2
92
+ retry
93
+ end
94
+ results
95
+ end
96
+
97
+ end
98
+
99
+ class Result
100
+
101
+ attr_accessor :command, :stderr, :stdout, :status
102
+
103
+ def display_stdout
104
+ Formatador.display_line(stdout.split("\r\n"))
105
+ end
106
+
107
+ def display_stderr
108
+ Formatador.display_line(stderr.split("\r\n"))
109
+ end
110
+
111
+ def initialize(command)
112
+ @command = command
113
+ @stderr = ''
114
+ @stdout = ''
115
+ end
116
+
117
+ end
118
+
119
+ end
120
+ end
@@ -0,0 +1,27 @@
1
+ module Fog
2
+ class Time < ::Time
3
+
4
+ DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
5
+ MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
6
+
7
+ def self.now
8
+ at((::Time.now - offset).to_i)
9
+ end
10
+
11
+ def self.now=(new_now)
12
+ old_now = ::Time.now
13
+ @offset = old_now - new_now
14
+ new_now
15
+ end
16
+
17
+ def self.offset
18
+ @offset ||= 0
19
+ end
20
+
21
+ def to_date_header
22
+ now = self.class.now.utc
23
+ now.strftime("#{DAYS[now.wday]}, %d #{MONTHS[now.month - 1]} %Y %H:%M:%S +0000")
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ module Fog
2
+
3
+ def self.wait_for(timeout=600, interval=1, &block)
4
+ duration = 0
5
+ start = Time.now
6
+ until yield || duration > timeout
7
+ sleep(interval)
8
+ duration = Time.now - start
9
+ end
10
+ if duration > timeout
11
+ false
12
+ else
13
+ { :duration => duration }
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,32 @@
1
+ __LIB_DIR__ = File.expand_path(File.join(File.dirname(__FILE__), '..'))
2
+
3
+ $LOAD_PATH.unshift __LIB_DIR__ unless
4
+ $LOAD_PATH.include?(__LIB_DIR__) ||
5
+ $LOAD_PATH.include?(File.expand_path(__LIB_DIR__))
6
+
7
+ # external core dependencies
8
+ require 'rubygems'
9
+ require 'base64'
10
+ require 'cgi'
11
+ require 'excon'
12
+ require 'formatador'
13
+ require 'time'
14
+ require 'timeout'
15
+
16
+ # internal core dependencies
17
+ require 'fog/core/attributes'
18
+ require 'fog/core/collection'
19
+ require 'fog/core/connection'
20
+ require 'fog/core/credentials'
21
+ require 'fog/core/deprecation'
22
+ require 'fog/core/errors'
23
+ require 'fog/core/hmac'
24
+ require 'fog/core/model'
25
+ require 'fog/core/mock'
26
+ # require 'fog/core/parser'
27
+ require 'fog/core/provider'
28
+ require 'fog/core/service'
29
+ require 'fog/core/ssh'
30
+ require 'fog/core/scp'
31
+ require 'fog/core/time'
32
+ require 'fog/core/wait_for'
@@ -0,0 +1,9 @@
1
+ require 'fog/core'
2
+
3
+ module Fog
4
+ module Brightbox
5
+ extend Fog::Provider
6
+
7
+ service(:compute, 'compute/brightbox')
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Fog
2
+
3
+ def self.providers
4
+ @providers ||= []
5
+ end
6
+
7
+ end
8
+
9
+ require 'fog/providers/brightbox'
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__), 'fog', 'core')
2
+
3
+ module Fog
4
+
5
+ unless const_defined?(:VERSION)
6
+ VERSION = '0.6.0'
7
+ end
8
+
9
+ end
10
+
11
+ # FIXME: these should go away (force usage of Fog::[Compute, CDN, DNS, Storage] etc)
12
+ require 'fog/providers'
13
+
14
+ require 'fog/compute'
@@ -1,3 +1,3 @@
1
1
  module Brightbox
2
- VERSION = "0.10.1"
2
+ VERSION = "0.11.0"
3
3
  end