brightbox-cli 4.8.0 → 5.0.0.rc1

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +6 -2
  3. data/CHANGELOG.md +60 -0
  4. data/Gemfile.lock +17 -10
  5. data/brightbox-cli.gemspec +3 -7
  6. data/lib/brightbox-cli/accounts.rb +5 -1
  7. data/lib/brightbox-cli/api.rb +34 -1
  8. data/lib/brightbox-cli/cloud_ips.rb +6 -6
  9. data/lib/brightbox-cli/collaboration.rb +3 -7
  10. data/lib/brightbox-cli/commands/cloudips/unmap.rb +1 -1
  11. data/lib/brightbox-cli/commands/firewall/policies_apply.rb +1 -1
  12. data/lib/brightbox-cli/commands/firewall/policies_create.rb +1 -1
  13. data/lib/brightbox-cli/commands/firewall/policies_destroy.rb +1 -1
  14. data/lib/brightbox-cli/commands/firewall/policies_list.rb +1 -1
  15. data/lib/brightbox-cli/commands/firewall/policies_remove.rb +1 -1
  16. data/lib/brightbox-cli/commands/firewall/policies_show.rb +1 -1
  17. data/lib/brightbox-cli/commands/firewall/policies_update.rb +1 -1
  18. data/lib/brightbox-cli/commands/lbs/create.rb +28 -16
  19. data/lib/brightbox-cli/commands/lbs/show.rb +5 -0
  20. data/lib/brightbox-cli/commands/lbs/update.rb +9 -2
  21. data/lib/brightbox-cli/config.rb +12 -5
  22. data/lib/brightbox-cli/database_server.rb +20 -20
  23. data/lib/brightbox-cli/database_snapshot.rb +5 -5
  24. data/lib/brightbox-cli/database_type.rb +4 -8
  25. data/lib/brightbox-cli/detailed_server.rb +26 -28
  26. data/lib/brightbox-cli/detailed_server_group.rb +2 -2
  27. data/lib/brightbox-cli/firewall_policy.rb +5 -9
  28. data/lib/brightbox-cli/firewall_rule.rb +14 -15
  29. data/lib/brightbox-cli/images.rb +21 -20
  30. data/lib/brightbox-cli/indifferent_access_hash.rb +50 -0
  31. data/lib/brightbox-cli/load_balancers.rb +38 -4
  32. data/lib/brightbox-cli/server_groups.rb +4 -8
  33. data/lib/brightbox-cli/servers.rb +22 -16
  34. data/lib/brightbox-cli/types.rb +4 -8
  35. data/lib/brightbox-cli/user_collaboration.rb +1 -1
  36. data/lib/brightbox-cli/users.rb +3 -5
  37. data/lib/brightbox-cli/version.rb +1 -1
  38. data/lib/brightbox-cli/volume.rb +9 -13
  39. data/lib/brightbox-cli/zones.rb +0 -4
  40. data/lib/brightbox_cli.rb +1 -0
  41. data/spec/commands/cloudips/update_spec.rb +7 -5
  42. data/spec/commands/configmaps/create_spec.rb +6 -6
  43. data/spec/commands/configmaps/destroy_spec.rb +1 -1
  44. data/spec/commands/configmaps/list_spec.rb +1 -1
  45. data/spec/commands/configmaps/show_spec.rb +3 -3
  46. data/spec/commands/configmaps/update_spec.rb +9 -9
  47. data/spec/commands/lbs/create_spec.rb +158 -6
  48. data/spec/commands/lbs/show_spec.rb +99 -3
  49. data/spec/commands/lbs/update_spec.rb +50 -6
  50. data/spec/commands/servers/update_spec.rb +7 -7
  51. data/spec/commands/sql/instances/create_spec.rb +8 -8
  52. data/spec/commands/sql/instances/reset_spec.rb +3 -3
  53. data/spec/commands/sql/instances/resize_spec.rb +4 -4
  54. data/spec/commands/sql/instances/show_spec.rb +2 -1
  55. data/spec/commands/sql/instances/update_spec.rb +3 -3
  56. data/spec/commands/sql/snapshots/list_spec.rb +1 -1
  57. data/spec/commands/sql/snapshots/show_spec.rb +50 -7
  58. data/spec/commands/volumes/attach_spec.rb +4 -4
  59. data/spec/commands/volumes/copy_spec.rb +2 -2
  60. data/spec/commands/volumes/destroy_spec.rb +1 -1
  61. data/spec/commands/volumes/detach_spec.rb +1 -1
  62. data/spec/commands/volumes/list_spec.rb +1 -1
  63. data/spec/commands/volumes/resize_spec.rb +3 -3
  64. data/spec/commands/volumes/show_spec.rb +1 -1
  65. data/spec/commands/volumes/update_spec.rb +4 -4
  66. data/spec/spec_helper.rb +16 -0
  67. data/spec/support/shared/api_resource_examples.rb +25 -0
  68. data/spec/unit/brightbox/account/attributes_spec.rb +13 -0
  69. data/spec/unit/brightbox/api/attributes_spec.rb +65 -0
  70. data/spec/unit/brightbox/api/fog_attributes_spec.rb +65 -0
  71. data/spec/unit/brightbox/bb_config/config_directory_spec.rb +23 -3
  72. data/spec/unit/brightbox/cloud_ip/attributes_spec.rb +19 -0
  73. data/spec/unit/brightbox/collaborating_account/attributes_spec.rb +13 -0
  74. data/spec/unit/brightbox/database_server/attributes_spec.rb +13 -0
  75. data/spec/unit/brightbox/database_snapshot/attributes_spec.rb +13 -0
  76. data/spec/unit/brightbox/database_type/attributes_spec.rb +20 -0
  77. data/spec/unit/brightbox/detailed_server/attributes_spec.rb +29 -0
  78. data/spec/unit/brightbox/detailed_server_group/attributes_spec.rb +13 -0
  79. data/spec/unit/brightbox/firewall_policy/attributes_spec.rb +21 -0
  80. data/spec/unit/brightbox/firewall_rule/attributes_spec.rb +18 -0
  81. data/spec/unit/brightbox/image/attributes_spec.rb +13 -0
  82. data/spec/unit/brightbox/image/status_spec.rb +67 -0
  83. data/spec/unit/brightbox/load_balancer/acme_cert_spec.rb +75 -0
  84. data/spec/unit/brightbox/load_balancer/attributes_spec.rb +13 -0
  85. data/spec/unit/brightbox/load_balancer/formatted_acme_domains_spec.rb +78 -0
  86. data/spec/unit/brightbox/server/attributes_spec.rb +29 -0
  87. data/spec/unit/brightbox/server/hostname_spec.rb +27 -0
  88. data/spec/unit/brightbox/server_group/attributes_spec.rb +13 -0
  89. data/spec/unit/brightbox/type/attributes_spec.rb +20 -0
  90. data/spec/unit/brightbox/user/attributes_spec.rb +13 -0
  91. data/spec/unit/brightbox/user_collaboration/attributes_spec.rb +13 -0
  92. metadata +68 -23
  93. data/spec/cassettes/brightbox_sql_snapshots/show/when_resource_exists/does_not_output_to_stderr.yml +0 -93
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1957aedb76eb618990c1deca7846319433ce2cc3b88ed2f4b3eac0b4aca3b3c0
4
- data.tar.gz: b7a83328c30eb76699b880cb8a6a356cf61bf3e362c19c50b1f8c4dcbbc17c6d
3
+ metadata.gz: 1c8cd88f1d668182fcc07ad7ac31d8a3935bcf079321908ec56a364e59e0fe43
4
+ data.tar.gz: 4b5ae117508d213f075adebf4c70996e95001abe39a6e9de0769232d29f5d3c5
5
5
  SHA512:
