brightbox-cli 0.17.5 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,8 +30,8 @@ Gem::Specification.new do |s|
30
30
  s.add_dependency('hirb','~> 0.6.0')
31
31
 
32
32
  s.add_development_dependency('rake', '~> 0.8.0')
33
- s.add_development_dependency('vcr')
34
- s.add_development_dependency('rspec')
33
+ s.add_development_dependency('vcr', '~> 1.11.3')
34
+ s.add_development_dependency('rspec', '~> 2.8.0')
35
35
  s.add_development_dependency('mocha')
36
36
  end
37
37
 
@@ -8,15 +8,33 @@ module Brightbox
8
8
  conn.cloud_ips
9
9
  end
10
10
 
11
- def self.create
12
- r = conn.create_cloud_ip
11
+ def self.create(options = {})
12
+ create_options = {}
13
+ if options[:t]
14
+ create_options[:port_translators] = format_translators_for_api(options[:t])
15
+ end
16
+
17
+ if options[:n] && !options[:name].empty?
18
+ create_options[:name] = options[:n]
19
+ end
20
+ r = conn.create_cloud_ip(create_options)
13
21
  new(r["id"])
14
22
  end
15
23
 
24
+ def self.format_translators_for_api(translators)
25
+ translators.split(",").map do |t|
26
+ incoming,outgoing,protocol = t.split(":")
27
+ raise "translator #{t} is invalid" if incoming.nil? || outgoing.nil? || protocol.nil?
28
+ {:incoming => incoming, :outgoing => outgoing, :protocol => protocol}
29
+ end
30
+ end
31
+
16
32
  def attributes
17
33
  a = fog_model.attributes
18
34
  if(lb_id = a[:load_balancer] || a["load_balancer"])
19
35
  a[:destination] = lb_id
36
+ elsif(server_group_id = a[:server_group] || a["server_group"])
37
+ a[:destination] = server_group
20
38
  else
21
39
  a[:destination] = a[:server_id]
22
40
  end
@@ -24,15 +42,25 @@ module Brightbox
24
42
  end
25
43
 
26
44
  def to_row
27
- attributes
45
+ o = attributes
46
+ o[:port_translators] = translators(o)
47
+ o
28
48
  end
29
49
 
30
50
  def mapped?
31
51
  status == 'mapped'
32
52
  end
33
53
 
54
+ def translators(raw_attributes)
55
+ if translators = (raw_attributes[:port_translators] || raw_attributes['port_translators'])
56
+ translators.map {|t| [t['incoming'],t['outgoing'],t['protocol']].join(":") }
57
+ else
58
+ nil
59
+ end
60
+ end
61
+
34
62
  def self.default_field_order
35
- [:id, :status, :public_ip, :destination, :reverse_dns]
63
+ [:id, :status, :public_ip, :destination, :reverse_dns, :name]
36
64
  end
37
65
 
38
66
  def <=>(b)
@@ -40,7 +68,24 @@ module Brightbox
40
68
  end
41
69
 
42
70
  def update(options)
43
- self.class.conn.update_cloud_ip(id, options)
71
+ params = {}
72
+ if options[:r]
73
+ params[:reverse_dns] = options[:r]
74
+ end
75
+
76
+ if options[:"delete-reverse-dns"]
77
+ params[:reverse_dns] = ""
78
+ end
79
+
80
+ if options[:n] && !options[:name].empty?
81
+ params[:name] = options[:n]
82
+ end
83
+
84
+ if options[:t]
85
+ params[:port_translators] = CloudIP.format_translators_for_api(options[:t])
86
+ end
87
+
88
+ self.class.conn.update_cloud_ip(id, params)
44
89
  self.reload
45
90
  self
46
91
  end
@@ -1,10 +1,16 @@
1
1
  module Brightbox
2
- desc 'Create a new cloud ip'
2
+ desc 'Create a new Cloud IP address'
3
3
  command [:create] do |c|
4
- c.desc "Number of cloud ips to create"
4
+ c.desc "Number of Cloud IPs to create"
5
5
  c.default_value 1
