brightbox-cli 4.2.0 → 4.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -2
- data/Gemfile.lock +7 -7
- data/brightbox-cli.gemspec +2 -2
- data/lib/brightbox-cli/commands/login.rb +5 -6
- data/lib/brightbox-cli/commands/volumes/attach.rb +36 -0
- data/lib/brightbox-cli/commands/volumes/copy.rb +45 -0
- data/lib/brightbox-cli/commands/volumes/create.rb +63 -0
- data/lib/brightbox-cli/commands/volumes/destroy.rb +26 -0
- data/lib/brightbox-cli/commands/volumes/detach.rb +23 -0
- data/lib/brightbox-cli/commands/volumes/list.rb +16 -0
- data/lib/brightbox-cli/commands/volumes/locking.rb +39 -0
- data/lib/brightbox-cli/commands/volumes/resize.rb +36 -0
- data/lib/brightbox-cli/commands/volumes/show.rb +18 -0
- data/lib/brightbox-cli/commands/volumes/update.rb +50 -0
- data/lib/brightbox-cli/detailed_server.rb +13 -0
- data/lib/brightbox-cli/version.rb +1 -1
- data/lib/brightbox-cli/volume.rb +81 -0
- data/lib/brightbox_cli.rb +1 -0
- data/locales/en.yml +59 -1
- data/spec/commands/volumes/attach_spec.rb +165 -0
- data/spec/commands/volumes/copy_spec.rb +74 -0
- data/spec/commands/volumes/create_spec.rb +217 -0
- data/spec/commands/volumes/destroy_spec.rb +173 -0
- data/spec/commands/volumes/detach_spec.rb +180 -0
- data/spec/commands/volumes/list_spec.rb +99 -0
- data/spec/commands/volumes/resize_spec.rb +96 -0
- data/spec/commands/volumes/show_spec.rb +95 -0
- data/spec/commands/volumes/update_spec.rb +188 -0
- data/spec/support/volume_helpers.rb +167 -0
- metadata +37 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 517f21d7fc3e156180d8558868220e332943bd12ee492754e727d3f23d03d89c
|
|
4
|
+
data.tar.gz: ba05065d1729812c1aa1b41f44767872ea863a8295f8074ae8050742c1903e68
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1218d3d1956bac00755dde84bc1546f43dc05f4ea3386420b47745039326ad01f50f016faee353474e620beba0105e059de437085334da2bb4c6545392426880
|
|
7
|
+
data.tar.gz: 8ca4763dfbc21624b85ca97ea70525da34e4a2adb19abb405b2f95b8f8df500180a7780d0d13ffc6bc9cfade8306ed904a0fbbd56e95af1ad33ab913f16c6e7a
|
data/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,29 @@
|
|
|
1
|
+
### v4.3.0 / 2023-01-11
|
|
2
|
+
|
|
3
|
+
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.2.1...v4.3.0)
|
|
4
|
+
|
|
5
|
+
Enhancements:
|
|
6
|
+
|
|
7
|
+
* Adds `volumes` subcommand for Volume management.
|
|
8
|
+
|
|
9
|
+
Changes:
|
|
10
|
+
|
|
11
|
+
* Update `fog-brightbox` to `v1.7.0`
|
|
12
|
+
|
|
13
|
+
### v4.2.1 / 2022-11-16
|
|
14
|
+
|
|
15
|
+
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.2.0...v4.2.1)
|
|
16
|
+
|
|
17
|
+
Bug fixes:
|
|
18
|
+
|
|
19
|
+
* Bumped version of `highline` gem to fix issue when prompting for password during `brightbox login` command on Ruby 3.0+.
|
|
20
|
+
* Fixed help output for `brightbox login` by correcting DSL declaration.
|
|
21
|
+
|
|
1
22
|
### v4.2.0 / 2022-11-01
|
|
2
23
|
|
|
3
24
|
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.1.0...v4.2.0)
|
|
4
25
|
|
|
5
|
-
|
|
26
|
+
Enhancements:
|
|
6
27
|
|
|
7
28
|
* Adds three new, mutually exclusive options to `images create` to specify
|
|
8
29
|
different sources:
|
|
@@ -15,7 +36,7 @@ Changes:
|
|
|
15
36
|
|
|
16
37
|
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.0.0...v4.1.0)
|
|
17
38
|
|
|
18
|
-
|
|
39
|
+
Enhancements:
|
|
19
40
|
|
|
20
41
|
* Adds `volume-size` to `servers create` to allow passing of arbitrary sizes for
|
|
21
42
|
network based storage types.
|
data/Gemfile.lock
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
brightbox-cli (4.
|
|
4
|
+
brightbox-cli (4.3.0)
|
|
5
5
|
dry-inflector (= 0.2.0)
|
|
6
|
-
fog-brightbox (>= 1.
|
|
6
|
+
fog-brightbox (>= 1.9.1)
|
|
7
7
|
fog-core (< 2.0)
|
|
8
8
|
gli (~> 2.21)
|
|
9
|
-
highline (~>
|
|
9
|
+
highline (~> 2.0)
|
|
10
10
|
hirb (~> 0.6)
|
|
11
11
|
i18n (>= 0.6, < 1.11)
|
|
12
12
|
mime-types (~> 3.0)
|
|
@@ -25,8 +25,8 @@ GEM
|
|
|
25
25
|
rexml
|
|
26
26
|
diff-lcs (1.5.0)
|
|
27
27
|
dry-inflector (0.2.0)
|
|
28
|
-
excon (0.
|
|
29
|
-
fog-brightbox (1.
|
|
28
|
+
excon (0.97.0)
|
|
29
|
+
fog-brightbox (1.9.1)
|
|
30
30
|
dry-inflector
|
|
31
31
|
fog-core (>= 1.45, < 3.0)
|
|
32
32
|
fog-json
|
|
@@ -40,7 +40,7 @@ GEM
|
|
|
40
40
|
formatador (0.3.0)
|
|
41
41
|
gli (2.21.0)
|
|
42
42
|
hashdiff (1.0.1)
|
|
43
|
-
highline (1.
|
|
43
|
+
highline (2.1.0)
|
|
44
44
|
hirb (0.7.3)
|
|
45
45
|
i18n (1.10.0)
|
|
46
46
|
concurrent-ruby (~> 1.0)
|
|
@@ -117,4 +117,4 @@ DEPENDENCIES
|
|
|
117
117
|
webmock
|
|
118
118
|
|
|
119
119
|
BUNDLED WITH
|
|
120
|
-
2.
|
|
120
|
+
2.2.33
|
data/brightbox-cli.gemspec
CHANGED
|
@@ -21,10 +21,10 @@ Gem::Specification.new do |s|
|
|
|
21
21
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
|
22
22
|
s.require_paths = ["lib"]
|
|
23
23
|
|
|
24
|
-
s.add_dependency "fog-brightbox", ">= 1.
|
|
24
|
+
s.add_dependency "fog-brightbox", ">= 1.9.1"
|
|
25
25
|
s.add_dependency "fog-core", "< 2.0"
|
|
26
26
|
s.add_dependency "gli", "~> 2.21"
|
|
27
|
-
s.add_dependency "highline", "~>
|
|
27
|
+
s.add_dependency "highline", "~> 2.0"
|
|
28
28
|
s.add_dependency "hirb", "~> 0.6"
|
|
29
29
|
s.add_dependency "i18n", ">= 0.6", "< 1.11"
|
|
30
30
|
s.add_dependency "mime-types", "~> 3.0"
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
module Brightbox
|
|
2
|
+
desc I18n.t("login.desc")
|
|
3
|
+
arg :email
|
|
2
4
|
command [:login] do |cmd|
|
|
3
|
-
cmd.desc I18n.t("login.desc")
|
|
4
|
-
cmd.arg_name "email"
|
|
5
|
-
|
|
6
5
|
cmd.desc "password, if not specified you will be prompted"
|
|
7
|
-
cmd.flag [:p, "password"]
|
|
6
|
+
cmd.flag [:p, "password"], arg_name: "password"
|
|
8
7
|
|
|
9
|
-
cmd.desc "default account"
|
|
10
|
-
cmd.flag [:"default-account"]
|
|
8
|
+
cmd.desc "Set a default account"
|
|
9
|
+
cmd.flag [:"default-account"], arg_name: "acc-12345"
|
|
11
10
|
|
|
12
11
|
cmd.flag [:"application-id"]
|
|
13
12
|
cmd.flag [:"application-secret"]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.attach.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.attach.args")
|
|
5
|
+
|
|
6
|
+
cmd.command [:attach] do |c|
|
|
7
|
+
c.desc I18n.t("volumes.options.boot")
|
|
8
|
+
c.default_value false
|
|
9
|
+
c.switch [:boot], negatable: true
|
|
10
|
+
|
|
11
|
+
c.action do |global_options, options, args|
|
|
12
|
+
vol_id = args.shift
|
|
13
|
+
|
|
14
|
+
if vol_id.nil? || !vol_id.start_with?("vol-")
|
|
15
|
+
raise I18n.t("volumes.args.specify_one_id_first")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
srv_id = args.shift
|
|
19
|
+
|
|
20
|
+
if srv_id.nil? || !srv_id.start_with?("srv-")
|
|
21
|
+
raise I18n.t("volumes.attach.specify_server_id_second")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
boot_flag = options[:boot]
|
|
25
|
+
|
|
26
|
+
volume = Volume.find(vol_id)
|
|
27
|
+
|
|
28
|
+
info I18n.t("volumes.attach.acting", volume: volume)
|
|
29
|
+
volume.attach(server: srv_id, boot: boot_flag)
|
|
30
|
+
volume.reload
|
|
31
|
+
|
|
32
|
+
render_table([volume], global_options)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.copy.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.args.one")
|
|
5
|
+
|
|
6
|
+
cmd.command [:copy] do |c|
|
|
7
|
+
c.desc I18n.t("options.description.desc")
|
|
8
|
+
c.flag %i[d description]
|
|
9
|
+
|
|
10
|
+
c.desc I18n.t("volumes.options.delete_with_server")
|
|
11
|
+
c.default_value false
|
|
12
|
+
c.switch ["delete-with-server"], negatable: true
|
|
13
|
+
|
|
14
|
+
c.desc I18n.t("options.name.desc")
|
|
15
|
+
c.flag %i[n name]
|
|
16
|
+
|
|
17
|
+
c.desc I18n.t("volumes.options.serial")
|
|
18
|
+
c.flag [:serial]
|
|
19
|
+
|
|
20
|
+
c.action do |global_options, options, args|
|
|
21
|
+
vol_id = args.shift
|
|
22
|
+
|
|
23
|
+
if vol_id.nil? || !vol_id.start_with?("vol-")
|
|
24
|
+
raise I18n.t("volumes.args.specify_one_id_first")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
params = {
|
|
28
|
+
delete_with_server: options["delete-with-server"]
|
|
29
|
+
}
|
|
30
|
+
params[:description] = options[:description] if options[:description]
|
|
31
|
+
params[:name] = options[:name] if options[:name]
|
|
32
|
+
params[:serial] = options[:serial] if options[:serial]
|
|
33
|
+
|
|
34
|
+
volume = Volume.find(vol_id)
|
|
35
|
+
|
|
36
|
+
unless params.empty?
|
|
37
|
+
info I18n.t("volumes.copy.acting", volume: volume)
|
|
38
|
+
volume.copy(params)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
render_table([volume], global_options)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.create.desc")
|
|
4
|
+
|
|
5
|
+
cmd.command [:create] do |c|
|
|
6
|
+
c.desc I18n.t("options.description.desc")
|
|
7
|
+
c.flag %i[d description]
|
|
8
|
+
|
|
9
|
+
c.desc I18n.t("volumes.options.delete_with_server")
|
|
10
|
+
c.default_value false
|
|
11
|
+
c.switch ["delete-with-server"], negatable: true
|
|
12
|
+
|
|
13
|
+
c.desc I18n.t("volumes.options.encrypted")
|
|
14
|
+
c.switch %i[e encrypted], negatable: true
|
|
15
|
+
|
|
16
|
+
c.desc I18n.t("volumes.options.fs_label")
|
|
17
|
+
c.flag ["fs-label"]
|
|
18
|
+
|
|
19
|
+
c.desc I18n.t("volumes.options.fs_type")
|
|
20
|
+
c.flag ["fs-type"]
|
|
21
|
+
|
|
22
|
+
c.desc I18n.t("volumes.options.image")
|
|
23
|
+
c.flag %i[i image]
|
|
24
|
+
|
|
25
|
+
c.desc I18n.t("options.name.desc")
|
|
26
|
+
c.flag %i[n name]
|
|
27
|
+
|
|
28
|
+
c.desc I18n.t("volumes.options.serial")
|
|
29
|
+
c.flag [:serial]
|
|
30
|
+
|
|
31
|
+
c.desc I18n.t("volumes.options.size")
|
|
32
|
+
c.flag %i[s size]
|
|
33
|
+
|
|
34
|
+
c.action do |global_options, options, _args|
|
|
35
|
+
if options[:image].nil? && options[:"fs-type"].nil?
|
|
36
|
+
raise I18n.t("volumes.create.image_or_type_required")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
if !options[:image].nil? && !options[:"fs-type"].nil?
|
|
40
|
+
raise I18n.t("volumes.create.either_image_or_type")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
params = {
|
|
44
|
+
delete_with_server: options[:"delete-with-server"],
|
|
45
|
+
encrypted: options[:encrypted]
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
params[:filesystem_label] = options[:"fs-label"] if options[:"fs-label"]
|
|
49
|
+
params[:filesystem_type] = options[:"fs-type"] if options[:"fs-type"]
|
|
50
|
+
params[:image_id] = options[:image] if options[:image]
|
|
51
|
+
|
|
52
|
+
params[:description] = options[:description] if options[:description]
|
|
53
|
+
params[:name] = options[:name] if options[:name]
|
|
54
|
+
params[:serial] = options[:serial] if options[:serial]
|
|
55
|
+
params[:size] = options[:size] if options[:size]
|
|
56
|
+
|
|
57
|
+
info I18n.t("volumes.create.acting")
|
|
58
|
+
volume = Volume.create(params)
|
|
59
|
+
render_table([volume], global_options)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.destroy.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.args.many")
|
|
5
|
+
|
|
6
|
+
cmd.command [:destroy] do |c|
|
|
7
|
+
c.action do |_global_options, _options, args|
|
|
8
|
+
raise I18n.t("volumes.args.specify_many_ids") if args.empty?
|
|
9
|
+
|
|
10
|
+
volumes = Volume.find_or_call(args) do |id|
|
|
11
|
+
raise I18n.t("volumes.args.unknown_id", volume: volume)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
volumes.each do |volume|
|
|
15
|
+
info I18n.t("volumes.destroy.acting", volume: volume)
|
|
16
|
+
|
|
17
|
+
begin
|
|
18
|
+
volume.destroy
|
|
19
|
+
rescue Brightbox::Api::Conflict
|
|
20
|
+
error "Could not destroy #{id}"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.detach.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.args.many")
|
|
5
|
+
|
|
6
|
+
cmd.command [:detach] do |c|
|
|
7
|
+
c.action do |global_options, _options, args|
|
|
8
|
+
raise I18n.t("volumes.args.specify_many_ids") if args.empty?
|
|
9
|
+
|
|
10
|
+
volumes = Volume.find_or_call(args) do |volume|
|
|
11
|
+
raise I18n.t("volumes.args.unknown_id", volume: volume)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
volumes.each do |volume|
|
|
15
|
+
info I18n.t("volumes.detach.acting", volume: volume)
|
|
16
|
+
volume.detach
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
render_table(volumes, global_options)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.default_command :list
|
|
4
|
+
|
|
5
|
+
cmd.desc I18n.t("volumes.list.desc")
|
|
6
|
+
cmd.arg_name I18n.t("volumes.args.optional")
|
|
7
|
+
|
|
8
|
+
cmd.command [:list] do |c|
|
|
9
|
+
c.action do |global_options, _options, args|
|
|
10
|
+
volumes = Volume.find_all_or_warn(args)
|
|
11
|
+
|
|
12
|
+
render_table(volumes, global_options)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.lock.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.args.many")
|
|
5
|
+
|
|
6
|
+
cmd.command [:lock] do |c|
|
|
7
|
+
c.action do |_global_options, _options, args|
|
|
8
|
+
raise I18n.t("volumes.args.specify_many_ids") if args.empty?
|
|
9
|
+
|
|
10
|
+
volumes = Volume.find_or_call(args) do |volume|
|
|
11
|
+
raise I18n.t("volumes.args.unknown_id", volume: volume)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
volumes.each do |volume|
|
|
15
|
+
info I18n.t("volumes.lock.acting", volume: volume)
|
|
16
|
+
volume.lock!
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
cmd.desc I18n.t("volumes.unlock.desc")
|
|
22
|
+
cmd.arg_name I18n.t("volumes.args.many")
|
|
23
|
+
|
|
24
|
+
cmd.command [:unlock] do |c|
|
|
25
|
+
c.action do |_global_options, _options, args|
|
|
26
|
+
raise I18n.t("volumes.args.specify_many_ids") if args.empty?
|
|
27
|
+
|
|
28
|
+
volumes = Volume.find_or_call(args) do |volume|
|
|
29
|
+
raise I18n.t("volumes.args.unknown_id", volume: volume)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
volumes.each do |volume|
|
|
33
|
+
info I18n.t("volumes.unlock.acting", volume: volume)
|
|
34
|
+
volume.unlock!
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.resize.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.args.one")
|
|
5
|
+
|
|
6
|
+
cmd.command [:resize] do |c|
|
|
7
|
+
c.desc I18n.t("volumes.options.size")
|
|
8
|
+
c.flag %i[s size]
|
|
9
|
+
|
|
10
|
+
c.action do |global_options, options, args|
|
|
11
|
+
vol_id = args.shift
|
|
12
|
+
|
|
13
|
+
if vol_id.nil? || !vol_id.start_with?("vol-")
|
|
14
|
+
raise I18n.t("volumes.args.specify_one_id_first")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
if options[:size].nil?
|
|
18
|
+
raise I18n.t("volumes.resize.size_option_needed")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
new_size = options[:size].to_i
|
|
22
|
+
|
|
23
|
+
volume = Volume.find(vol_id)
|
|
24
|
+
old_size = volume.size
|
|
25
|
+
|
|
26
|
+
info I18n.t("volumes.resize.acting", volume: volume)
|
|
27
|
+
volume.resize(
|
|
28
|
+
from: old_size,
|
|
29
|
+
to: new_size
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
render_table([volume], global_options)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.show.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.args.optional")
|
|
5
|
+
|
|
6
|
+
cmd.command [:show] do |c|
|
|
7
|
+
c.action do |global_options, _options, args|
|
|
8
|
+
volumes = Volume.find_all_or_warn(args)
|
|
9
|
+
|
|
10
|
+
table_opts = global_options.merge(
|
|
11
|
+
:vertical => true,
|
|
12
|
+
:fields => Volume.detailed_fields
|
|
13
|
+
)
|
|
14
|
+
render_table(volumes, table_opts)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
command [:volumes] do |cmd|
|
|
3
|
+
cmd.desc I18n.t("volumes.update.desc")
|
|
4
|
+
cmd.arg_name I18n.t("volumes.args.one")
|
|
5
|
+
|
|
6
|
+
cmd.command [:update] do |c|
|
|
7
|
+
c.desc I18n.t("options.description.desc")
|
|
8
|
+
c.flag %i[d description]
|
|
9
|
+
|
|
10
|
+
c.desc I18n.t("volumes.options.delete_with_server")
|
|
11
|
+
c.default_value :ignore # So we can discard unless deliberately passed
|
|
12
|
+
c.switch ["delete-with-server"], negatable: true
|
|
13
|
+
|
|
14
|
+
c.desc I18n.t("options.name.desc")
|
|
15
|
+
c.flag %i[n name]
|
|
16
|
+
|
|
17
|
+
c.desc I18n.t("volumes.options.serial")
|
|
18
|
+
c.flag [:serial]
|
|
19
|
+
|
|
20
|
+
c.action do |global_options, options, args|
|
|
21
|
+
vol_id = args.shift
|
|
22
|
+
|
|
23
|
+
if vol_id.nil? || !vol_id.start_with?("vol-")
|
|
24
|
+
raise I18n.t("volumes.args.specify_one_id_first")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
params = {}
|
|
28
|
+
|
|
29
|
+
# Switches will always appear in the options so we need a non-boolean
|
|
30
|
+
# setting to determine if the user did not add it to their command
|
|
31
|
+
unless options["delete-with-server"] == :ignore
|
|
32
|
+
params[:delete_with_server] = options["delete-with-server"]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
params[:description] = options[:description] if options[:description]
|
|
36
|
+
params[:name] = options[:name] if options[:name]
|
|
37
|
+
params[:serial] = options[:serial] if options[:serial]
|
|
38
|
+
|
|
39
|
+
volume = Volume.find(vol_id)
|
|
40
|
+
|
|
41
|
+
unless params.empty?
|
|
42
|
+
info I18n.t("volumes.update.acting", volume: volume)
|
|
43
|
+
volume.update(params)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
render_table([volume], global_options)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -31,9 +31,21 @@ module Brightbox
|
|
|
31
31
|
row_attributes[:server_groups] = server_groups.map { |sg| sg["id"] }.join(", ")
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
row_attributes[:volumes] = volume_ids if volumes
|
|
35
|
+
|
|
34
36
|
row_attributes
|
|
35
37
|
end
|
|
36
38
|
|
|
39
|
+
def volume_ids
|
|
40
|
+
volumes.map do |vol|
|
|
41
|
+
if vol["boot"] == true
|
|
42
|
+
"*#{vol['id']}*"
|
|
43
|
+
else
|
|
44
|
+
vol["id"]
|
|
45
|
+
end
|
|
46
|
+
end.join(", ")
|
|
47
|
+
end
|
|
48
|
+
|
|
37
49
|
def self.default_field_order
|
|
38
50
|
%i[
|
|
39
51
|
id
|
|
@@ -65,6 +77,7 @@ module Brightbox
|
|
|
65
77
|
cloud_ipv6s
|
|
66
78
|
snapshots
|
|
67
79
|
server_groups
|
|
80
|
+
volumes
|
|
68
81
|
]
|
|
69
82
|
end
|
|
70
83
|
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module Brightbox
|
|
2
|
+
class Volume < Api
|
|
3
|
+
def self.require_account?; true; end
|
|
4
|
+
|
|
5
|
+
def self.all
|
|
6
|
+
conn.volumes
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def self.create(options)
|
|
10
|
+
new(conn.volumes.create(options))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.get(id)
|
|
14
|
+
conn.volumes.get(id)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def self.default_field_order
|
|
18
|
+
%i[
|
|
19
|
+
id
|
|
20
|
+
type
|
|
21
|
+
size
|
|
22
|
+
status
|
|
23
|
+
server
|
|
24
|
+
boot
|
|
25
|
+
name
|
|
26
|
+
]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.detailed_fields
|
|
30
|
+
%i[
|
|
31
|
+
id
|
|
32
|
+
name
|
|
33
|
+
description
|
|
34
|
+
type
|
|
35
|
+
size
|
|
36
|
+
status
|
|
37
|
+
created_at
|
|
38
|
+
encrypted
|
|
39
|
+
serial
|
|
40
|
+
locked
|
|
41
|
+
filesystem_label
|
|
42
|
+
filesystem_type
|
|
43
|
+
image
|
|
44
|
+
source
|
|
45
|
+
source_type
|
|
46
|
+
server
|
|
47
|
+
boot
|
|
48
|
+
delete_with_server
|
|
49
|
+
zone
|
|
50
|
+
]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def attach(server:, boot: false)
|
|
54
|
+
self.class.conn.attach_volume(id, server: server, boot: boot)
|
|
55
|
+
reload
|
|
56
|
+
self
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def attributes
|
|
60
|
+
a = fog_model.attributes
|
|
61
|
+
a[:id] = fog_model.id
|
|
62
|
+
a[:image] = image_id
|
|
63
|
+
a[:locked] = locked?
|
|
64
|
+
a[:server] = server_id
|
|
65
|
+
a[:status] = state
|
|
66
|
+
a[:type] = storage_type
|
|
67
|
+
a[:zone] = zone_id
|
|
68
|
+
a
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def to_row
|
|
72
|
+
attributes
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def update(options)
|
|
76
|
+
self.class.conn.update_volume(id, options)
|
|
77
|
+
reload
|
|
78
|
+
self
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
data/lib/brightbox_cli.rb
CHANGED
|
@@ -56,6 +56,7 @@ module Brightbox
|
|
|
56
56
|
autoload :DatabaseType, File.expand_path("brightbox-cli/database_type", __dir__)
|
|
57
57
|
autoload :DatabaseServer, File.expand_path("brightbox-cli/database_server", __dir__)
|
|
58
58
|
autoload :DatabaseSnapshot, File.expand_path("brightbox-cli/database_snapshot", __dir__)
|
|
59
|
+
autoload :Volume, File.expand_path("brightbox-cli/volume", __dir__)
|
|
59
60
|
autoload :Token, File.expand_path("brightbox-cli/token", __dir__)
|
|
60
61
|
|
|
61
62
|
module Config
|