6
- metadata.gz: 1a2a3316ce568a85d06eea928b5382d0a9a0b2737e2e14c01940a2f2071f8cd10d5c7a25c4f3af2878d5d453c98d70b1bfb50a6fa92b46ed7c5ca4f075fb844f
7
- data.tar.gz: 3cd77f4748d94aea53ac8685268228f112aef95e9c8b9a8aca00692d67dc10e92948fa5acef2c696cf6ce08c58920ded07a1167e3933fcc4faf9e2736c480903
6
+ metadata.gz: 8b50ffa28cbb39bd012b39de3233ad1e6e29190723e2ed83f1239525c04bdbaa1927b7b26d528246fdbd5d9f6185ed08d88807ab58e7fd970b6dcadf65139b28
7
+ data.tar.gz: 022e0c725cc12e5d2db5178100f7434a9c52de94eb8330a88688238c9183944b1199016f75d9a868568498a37258bf13d3032b5e9fb3a357198b1605e117503e
@@ -19,9 +19,11 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
 
21
21
  strategy:
22
+ fail-fast: false
22
23
  matrix:
23
- ruby: ["2.5", "2.6", "2.7", "3.0", "3.1", "3.2", "3.3"]
24
-
24
+ ruby: ["2.7", "3.0", "3.1", "3.2", "3.3"]
25
+ env:
26
+ DEBUG: "true"
25
27
  steps:
26
28
  - uses: actions/checkout@v3
27
29
  - name: Set up Ruby ${{ matrix.ruby }}
@@ -30,6 +32,8 @@ jobs:
30
32
  uses: ruby/setup-ruby@v1
31
33
  with:
32
34
  ruby-version: ${{ matrix.ruby }}
35
+ - name: Install Bundler
36
+ run: gem install bundler -v $(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1 | awk '{print $1}')
33
37
  - name: Install dependencies
34
38
  run: bundle install
35
39
  - name: Run tests
data/CHANGELOG.md CHANGED
@@ -1,3 +1,63 @@
1
+ ### v5.0.0.rc1 / 2024-12-20
2
+
3
+ [Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.8.0...v5.0.0.rc1)
4
+
5
+ Backwards incompatible changes:
6
+
7
+ * Drop support for Ruby versions older than 2.7
8
+ * Update `Gemfile.lock` to use Bundler 2.4.22
9
+ * When ENV `HOME` is not set, the working directory is used for configs
10
+ rather than `/.brightbox` to fix issues with containers
11
+
12
+ Enhancements:
13
+
14
+ * Added support for ACME certificates
15
+ * `brightbox lbs create` and `update` accepts `--acme-domains` with CSV
16
+ domains to request them to be setup on the load balancer
17
+ * `brightbox lbs show` outputs ACME related fields
18
+ * `acme_domains` - domains requested to be present
19
+ * `acme_cert_expires` - when the ACME certificate in no longer valid
20
+ * `acme_cert_fingerprint` - the fingerprint of the ACME certificate
21
+ * `acme_cert_issued_at` - when the ACME certificate was issued
22
+ * `acme_cert_subjects` - domain present on ACME certificate
23
+ * `brightbox firewall-policy` is now an alias for `firewall-policies`
24
+
25
+ Changes:
26
+
27
+ * `brightbox images` will now report an deprecated and private image as
28
+ "private" rather than "deprecated"
29
+ * Update `fog-brightbox` to `v1.12.0`
30
+ * Numerous dependency gems updated
31
+ * Expanded debugging output
32
+ * `Brightbox::Api#attributes` attempts to transform and make attributes
33
+ indifferent to String or Symbol keys as that has introduced numerous
34
+ issues over the years. Fog only converts the top level of keys from
35
+ Strings to Symbols resulting in mismatched keys throughout
36
+ * Refactored all models `#attributes` and `#to_row` methods to use the
37
+ above with more involved testing
38
+
39
+ Bug fixes:
40
+
41
+ * `brightbox lbs create` no longer requires at least one node to balance
42
+ which was outdated client side validation long removed from the API
43
+ * `brightbox lbs create` should now recognise the `--buffer-size` option
44
+ * `brightbox lbs update` converts `buffer-size` to integer before sending
45
+ * `brightbox cloudips unmap` incorrectly used the "map" description in
46
+ the help output. This is now fixed
47
+
48
+ Testing:
49
+
50
+ * Update CI testing matrix from Ruby 2.7 up to 3.3
51
+ * Ensure bundler version declared in `Gemfile.lock` is used by CI tests
52
+ * CI setting completes all builds rather than cancelling on one fail
53
+ * CI testing includes `DEBUG` ENV settings
54
+ * Tests updated to not "fail" when `DEBUG` output is included upsetting
55
+ matches to expected output in numerous cases
56
+ * Simplecov has been introduced and configured to prevent a drop in
57
+ test coverage.
58
+ * Temporary testing config directories are removed explicitly to prevent
59
+ config bleeding in some test scenarios
60
+
1
61
  ### v4.8.0 / 2024-10-23
2
62
 
3
63
  [Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.7.0...v4.8.0)