6
6
  c.flag [:i, "count"]
7
7
 
8
+ c.desc "Friendly name of the Cloud IP"
9
+ c.flag [:n, :name]
10
+
11
+ c.desc "Cloud IP translators. Format: in-port:out-port:protocol. Comma separate multiple translators. Protocol can be tcp or udp."
12
+ c.flag [:t, :'port-translators']
13
+
8
14
  c.action do |global_options, options, args|
9
15
 
10
16
  if options[:i].to_s !~ /^[0-9]+$/
@@ -15,7 +21,7 @@ module Brightbox
15
21
 
16
22
  ips = []
17
23
  options[:i].times do
18
- ips << CloudIP.create
24
+ ips << CloudIP.create(options)
19
25
  end
20
26
  render_table(ips, global_options)
21
27
  end
@@ -2,24 +2,24 @@ module Brightbox
2
2
  desc 'destroy Cloud IPs'
3
3
  arg_name '[cloudip-id...]'
4
4
  command [:destroy] do |c|
5
- c.desc "Unmap mapped ips before destroying them"
5
+ c.desc "Unmap mapped IPs before destroying them"
6
6
  c.switch [:u, "unmap"]
7
7
 
8
8
  c.action do |global_options,options,args|
9
9
 
10
10
  if args.empty?
11
- raise "You must specify the cloud ips you want to destroy"
11
+ raise "You must specify the Cloud IPs you want to destroy"
12
12
  end
13
13
 
14
14
  ips = CloudIP.find_or_call(args) do |id|
15
- raise "Couldn't find cloud ip #{id}"
15
+ raise "Couldn't find Cloud IP #{id}"
16
16
  end
17
17
 
18
18
  ips.each do |ip|
19
19
 
20
20
  if ip.mapped?
21
21
  if options[:u]
22
- info "Unmapping cloud ip #{ip}"
22
+ info "Unmapping Cloud IP #{ip}"
23
23
  ip.unmap
24
24
  3.times do
25
25
  break unless ip.mapped?
@@ -27,10 +27,10 @@ module Brightbox
27
27
  ip.reload
28
28
  end
29
29
  else
30
- raise "Cannot destroy mapped cloud ip #{ip}"
30
+ raise "Cannot destroy mapped Cloud IP #{ip}"
31
31
  end
32
32
  end
33
- info "Destroying cloud ip #{ip}"
33
+ info "Destroying Cloud IP #{ip}"
34
34
  ip.destroy
35
35
  end
36
36
 
@@ -1,5 +1,5 @@
1
1
  module Brightbox
2
- desc 'List CloudIPs'
2
+ desc 'List Cloud IPs'
3
3
  arg_name '[cloudip-id...]'
4
4
  command [:list] do |c|
5
5
 
@@ -9,7 +9,7 @@ module Brightbox
9
9
  ips = CloudIP.find(:all)
10
10
  else
11
11
  ips = CloudIP.find_or_call(args) do |id|
12
- warn "Couldn't find cloud ip #{id}"
12
+ warn "Couldn't find Cloud IP #{id}"
13
13
  end
14
14
  end
15
15
 
@@ -2,7 +2,7 @@ module Brightbox
2
2
  desc 'map Cloud IPs'
3
3
  arg_name 'cloudip-id destination'
4
4
  command [:map] do |c|
5
- c.desc "Unmap mapped ips before remapping them"
5
+ c.desc "Unmap mapped IPs before remapping them"
6
6
  c.switch [:u, "unmap"]
7
7
 
8
8
  c.action do |global_options,options,args|
@@ -28,6 +28,9 @@ module Brightbox
28
28
  when /^lba\-/
29
29
  lb = LoadBalancer.find destination_id
30
30
  info "Mapping #{ip} to load balancer #{lb}"
31
+ when /grp\-/
32
+ group = ServerGroup.find destination_id
33
+ info "Mapping #{ip} to server group #{group}"
31
34
  else
32
35
  raise "Unknown destination '#{destination_id}'"
