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.
- data/brightbox-cli.gemspec +2 -2
- data/lib/brightbox-cli/cloud_ips.rb +50 -5
- data/lib/brightbox-cli/commands/cloudips-create.rb +9 -3
- data/lib/brightbox-cli/commands/cloudips-destroy.rb +6 -6
- data/lib/brightbox-cli/commands/cloudips-list.rb +2 -2
- data/lib/brightbox-cli/commands/cloudips-map.rb +5 -2
- data/lib/brightbox-cli/commands/cloudips-show.rb +2 -2
- data/lib/brightbox-cli/commands/cloudips-unmap.rb +4 -4
- data/lib/brightbox-cli/commands/cloudips-update.rb +10 -12
- data/lib/brightbox-cli/commands/images-list.rb +12 -15
- data/lib/brightbox-cli/commands/lbs-create.rb +1 -1
- data/lib/brightbox-cli/commands/servers-activate-console.rb +2 -1
- data/lib/brightbox-cli/images.rb +53 -11
- data/lib/brightbox-cli/ruby_core_ext.rb +1 -1
- data/lib/brightbox-cli/vendor/fog/lib/fog/brightbox/compute.rb +1 -0
- data/lib/brightbox-cli/vendor/fog/lib/fog/brightbox/models/compute/cloud_ip.rb +3 -0
- data/lib/brightbox-cli/vendor/fog/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +3 -3
- data/lib/brightbox-cli/vendor/fog/tests/brightbox/requests/compute/helper.rb +10 -0
- data/lib/brightbox-cli/version.rb +1 -1
- metadata +14 -43
data/brightbox-cli.gemspec
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
2
|
+
desc 'Create a new Cloud IP address'
|
3
3
|
command [:create] do |c|
|
4
|
-
c.desc "Number of
|
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
|
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
|
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
|
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
|
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
|
30
|
+
raise "Cannot destroy mapped Cloud IP #{ip}"
|
31
31
|
end
|
32
32
|
end
|
33
|
-
info "Destroying
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
18
|
+
info "Unmapping Cloud IP #{ip}"
|
19
19
|
ip.unmap
|
20
20
|
ip.reload
|
21
21
|
else
|
22
|
-
warn "Cloud
|
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
|
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
|
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
|
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(
|
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
|
-
|
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
|
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
|
-
|
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))
|
data/lib/brightbox-cli/images.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
@@ -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
|
@@ -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
|
|
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
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
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-
|
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
|
-
-
|
202
|
-
|
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:
|
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.
|
2645
|
+
rubygems_version: 1.3.6
|
2675
2646
|
signing_key:
|
2676
2647
|
specification_version: 3
|
2677
2648
|
summary: The Brightbox cloud management system
|