data/Gemfile.lock CHANGED
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- brightbox-cli (4.8.0)
5
- dry-inflector (= 0.2.0)
6
- fog-brightbox (>= 1.11.0)
4
+ brightbox-cli (5.0.0.rc1)
5
+ fog-brightbox (>= 1.12.0)
7
6
  fog-core (< 2.0)
8
7
  gli (~> 2.21)
9
8
  highline (~> 2.0)
@@ -24,9 +23,10 @@ GEM
24
23
  crack (0.4.5)
25
24
  rexml
26
25
  diff-lcs (1.5.0)
27
- dry-inflector (0.2.0)
26
+ docile (1.4.1)
27
+ dry-inflector (1.1.0)
28
28
  excon (0.112.0)
29
- fog-brightbox (1.11.0)
29
+ fog-brightbox (1.12.0)
30
30
  dry-inflector
31
31
  fog-core (>= 1.45, < 3.0)
32
32
  fog-json
@@ -38,18 +38,18 @@ GEM
38
38
  fog-core
39
39
  multi_json (~> 1.10)
40
40
  formatador (0.3.0)
41
- gli (2.21.5)
41
+ gli (2.22.0)
42
42
  hashdiff (1.0.1)
43
43
  highline (2.1.0)
44
44
  hirb (0.7.3)
45
45
  i18n (1.10.0)
46
46
  concurrent-ruby (~> 1.0)
47
- logger (1.6.1)
47
+ logger (1.6.2)
48
48
  method_source (1.0.0)
49
49
  mime-types (3.6.0)
50
50
  logger
51
51
  mime-types-data (~> 3.2015)
52
- mime-types-data (3.2024.1001)
52
+ mime-types-data (3.2024.1203)
53
53
  mocha (1.14.0)
54
54
  multi_json (1.15.0)
55
55
  parallel (1.22.1)
@@ -65,7 +65,7 @@ GEM
65
65
  rainbow (3.1.1)
66
66
  rake (13.0.6)
67
67
  regexp_parser (2.5.0)
68
- rexml (3.2.5)
68
+ rexml (3.3.9)
69
69
  rspec (3.11.0)
70
70
  rspec-core (~> 3.11.0)
71
71
  rspec-expectations (~> 3.11.0)
@@ -95,6 +95,12 @@ GEM
95
95
  rubocop-rspec (2.10.0)
96
96
  rubocop (~> 1.19)
97
97
  ruby-progressbar (1.11.0)
98
+ simplecov (0.22.0)
99
+ docile (~> 1.1)
100
+ simplecov-html (~> 0.11)
101
+ simplecov_json_formatter (~> 0.1)
102
+ simplecov-html (0.13.1)
103
+ simplecov_json_formatter (0.1.4)
98
104
  slop (3.6.0)
99
105
  unicode-display_width (2.1.0)
100
106
  vcr (2.9.3)
@@ -115,8 +121,9 @@ DEPENDENCIES
115
121
  rubocop
116
122
  rubocop-rake
117
123
  rubocop-rspec
124
+ simplecov
118
125
  vcr (~> 2.5)
119
126
  webmock
120
127
 
121
128
  BUNDLED WITH
122
- 2.2.33
129
+ 2.4.22
@@ -14,14 +14,14 @@ Gem::Specification.new do |s|
14
14
  s.license = "MIT"
15
15
  s.metadata['rubygems_mfa_required'] = 'true'
16
16
 
17
- s.required_ruby_version = ">= 2.5"
17
+ s.required_ruby_version = ">= 2.7"
18
18
 
19
19
  s.files = `git ls-files`.split("\n") + `find lib/brightbox-cli/vendor`.split("\n")
20
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
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.11.0"
24
+ s.add_dependency "fog-brightbox", ">= 1.12.0"
25
25
  s.add_dependency "fog-core", "< 2.0"
26
26
  s.add_dependency "gli", "~> 2.21"
27
27
  s.add_dependency "highline", "~> 2.0"
@@ -30,11 +30,6 @@ Gem::Specification.new do |s|
30
30
  s.add_dependency "mime-types", "~> 3.0"
31
31
  s.add_dependency "multi_json", "~> 1.11"
32
32
 
33
- # Indirect dependency
34
- # 0.3 drops support for Ruby < 2.7
35
- # 0.2.1 drops support for Ruby < 2.6
36
- s.add_dependency "dry-inflector", "= 0.2.0"
37
-
38
33
  s.add_development_dependency "mocha"
39
34
  s.add_development_dependency "pry-remote"