33
36
  end
@@ -41,7 +44,7 @@ module Brightbox
41
44
  ip.reload
42
45
  end
43
46
  else
44
- raise "Refusing to map already mapped ip #{ip}"
47
+ raise "Refusing to map already mapped IP #{ip}"
45
48
  end
46
49
  end
47
50
 
@@ -10,10 +10,10 @@ module Brightbox
10
10
  end
11
11
 
12
12
  ips = CloudIP.find_or_call(args) do |id|
13
- warn "Couldn't find cloud ip #{id}"
13
+ warn "Couldn't find Cloud IP #{id}"
14
14
  end
15
15
 
16
- fields = [:id, :status, :public_ip, :reverse_dns, :destination, :interface_id]
16
+ fields = [:id, :name, :reverse_dns, :status, :public_ip, :reverse_dns, :destination, :interface_id, :port_translators]
17
17
 
18
18
  render_table(ips.compact, global_options.merge({ :vertical => true, :fields => fields}))
19
19
  end
@@ -6,20 +6,20 @@ module Brightbox
6
6
  c.action do |global_options,options,args|
7
7
 
8
8
  if args.empty?
9
- raise "You must specify the cloud ips you want to unmap"
9
+ raise "You must specify the Cloud IPs you want to unmap"
10
10
  end
11
11
 
12
12
  ips = CloudIP.find_or_call(args) do |id|
13
- raise "Couldn't find cloud ip #{id}"
13
+ raise "Couldn't find Cloud IP #{id}"
14
14
  end
15
15
 
16
16
  ips.each do |ip|
17
17
  if ip.mapped?
18
- info "Unmapping cloud ip #{ip}"
18
+ info "Unmapping Cloud IP #{ip}"
19
19
  ip.unmap
20
20
  ip.reload
21
21
  else
22
- warn "Cloud ip #{ip} already unmapped"
22
+ warn "Cloud IP #{ip} already unmapped"
23
23
  end
24
24
  end
25
25
 
@@ -2,15 +2,21 @@ module Brightbox
2
2
  desc 'update Cloud IPs'
3
3
  arg_name 'cloudip-id'
4
4
  command [:update] do |c|
5
- c.desc "Set reverse DNS for this cloud ip"
5
+ c.desc "Set reverse DNS for this Cloud IP"
6
6
  c.flag [:r, "reverse-dns"]
7
7
 
8
- c.desc "Delete the reverse DNS for this cloud ip"
8
+ c.desc "Delete the reverse DNS for this Cloud IP"
9
9
  c.switch ["delete-reverse-dns"]
10
10
 
11
+ c.desc "Friendly name of the Cloud IP"
12
+ c.flag [:n, :name]
13
+
14
+ c.desc "Cloud IP translators. Format: in-port:out-port:protocol. Comma separate multiple translators. Protocol can be tcp or udp."
15
+ c.flag [:t, :'port-translators']
16
+
11
17
  c.action do |global_options,options,args|
12
18
  cip_id = args.shift
13
- raise "You must specify the cloud ip id as the first argument" unless cip_id =~ /^cip-/
19
+ raise "You must specify the Cloud IP id as the first argument" unless cip_id =~ /^cip-/
14
20
 
15
21
  if options[:r] && options[:r] != "" && options[:"delete-reverse-dns"]
16
22
  raise "You must either specify a reverse DNS record or --delete-reverse-dns"
@@ -18,16 +24,8 @@ module Brightbox
18
24
 
19
25
  cip = CloudIP.find cip_id
20
26
 
21
- params = {}
22
- if options[:r]
23
- params[:reverse_dns] = options[:r]
24
- end
25
-
26
- if options[:"delete-reverse-dns"]
27
- params[:reverse_dns] = ""
28
- end
29
27
 
30
- cip.update(params)
28
+ cip.update(options)
31
29
  cip.reload
32
30
 
33
31
  render_table([cip], global_options)
@@ -5,8 +5,17 @@ module Brightbox
5
5
  c.desc "Show all public images from all accounts"
