bbcloud 0.10.1 → 0.11.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.
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