40
35
  s.add_development_dependency "rake"
@@ -42,6 +37,7 @@ Gem::Specification.new do |s|
42
37
  s.add_development_dependency "rubocop"
43
38
  s.add_development_dependency "rubocop-rake"
44
39
  s.add_development_dependency "rubocop-rspec"
40
+ s.add_development_dependency "simplecov"
45
41
  s.add_development_dependency "vcr", "~> 2.5"
46
42
  s.add_development_dependency "webmock"
47
43
  end
@@ -13,7 +13,11 @@ module Brightbox
13
13
  end
14
14
 
15
15
  def to_row
16
- attributes.merge(:ram_free => ram_free, :cloud_ip_limit => cloud_ip_limit, :lb_limit => lb_limit)
16
+ attributes.to_h.merge(
17
+ :ram_free => ram_free,
18
+ :cloud_ip_limit => cloud_ip_limit,
19
+ :lb_limit => lb_limit
20
+ )
17
21
  end
18
22
 
19
23
  def self.all
@@ -52,6 +52,16 @@ module Brightbox
52
52
  Brightbox.config.cache_id(@id) if Brightbox.config.respond_to?(:cache_id)
53
53
  end
54
54
 
55
+ def attributes
56
+ fog_attributes
57
+ end
58
+
59
+ # Returns the transformed attributes from the fog model with a
60
+ # wrapper to allow access using either String or Symbol keys.
61
+ def fog_attributes
62
+ IndifferentAccessHash.new(deep_symbolize(fog_model.attributes))
63
+ end
64
+
55
65
  def fog_model
56
66
  @fog_model ||= self.class.find(@id)
57
67
  end
@@ -62,6 +72,10 @@ module Brightbox
62
72
  false
63
73
  end
64
74
 
75
+ def to_row
76
+ attributes.to_h
77
+ end
78
+
65
79
  def to_s
66
80
  @id
67
81
  end
@@ -165,7 +179,7 @@ module Brightbox
165
179
  if value
166
180
  value
167
181
  else
168
- Brightbox.config.cache_id id
182
+ Brightbox.config.cache_id id if Brightbox.config.respond_to?(:cache_id)
169
183
  @cache[id] = get(id)
170
184
  end
171
185
  end
@@ -192,5 +206,24 @@ module Brightbox
192
206
 
193
207
  fog_model.created_at.strftime("%Y-%m-%d")
194
208
  end
209
+
210
+ private
211
+
212
+ # Recursively converts all keys in a hash to symbols to ensure
213
+ # consistent access.
214
+ def deep_symbolize(hash)
215
+ return hash unless hash.respond_to?(:each_with_object)
216
+
217
+ hash.each_with_object({}) do |(k, v), result|
218
+ result[k.to_sym] = case v
219
+ when Hash
220
+ deep_symbolize(v)
221
+ when Array
222
+ v.map { |i| i.is_a?(Hash) ? deep_symbolize(i) : i }
223
+ else
224
+ v
225
+ end
226
+ end
227
+ end
195
228
  end
196
229
  end
@@ -33,15 +33,15 @@ module Brightbox
33
33
  end
34
34
 
35
35
  def attributes
36
- a = fog_model.attributes
37
- a[:destination] = destination_id
38
- a
36
+ fog_attributes.tap do |attrs|
37
+ attrs[:destination] = destination_id
38
+ end
39
39
  end
40
40
 
41
41
  def to_row
42
- o = attributes
43
- o[:port_translators] = translators(o)
44
- o
42
+ attributes.merge(
43
+ port_translators: translators(attributes),
44
+ ).to_h
45
45
  end
46
46
 
47
47
  def mapped?
@@ -31,14 +31,10 @@ module Brightbox
31
31
 
32
32
  attr_reader :id
33
33
 
34
- def attributes
35
- fog_model.attributes
36
- end
37
-
38
34
  def to_row
39
- row_attributes = attributes
40
- row_attributes[:name] = invitee_name
41
- row_attributes
35
+ attributes.merge(
36
+ name: invitee_name
37
+ ).to_h
42
38
  end
43
39
 
44
40
  def invitee_name
@@ -1,6 +1,6 @@
1
1
  module Brightbox
2
2
  command [:cloudips] do |cmd|
3
- cmd.desc I18n.t("cloudips.map.desc")
3
+ cmd.desc I18n.t("cloudips.unmap.desc")
4
4
  cmd.arg_name "cloudip-id..."