6
6
  c.switch [:a, "show-all"]
7
7
 
8
+ c.desc "Show only images of a given type"
9
+ c.flag [:t, :type]
10
+
11
+ c.desc "Show only images of a given status"
12
+ c.flag [:s, :status]
13
+
14
+ c.desc "Show only images for a given account identifier"
15
+ c.flag [:l, :account]
16
+
8
17
  c.action do |global_options, options, args|
9
-
18
+
10
19
  if args.empty?
11
20
  images = Image.find(:all)
12
21
  else
@@ -15,20 +24,8 @@ module Brightbox
15
24
  end
16
25
  end
17
26
 
18
- snapshots = images.select { |i| i.source_type == 'snapshot' }
19
-
20
- images = images - snapshots
21
-
22
- unless options[:a]
23
- account = Account.conn_account
24
- images.reject! { |i| !i.official and i.owner_id != account.id }
25
- end
26
-
27
- images.sort! { |a, b| a.default_sort_fields <=> b.default_sort_fields }
28
-
29
- snapshots.sort! { |a, b| a.created_at <=> b.created_at }
30
-
31
- render_table(images + snapshots, global_options)
27
+ images = Image.filter_images(images, options)
28
+ render_table(images, global_options)
32
29
  end
33
30
  end
34
31
  end
@@ -11,7 +11,7 @@ module Brightbox
11
11
  c.default_value "least-connections"
12
12
  c.flag [:p, :policy]
13
13
 
14
- c.desc "Listeners. Format: in-port:out-port:type:timeout. Comma separate multiple listeners. Protocols can be tcp, http or http+ws and timeouts are in milliseconds."
14
+ c.desc "Listeners. Format: in-port:out-port:type:timeout. Comma separated multiple listeners. Protocols can be tcp, http or http+ws and timeouts are in milliseconds."
15
15
  c.default_value "80:80:http:50000,443:443:tcp:50000"
16
16
  c.flag [:l, :listeners]
17
17
 
@@ -17,7 +17,8 @@ module Brightbox
17
17
  info "Activating console for server #{s}"
18
18
  r = s.activate_console
19
19
  url = "#{r["console_url"]}/?password=#{r["console_token"]}"
20
- consoles << { :url => url, :token => r["console_token"], :expires => r["console_token_expires"] }
20
+ expires = Time.parse(r["console_token_expires"])
21
+ consoles << { :url => url, :token => r["console_token"], :expires => expires.localtime.to_s }
21
22
  end
22
23
 
23
24
  render_table(consoles, global_options.merge(:fields => [:url, :token, :expires], :resize => false))
@@ -18,30 +18,72 @@ module Brightbox
18
18
  [:id, :owner, :type, :created_on, :status, :size, :name]
19
19
  end
20
20
 
21
+ # Filter out images that are not of the right type, account or status if the option is passed
22
+ def self.filter_images(images, options={})
23
+ # Remove images that don't match the given type
24
+ if options[:t]
25
+ images.reject! { |i| i.type != options[:t] }
26
+ end
27
+
28
+ # Remove statuses that don't match the argument
29
+ if options[:s]
30
+ images.reject! { |i| i.status != options[:s] }
31
+ end
32
+
33
+ # Remove images that don't belong to the specified owner id
34
+ if options[:l]
35
+ if options[:l] == 'brightbox'
36
+ images.reject! { |i| !i.official }
37
+ else
38
+ images.reject! { |i| i.owner_id != options[:l] }
39
+ end
40
+ end
41
+
42
+ snapshots = images.select { |i| i.source_type == 'snapshot' }
43
+ images = images - snapshots
44
+
45
+ unless options[:a]
46
+ account = Account.conn_account
47
+ images.reject! { |i| !i.official and i.owner_id != account.id }
48
+ end
49
+
50
+ images.sort! { |a, b| a.default_sort_fields <=> b.default_sort_fields }
51
+ snapshots.sort! { |a, b| a.created_at <=> b.created_at }
52
+ images + snapshots
53
+ end
54
+
21
55
  def update options
22
56
  self.class.conn.update_image(id, options)
23
57
  self.reload
24
58
  self
25
59
  end
26
60
 
61
+ def type
62
+ if official
63
+ "official"
64
+ else
65
+ source_type
66
+ end
67
+ end
68
+
69
+ def status
70
+ if fog_model.attributes[:status] == "available"
71
+ public ? 'public' : 'private'
72
+ else
73
+ fog_model.attributes[:status]
74
+ end
75
+ end
76
+
27
77
  def to_row
28
78
  o = fog_model.attributes
29
79
  o[:id] = fog_model.id
30
- if status == "available"
31
- o[:status] = (public ? 'public' : 'private')
32
- else
33
- o[:status] = status
34
- end
80
+ o[:status] = status
35
81
  o[:username] = username
36
82
  o[:arch] = arch
37
83
  o[:name] = name.to_s + " (#{arch})"
38
84
  o[:owner] = owner_id
39
- if official
40
- o[:type] = "official"
41
- o[:owner] = "brightbox"
42
- else
43
- o[:type] = source_type
44
- end
85
+ o[:owner] = "brightbox" if official
86
+ o[:type] = type
45
87
  o[:created_at] = created_at
46
88
  o[:created_on] = created_at.to_s.split('T').first
47
89
  o[:description] = description if description
@@ -1,6 +1,6 @@
1
1
  class Time
2
2
  def rfc8601
3
- self.strftime("%Y-%m-%dT%H:%M")
3
+ self.strftime(self.utc? ? "%Y-%m-%dT%H:%MZ" : "%Y-%m-%dT%H:%M")
4
4
  end
5
5
 
6
6
  def to_s
@@ -183,6 +183,7 @@ module Fog
183
183
  @connection.request(options)
184
184
  end
185
185
  end
186
+
186
187
  end
187
188
  end
188
189
  end
@@ -22,6 +22,9 @@ module Fog
22
22
  attribute :interface_id, :aliases => "interface", :squash => "id"
23
23
  attribute :server_id, :aliases => "server", :squash => "id"
24
24
  attribute :load_balancer, :alias => "load_balancer", :squash => "id"
25
+ attribute :server_group, :alias => "server_group", :squash => "id"
26
+ attribute :port_translators
27
+ attribute :name
25
28
 
26
29
  def map(destination)
27
30
  requires :identity
@@ -3,11 +3,11 @@ module Fog
3
3
  class Brightbox
4
4
  class Real
5
5
 
6
- def create_cloud_ip
7
- request("post", "/1.0/cloud_ips", [201])
6
+ def create_cloud_ip(options = nil)
7
+ request("post", "/1.0/cloud_ips", [201],options)
8
8
  end
9
9
 
10
10
  end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -76,6 +76,11 @@ class Brightbox
76
76
  "threshold_up" => Integer,
77
77
  "threshold_down" => Integer
78
78
  }
79
+ PORT_TRANSLATOR = {
80
+ "incoming" => Integer,
81
+ "outgoing" => Integer,
82
+ "protocol" => String
83
+ }
79
84
  end
80
85
 
81
86
  module Nested
@@ -102,6 +107,7 @@ class Brightbox
102
107
  "url" => String,
103
108
  "public_ip" => String,
104
109
  "status" => String,
110
+ "name" => Fog::Nullable::String,
105
111
  "reverse_dns" => String
106
112
  }
107
113
 
@@ -232,9 +238,11 @@ class Brightbox
232
238
  "public_ip" => String,
233
239
  "status" => String,
234
240
  "reverse_dns" => String,
241
+ "name" => Fog::Nullable::String,
235
242
  "account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
236
243
  "interface" => Fog::Brightbox::Nullable::Interface,
237
244
  "load_balancer" => Fog::Brightbox::Nullable::LoadBalancer,
245
+ "port_translators" => [Brightbox::Compute::Formats::Struct::PORT_TRANSLATOR],
238
246
  "server" => Fog::Brightbox::Nullable::Server
239
247
  }
240
248
 