5
5
  cmd.command [:unmap] do |c|
6
6
  c.action do |global_options, _options, args|
@@ -1,6 +1,6 @@
1
1
  module Brightbox
2
2
  desc I18n.t("firewall.policies.desc")
3
- command [:"firewall-policies"] do |cmd|
3
+ command ["firewall-policies", "firewall-policy"] do |cmd|
4
4
  cmd.desc I18n.t("firewall.policies.apply.desc")
5
5
  cmd.arg_name "firewall-policy-id server-group-id"
6
6
  cmd.command [:apply] do |c|
@@ -1,5 +1,5 @@
1
1
  module Brightbox
2
- command [:"firewall-policies"] do |cmd|
2
+ command ["firewall-policies", "firewall-policy"] do |cmd|
3
3
  cmd.desc I18n.t("firewall.policies.create.desc")
4
4
  cmd.arg_name "[server-group-id...]"
5
5
  cmd.command [:create] do |c|
@@ -1,5 +1,5 @@
1
1
  module Brightbox
2
- command [:"firewall-policies"] do |cmd|
2
+ command ["firewall-policies", "firewall-policy"] do |cmd|
3
3
  cmd.desc I18n.t("firewall.policies.destroy.desc")
4
4
  cmd.arg_name "[firewall-policy-id...]"
5
5
  cmd.command [:destroy] do |c|
@@ -1,5 +1,5 @@
1
1
  module Brightbox
2
- command [:"firewall-policies"] do |cmd|
2
+ command ["firewall-policies", "firewall-policy"] do |cmd|
3
3
  cmd.default_command :list
4
4
 
5
5
  cmd.desc I18n.t("firewall.policies.list.desc")
@@ -1,5 +1,5 @@
1
1
  module Brightbox
2
- command [:"firewall-policies"] do |cmd|
2
+ command ["firewall-policies", "firewall-policy"] do |cmd|
3
3
  cmd.desc I18n.t("firewall.policies.remove.desc")
4
4
  cmd.arg_name "firewall-policy-id server-group-id"
5
5
  cmd.command [:remove] do |c|
@@ -1,5 +1,5 @@
1
1
  module Brightbox
2
- command [:"firewall-policies"] do |cmd|
2
+ command ["firewall-policies", "firewall-policy"] do |cmd|
3
3
  cmd.desc I18n.t("firewall.policies.show.desc")
4
4
  cmd.arg_name "firewall-policy-id"
5
5
  cmd.command [:show] do |c|
@@ -1,5 +1,5 @@
1
1
  module Brightbox
2
- command [:"firewall-policies"] do |cmd|
2
+ command ["firewall-policies", "firewall-policy"] do |cmd|
3
3
  cmd.desc I18n.t("firewall.policies.update.desc")
4
4
  cmd.arg_name "firewall-policy-id"
5
5
  cmd.command [:update] do |c|
@@ -32,18 +32,21 @@ module Brightbox
32
32
  c.default_value "/"
33
33
  c.flag [:s, "hc-request"]
34
34
 
35
- c.desc "Healthcheck interval"
35
+ c.desc "Health check interval"
36
36
  c.default_value "5000"
37
37
  c.flag [:e, "hc-interval"]
38
38
 
39
- c.desc "Healthcheck threshold up. Number of successful healthchecks for the node to be considered up."
39
+ c.desc "Health check threshold up. Number of successful health checks for the node to be considered up."
40
40
  c.default_value "3"
41
41
  c.flag [:u, "hc-up"]
42
42
 
43
- c.desc "Healthcheck threshold down. Number of failed healthchecks for the node to be considered down."
43
+ c.desc "Health check threshold down. Number of failed health checks for the node to be considered down."
44
44
  c.default_value "3"
45
45
  c.flag [:d, "hc-down"]
46
46
 
47
+ c.desc "ACME domains"
48
+ c.flag ["acme_domains"]
49
+
47
50
  c.desc "Filepath to the SSL certificate file to use."
48
51
  c.flag ["ssl-cert"]
49
52
 
@@ -58,8 +61,6 @@ module Brightbox
58
61
  c.switch ["sslv3"]
59
62
 
60
63
  c.action do |global_options, options, args|
61
- raise "You must specify which servers to balance connections to" if args.empty?
62
-
63
64
  listeners = options[:l].split(",").map do |l|