@@ -428,9 +436,11 @@ class Brightbox
428
436
  "public_ip" => String,
429
437
  "status" => String,
430
438
  "reverse_dns" => String,
439
+ "name" => Fog::Nullable::String,
431
440
  "account" => Fog::Brightbox::Nullable::Account,
432
441
  "interface" => Fog::Brightbox::Nullable::Interface,
433
442
  "load_balancer" => Fog::Brightbox::Nullable::LoadBalancer,
443
+ "port_translators" => [Brightbox::Compute::Formats::Struct::PORT_TRANSLATOR],
434
444
  "server" => Fog::Brightbox::Nullable::Server
435
445
  }
436
446
 
@@ -1,3 +1,3 @@
1
1
  module Brightbox
2
- VERSION = "0.17.5" unless defined?(Brightbox::VERSION)
2
+ VERSION = "0.18.0" unless defined?(Brightbox::VERSION)
3
3
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brightbox-cli
3
3
  version: !ruby/object:Gem::Version
4
- hash: 81
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 17
9
- - 5
10
- version: 0.17.5
7
+ - 18
8
+ - 0
9
+ version: 0.18.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - John Leach
@@ -15,18 +14,16 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2012-03-21 00:00:00 +00:00
17
+ date: 2012-04-18 00:00:00 +01:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: json
23
22
  prerelease: false
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
24
  requirements:
27
25
  - - ~>
28
26
  - !ruby/object:Gem::Version
29
- hash: 5
30
27
  segments:
31
28
  - 1
32
29
  - 5
@@ -38,11 +35,9 @@ dependencies:
38
35
  name: builder
39
36
  prerelease: false
40
37
  requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
38
  requirements:
43
39
  - - ">="
44
40
  - !ruby/object:Gem::Version
45
- hash: 3
46
41
  segments:
47
42
  - 0
48
43
  version: "0"
@@ -52,11 +47,9 @@ dependencies:
52
47
  name: excon
53
48
  prerelease: false
54
49
  requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
50
  requirements:
57
51
  - - ~>
58
52
  - !ruby/object:Gem::Version
59
- hash: 59
60
53
  segments:
61
54
  - 0
62
55
  - 9
@@ -68,11 +61,9 @@ dependencies:
68
61
  name: formatador
69
62
  prerelease: false
70
63
  requirement: &id004 !ruby/object:Gem::Requirement
71
- none: false
72
64
  requirements:
73
65
  - - ~>
74
66
  - !ruby/object:Gem::Version
75
- hash: 23
76
67
  segments:
77
68
  - 0
78
69
  - 2
@@ -84,11 +75,9 @@ dependencies:
84
75
  name: mime-types
85
76
  prerelease: false
86
77
  requirement: &id005 !ruby/object:Gem::Requirement
87
- none: false
88
78
  requirements:
89
79
  - - ">="
90
80
  - !ruby/object:Gem::Version
91
- hash: 3
92
81
  segments:
93
82
  - 0
94
83
  version: "0"
@@ -98,11 +87,9 @@ dependencies:
98
87
  name: net-ssh
99
88
  prerelease: false
100
89
  requirement: &id006 !ruby/object:Gem::Requirement
101
- none: false
102
90
  requirements:
103
91
  - - ">="
104
92
  - !ruby/object:Gem::Version
105
- hash: 13
106
93
  segments:
107
94
  - 2
108
95
  - 1
@@ -114,11 +101,9 @@ dependencies:
114
101
  name: net-scp
115
102
  prerelease: false
116
103
  requirement: &id007 !ruby/object:Gem::Requirement
117
- none: false
118
104
  requirements:
119
105
  - - ~>
120
106
  - !ruby/object:Gem::Version
121
- hash: 31
122
107
  segments:
123
108
  - 1
124
109
  - 0
@@ -130,11 +115,9 @@ dependencies:
130
115
  name: nokogiri
131
116
  prerelease: false
132
117
  requirement: &id008 !ruby/object:Gem::Requirement
133
- none: false
134
118
  requirements:
135
119
  - - ">="
136
120
  - !ruby/object:Gem::Version
137
- hash: 7
138
121
  segments:
139
122
  - 1
140
123
  - 4
@@ -146,11 +129,9 @@ dependencies:
146
129
  name: ruby-hmac
147
130
  prerelease: false
148
131
  requirement: &id009 !ruby/object:Gem::Requirement
149
- none: false
150
132
  requirements:
151
133
  - - ">="
152
134
  - !ruby/object:Gem::Version
153
- hash: 3
154
135
  segments:
155
136
  - 0
156
137
  version: "0"
@@ -160,11 +141,9 @@ dependencies:
160
141
  name: hirb
161
142
  prerelease: false
162
143
  requirement: &id010 !ruby/object:Gem::Requirement
163
- none: false
164
144
  requirements:
165
145
  - - ~>
166
146
  - !ruby/object:Gem::Version
167
- hash: 7
168
147
  segments:
169
148
  - 0
170
149
  - 6
@@ -176,11 +155,9 @@ dependencies:
176
155
  name: rake
177
156
  prerelease: false
178
157
  requirement: &id011 !ruby/object:Gem::Requirement
179
- none: false
180
158
  requirements:
181
159
  - - ~>
182
160
  - !ruby/object:Gem::Version
183
- hash: 63
184
161
  segments:
185
162
  - 0
186
163
  - 8
@@ -192,39 +169,37 @@ dependencies:
192
169
  name: vcr
193
170
  prerelease: false
194
171
  requirement: &id012 !ruby/object:Gem::Requirement
195
- none: false
196
172
  requirements:
197
- - - ">="
173
+ - - ~>
198
174
  - !ruby/object:Gem::Version
199
- hash: 3
200
175
  segments:
201
- - 0
202
- version: "0"
176
+ - 1
177
+ - 11
178
+ - 3
179
+ version: 1.11.3
203
180
  type: :development
204
181
  version_requirements: *id012
205
182
  - !ruby/object:Gem::Dependency
206
183
  name: rspec
207
184
  prerelease: false
208
185
  requirement: &id013 !ruby/object:Gem::Requirement
209
- none: false
210
186
  requirements:
211
- - - ">="
187
+ - - ~>
212
188
  - !ruby/object:Gem::Version
213
- hash: 3
214
189
  segments:
190
+ - 2
191
+ - 8
215
192
  - 0
216
- version: "0"
193
+ version: 2.8.0
217
194
  type: :development
218
195
  version_requirements: *id013
219
196
  - !ruby/object:Gem::Dependency
220
197
  name: mocha
221
198
  prerelease: false
222
199
  requirement: &id014 !ruby/object:Gem::Requirement
223
- none: false
224
200
  requirements:
225
201
  - - ">="
226
202
  - !ruby/object:Gem::Version
227
- hash: 3
228
203
  segments:
229
204
  - 0
230
205
  version: "0"
@@ -2651,27 +2626,23 @@ rdoc_options: []
2651
2626
  require_paths:
2652
2627
  - lib
2653
2628
  required_ruby_version: !ruby/object:Gem::Requirement
2654
- none: false
2655
2629
  requirements:
2656
2630
  - - ">="
2657
2631
  - !ruby/object:Gem::Version
2658
- hash: 3
2659
2632
  segments:
2660
2633
  - 0
2661
2634
  version: "0"
2662
2635
  required_rubygems_version: !ruby/object:Gem::Requirement
2663
- none: false
2664
2636
  requirements:
2665
2637
  - - ">="
2666
2638
  - !ruby/object:Gem::Version
2667
- hash: 3
2668
2639
  segments:
2669
2640
  - 0
2670
2641
  version: "0"
2671
2642
  requirements: []
2672
2643
 
2673
2644
  rubyforge_project: brightbox-cli
2674
- rubygems_version: 1.3.7
2645
+ rubygems_version: 1.3.6
2675
2646
  signing_key:
2676
2647
  specification_version: 3
2677
2648
  summary: The Brightbox cloud management system