64
65
  inport, outport, protocol, timeout = l.split ":"
65
66
  raise "listener '#{l}' is invalid" if inport.nil? || outport.nil? || protocol.nil?
@@ -78,6 +79,14 @@ module Brightbox
78
79
  options[:y] = listeners.first[:protocol]
79
80
  end
80
81
 
82
+ if options[:b]
83
+ options[:b] = options[:b].to_i
84
+ end
85
+
86
+ if options["acme_domains"]
87
+ options["acme_domains"] = options["acme_domains"].split(",")
88
+ end
89
+
81
90
  hc_arg_lookup = {
82
91
  :k => :port,
83
92
  :y => :type,
@@ -96,7 +105,7 @@ module Brightbox
96
105
  end
97
106
  end
98
107
 
99
- # SSL argumens
108
+ # SSL arguments
100
109
  ssl_cert_path = options["ssl-cert"]
101
110
  ssl_key_path = options["ssl-key"]
102
111
 
@@ -113,16 +122,19 @@ module Brightbox
113
122
 
114
123
  msg = "Creating a new load balancer"
115
124
  info msg
116
- lb = LoadBalancer.create(:policy => options[:policy],
117
- :name => options[:n],
118
- :buffer_size => options[:b],
119
- :healthcheck => healthcheck,
120
- :listeners => listeners,
121
- :certificate_pem => ssl_cert,
122
- :certificate_private_key => ssl_key,
123
- :ssl_minimum_version => options["ssl-min-ver"],
124
- :sslv3 => options["sslv3"],
125
- :nodes => nodes)
125
+ lb = LoadBalancer.create(
126
+ domains: options["acme_domains"],
127
+ buffer_size: options[:b],
128
+ certificate_pem: ssl_cert,
129
+ certificate_private_key: ssl_key,
130
+ healthcheck: healthcheck,
131
+ listeners: listeners,
132
+ name: options[:n],
133
+ nodes: nodes,
134
+ policy: options[:policy],
135
+ ssl_minimum_version: options["ssl-min-ver"],
136
+ sslv3: options["sslv3"]
137
+ )
126
138
  render_table([lb], global_options)
127
139
  end
128
140
  end
@@ -16,6 +16,11 @@ module Brightbox
16
16
  created_at
17
17
  deleted_at
18
18
  policy
19
+ acme_domains
20
+ acme_cert_subjects
21
+ acme_cert_fingerprint
22
+ acme_cert_expires_at
23
+ acme_cert_issued_at
19
24
  ssl_minimum_version
20
25
  ssl_issuer
21
26
  ssl_subject
@@ -37,6 +37,9 @@ module Brightbox
37
37
  c.desc "Healthcheck threshold down. Number of failed healthchecks for the node to be considered down."
38
38
  c.flag [:d, "hc-down"]
39
39
 
40
+ c.desc "ACME domains"
41
+ c.flag ["acme_domains"]
42
+
40
43
  c.desc "Filepath to the SSL certificate file to use."
41
44
  c.flag ["ssl-cert"]
42
45
 
@@ -100,10 +103,10 @@ module Brightbox
100
103
  end
101
104
 
102
105
  if options[:b]
103
- lbopts[:buffer_size] = options[:b]
106
+ lbopts[:buffer_size] = options[:b].to_i
104
107
  end
105
108
 
106
- # SSL argumens
109
+ # SSL arguments
107
110
  ssl_cert_path = options["ssl-cert"]
108
111
  ssl_key_path = options["ssl-key"]
109
112
  remove_ssl = options["remove-ssl"]
@@ -132,6 +135,10 @@ module Brightbox
132
135
  lbopts[:ssl_minimum_version] = options["ssl-min-ver"]
133
136
  end
134
137
 
138
+ if options["acme_domains"]
139
+ lbopts[:domains] = options["acme_domains"].split(",")
140
+ end
141
+
135
142
  lbopts.nilify_blanks
136
143
 
137
144
  lb = LoadBalancer.find lb_id
@@ -91,11 +91,17 @@ module Brightbox
91
91
  def debug_tokens
92
92
  return unless ENV["DEBUG"]
93
93
 
94
- debug "Access token: #{access_token} (#{cached_access_token})"
95
- if using_application?
96
- debug "Refresh token: #{refresh_token} (#{cached_refresh_token}))"
94
+ if client_name
95
+ debug "Client: #{client_name}"
96
+
97
+ debug "Access token: #{access_token} (#{cached_access_token})"
98
+ if using_application?
99
+ debug "Refresh token: #{refresh_token} (#{cached_refresh_token}))"
100
+ else
101
+ debug "Refresh token: <NOT EXPECTED FOR CLIENT>"
102
+ end
97
103
  else
98
- debug "Refresh token: <NOT EXPECTED FOR CLIENT>"
104
+ debug "No client selected"
99
105
  end
100
106
  end
101
107
 
@@ -112,7 +118,8 @@ module Brightbox
112
118
  private
113
119
 
114
120
  def default_config_dir
115
- File.join(ENV.fetch("HOME", nil), ".brightbox")
121
+ config_dir = ENV.fetch("HOME", nil) || Dir.pwd
122
+ File.join(config_dir, ".brightbox")
116
123
  end
117
124
 
118
125
  def configured?
@@ -70,34 +70,34 @@ module Brightbox
70
70
  end
71
71
 
72
72
  def type_identifier
73
- return unless fog_model.attributes.key?("database_server_type")
73
+ return unless fog_attributes.key?("database_server_type")
74
74
 
75
- fog_model.attributes["database_server_type"]["id"]
75
+ fog_attributes["database_server_type"]["id"]
76
76
  end
77
77
 
78
78
  def zone_handle
79
- return unless fog_model.attributes.key?("zone")
79
+ return unless fog_attributes.key?("zone")
80
80
 
81
- fog_model.attributes["zone"]["handle"]
81
+ fog_attributes["zone"]["handle"]
82
82
  end
83
83
 
84
84
  def to_row
85
- a = fog_model.attributes
86
- a[:status] = fog_model.state
87
- a[:locked] = locked?
88
- a[:type] = type_identifier
89
- a[:db_engine] = engine_version
90
- a[:engine] = database_engine
91
- a[:version] = database_version
92
- a[:maintenance_weekday] = maintenance_weekday
93
- a[:maintenance_hour] = maintenance_hour
94
- a[:maintenance_window] = maintenance_window
95
- a[:zone] = zone_handle
96
- a[:created_on] = created_on
97
- a[:allow_access] = allow_access
98
- a[:cloud_ip_ids] = cloud_ip_ids
99
- a[:cloud_ips] = cloud_ip_addresses
100
- a
85
+ attributes.merge(
86
+ status: fog_model.state,
87
+ locked: locked?,
88
+ type: type_identifier,
89
+ db_engine: engine_version,
90
+ engine: database_engine,
91
+ version: database_version,
92
+ maintenance_weekday: maintenance_weekday,
93
+ maintenance_hour: maintenance_hour,
94
+ maintenance_window: maintenance_window,
95
+ zone: zone_handle,
96
+ created_on: created_on,
97
+ allow_access: allow_access,
98
+ cloud_ip_ids: cloud_ip_ids,
99
+ cloud_ips: cloud_ip_addresses
100
+ )
101
101
  end
102
102
 
103
103
  def engine_version
@@ -27,11 +27,11 @@ module Brightbox
27
27
  end
28
28
 
29
29
  def to_row
30
- a = fog_model.attributes
31
- a[:status] = fog_model.state
32
- a[:locked] = locked?
33
- a[:created_on] = fog_model.created_at.strftime("%Y-%m-%d")
34
- a
30
+ fog_attributes.merge(
31
+ status: fog_model.state,
32
+ locked: locked?,
33
+ created_on: fog_model.created_at.strftime("%Y-%m-%d")
34
+ )
35
35
  end
36
36
  end
37
37
  end
@@ -3,10 +3,10 @@ module Brightbox
3
3
  def self.require_account?; true; end
4
4
 
5
5
  def attributes
6
- o = fog_model.attributes
7
- o[:ram] = ram
8
- o[:disk] = disk
9
- o
6
+ fog_attributes.tap do |attrs|
7
+ attrs[:ram] = ram
8
+ attrs[:disk] = disk
9
+ end
10
10
  end
11
11
 
12
12
  def ram
@@ -17,10 +17,6 @@ module Brightbox
17
17
  fog_model.disk.to_i
18
18
  end
19
19
 
20
- def to_row
21
- attributes
22
- end
23
-
24
20
  def self.all
25
21
  conn.database_types
26
22
  end