brightbox-cli 4.8.0 → 5.0.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1957aedb76eb618990c1deca7846319433ce2cc3b88ed2f4b3eac0b4aca3b3c0
4
- data.tar.gz: b7a83328c30eb76699b880cb8a6a356cf61bf3e362c19c50b1f8c4dcbbc17c6d
3
+ metadata.gz: 4acdda82f537081ebb5cb73f47463dcb76aa4d13903ef59df37e9c7159e6bcef
4
+ data.tar.gz: 653ee68c860f906a56daa9c859fcd62b625bcaa32f2c7610fdd62ea57513544e
5
5
  SHA512:
6
- metadata.gz: 1a2a3316ce568a85d06eea928b5382d0a9a0b2737e2e14c01940a2f2071f8cd10d5c7a25c4f3af2878d5d453c98d70b1bfb50a6fa92b46ed7c5ca4f075fb844f
7
- data.tar.gz: 3cd77f4748d94aea53ac8685268228f112aef95e9c8b9a8aca00692d67dc10e92948fa5acef2c696cf6ce08c58920ded07a1167e3933fcc4faf9e2736c480903
6
+ metadata.gz: 64289163116f1e986cad76c3794870c7fe28ac5d2a96ad7cf433ad3bf4fb4f8cb4445930dbddd13d7e9a803df1497940df47877689a3cee5fac5f50561b3f99d
7
+ data.tar.gz: 793e0f20d1b18450a7024272a6eebb1b61e470c250e3dee740c7251c963b63914fd38ee48af2ae113a27d4046f251320267fece5b8cdd4d298222524aeb46d64
@@ -19,8 +19,9 @@ 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
+ ruby: ["2.7", "3.0", "3.1", "3.2", "3.3"]
24
25
 
25
26
  steps:
26
27
  - uses: actions/checkout@v3
@@ -30,6 +31,8 @@ jobs:
30
31
  uses: ruby/setup-ruby@v1
31
32
  with:
32
33
  ruby-version: ${{ matrix.ruby }}
34
+ - name: Install Bundler
35
+ run: gem install bundler -v $(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1 | awk '{print $1}')
33
36
  - name: Install dependencies
34
37
  run: bundle install
35
38
  - name: Run tests
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.alpha)
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
@@ -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
 
@@ -78,6 +81,14 @@ module Brightbox
78
81
  options[:y] = listeners.first[:protocol]
79
82
  end
80
83
 
84
+ if options[:b]
85
+ options[:b] = options[:b].to_i
86
+ end
87
+
88
+ if options["acme_domains"]
89
+ options["acme_domains"] = options["acme_domains"].split(",")
90
+ end
91
+
81
92
  hc_arg_lookup = {
82
93
  :k => :port,
83
94
  :y => :type,
@@ -96,7 +107,7 @@ module Brightbox
96
107
  end
97
108
  end
98
109
 
99
- # SSL argumens
110
+ # SSL arguments
100
111
  ssl_cert_path = options["ssl-cert"]
101
112
  ssl_key_path = options["ssl-key"]
102
113
 
@@ -113,16 +124,19 @@ module Brightbox
113
124
 
114
125
  msg = "Creating a new load balancer"
115
126
  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)
127
+ lb = LoadBalancer.create(
128
+ domains: options["acme_domains"],
129
+ buffer_size: options[:b],
130
+ certificate_pem: ssl_cert,
131
+ certificate_private_key: ssl_key,
132
+ healthcheck: healthcheck,
133
+ listeners: listeners,
134
+ name: options[:n],
135
+ nodes: nodes,
136
+ policy: options[:policy],
137
+ ssl_minimum_version: options["ssl-min-ver"],
138
+ sslv3: options["sslv3"]
139
+ )
126
140
  render_table([lb], global_options)
127
141
  end
128
142
  end
@@ -16,6 +16,7 @@ module Brightbox
16
16
  created_at
17
17
  deleted_at
18
18
  policy
19
+ acme_domains
19
20
  ssl_minimum_version
20
21
  ssl_issuer
21
22
  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
@@ -112,7 +112,8 @@ module Brightbox
112
112
  private
113
113
 
114
114
  def default_config_dir
115
- File.join(ENV.fetch("HOME", nil), ".brightbox")
115
+ config_dir = ENV.fetch("HOME", nil) || Dir.pwd
116
+ File.join(config_dir, ".brightbox")
116
117
  end
117
118
 
118
119
  def configured?
@@ -16,7 +16,7 @@ module Brightbox
16
16
  end
17
17
 
18
18
  def self.default_field_order
19
- %i[id owner type created_on status size name]
19
+ %i[id owner type created_on status size arch name]
20
20
  end
21
21
 
22
22
  # Filter out images that are not of the right type, account or status if the option is passed
@@ -82,7 +82,7 @@ module Brightbox
82
82
  o[:locked] = locked?
83
83
  o[:username] = username
84
84
  o[:arch] = arch
85
- o[:name] = name.to_s + " (#{arch})"
85
+ o[:name] = name.to_s
86
86
  o[:owner] = owner_id
87
87
  o[:owner] = "brightbox" if official
88
88
  o[:type] = type
@@ -3,9 +3,24 @@ module Brightbox
3
3
  def self.require_account?; true; end
4
4
 
5
5
  def self.create(options)
6
+ options.delete(:buffer_size) if options[:buffer_size].nil?
7
+ options[:buffer_size] = options[:buffer_size].to_i if options[:buffer_size]
8
+
6
9
  new(conn.load_balancers.create(options))
7
10
  end
8
11
 
12
+ def acme_domains
13
+ if attributes["acme"]
14
+ attributes["acme"]["domains"].map do |domain|
15
+ [domain["identifier"], domain["status"]].join(":")
16
+ end.join(",")
17
+ else
18
+ []
19
+ end
20
+ rescue StandardError
21
+ []
22
+ end
23
+
9
24
  def attributes
10
25
  fog_model.attributes
11
26
  end
@@ -13,6 +28,7 @@ module Brightbox
13
28
  def to_row
14
29
  attributes.merge(
15
30
  :locked => locked?,
31
+ :acme_domains => acme_domains,
16
32
  :ssl_minimum_version => ssl_minimum_version,
17
33
  :ssl_issuer => certificate_issuer,
18
34
  :ssl_subject => certificate_subject,
@@ -31,11 +47,13 @@ module Brightbox
31
47
  end
32
48
 
33
49
  def cloud_ip_ids
34
- @cloud_ip_ids ||= attributes["cloud_ips"].map { |n| n["id"] } if attributes["cloud_ips"]
50
+ cips = attributes["cloud_ips"] || attributes[:cloud_ips]
51
+ @cloud_ip_ids ||= cips.map { |n| n["id"] } if cips
35
52
  end
36
53
 
37
54
  def cloud_ips
38
- @cloud_ips ||= attributes["cloud_ips"].map { |n| n["public_ip"] } if attributes["cloud_ips"]
55
+ cips = attributes["cloud_ips"] || attributes[:cloud_ips]
56
+ @cloud_ips ||= cips.map { |n| n["public_ip"] } if cips
39
57
  end
40
58
 
41
59
  def listeners
@@ -45,7 +45,7 @@ module Brightbox
45
45
  a[:status] = fog_model.state
46
46
  a[:locked] = locked?
47
47
  a[:zone] = zone && zone["handle"]
48
- a[:hostname] = id
48
+ a[:hostname] = hostname
49
49
  a[:public_hostname] = "public.#{fqdn}" unless cloud_ips.empty?
50
50
  a[:ipv6_hostname] = ipv6_fqdn if interfaces.any? { |i| i["ipv6_address"] }
51
51
  a
@@ -1,3 +1,3 @@
1
1
  module Brightbox
2
- VERSION = "4.8.0".freeze unless defined?(Brightbox::VERSION)
2
+ VERSION = "5.0.0.alpha".freeze unless defined?(Brightbox::VERSION)
3
3
  end
@@ -11,20 +11,145 @@ describe "brightbox lbs" do
11
11
  cache_access_token(config, "f83da712e6299cda953513ec07f7a754f747d727")
12
12
  end
13
13
 
14
- context "" do
14
+ context "without required nodes arguments" do
15
15
  let(:argv) { %w[lbs create] }
16
16
 
17
17
  it "does not error" do
18
18
  expect { output }.to_not raise_error
19
+
20
+ expect(stderr).to eq("ERROR: You must specify which servers to balance connections to\n")
21
+ end
22
+ end
23
+
24
+ context "with required nodes arguments" do
25
+ let(:argv) { %w[lbs create srv-12345] }
26
+ let(:expected_args) { { nodes: [{ node: "srv-12345" }] } }
27
+
28
+ let(:json_response) do
29
+ <<~EOS
30
+ {
31
+ "id": "lba-12345",
32
+ "nodes": [
33
+ {
34
+ "id": "srv-12345"
35
+ }
36
+ ]
37
+ }
38
+ EOS
39
+ end
40
+
41
+ before do
42
+ stub_request(:post, "http://api.brightbox.localhost/1.0/load_balancers?account_id=acc-12345")
43
+ .with(:body => hash_including("nodes" => [{ "node" => "srv-12345" }]))
44
+ .to_return(:status => 202, :body => json_response)
45
+ end
46
+
47
+ it "makes request" do
48
+ expect(Brightbox::LoadBalancer).to receive(:create).with(hash_including(expected_args)).and_call_original
49
+
50
+ expect(stderr).to eq("Creating a new load balancer\n")
51
+ expect(stdout).to include("lba-12345")
52
+ end
53
+ end
54
+
55
+ context "with required nodes arguments" do
56
+ let(:argv) { %w[lbs create srv-12345] }
57
+ let(:expected_args) { { nodes: [{ node: "srv-12345" }] } }
58
+
59
+ let(:json_response) do
60
+ <<~EOS
61
+ {
62
+ "id": "lba-12345",
63
+ "nodes": [
64
+ {
65
+ "id": "srv-12345"
66
+ }
67
+ ]
68
+ }
69
+ EOS
70
+ end
71
+
72
+ before do
73
+ stub_request(:post, "http://api.brightbox.localhost/1.0/load_balancers?account_id=acc-12345")
74
+ .with(:body => hash_including("nodes" => [{ "node" => "srv-12345" }]))
75
+ .to_return(:status => 202, :body => json_response)
76
+ end
77
+
78
+ it "makes request" do
79
+ expect(Brightbox::LoadBalancer).to receive(:create).with(hash_including(expected_args)).and_call_original
80
+
81
+ expect(stderr).to eq("Creating a new load balancer\n")
82
+ expect(stdout).to include("lba-12345")
83
+ end
84
+ end
85
+
86
+ context "with multiple nodes" do
87
+ let(:argv) { %w[lbs create srv-12345 srv-54321] }
88
+ let(:expected_args) { { nodes: [{ node: "srv-12345" }, { node: "srv-54321" }] } }
89
+
90
+ let(:json_response) do
91
+ <<~EOS
92
+ {
93
+ "id": "lba-12345",
94
+ "nodes": [
95
+ {
96
+ "id": "srv-12345"
97
+ },
98
+ {
99
+ "id": "srv-54321"
100
+ }
101
+ ]
102
+ }
103
+ EOS
104
+ end
105
+
106
+ before do
107
+ stub_request(:post, "http://api.brightbox.localhost/1.0/load_balancers?account_id=acc-12345")
108
+ .with(:body => hash_including("nodes" => [{ "node" => "srv-12345" }, { "node" => "srv-54321" }]))
109
+ .to_return(:status => 202, :body => json_response)
110
+ end
111
+
112
+ it "makes request" do
113
+ expect(Brightbox::LoadBalancer).to receive(:create).with(hash_including(expected_args)).and_call_original
114
+
115
+ expect(stderr).to eq("Creating a new load balancer\n")
116
+ expect(stdout).to include("lba-12345")
19
117
  end
20
118
  end
21
119
 
22
- context "--ssl-min-ver=TLSv1.0" do
120
+ context "with --buffer_size" do
121
+ let(:argv) { %w[lbs create --buffer-size 1024 srv-12345] }
122
+ let(:expected_args) { { nodes: [{ node: "srv-12345" }], buffer_size: 1024 } }
123
+
124
+ let(:json_response) do
125
+ <<~EOS
126
+ {
127
+ "id": "lba-12345",
128
+ "buffer_size": 1024
129
+ }
130
+ EOS
131
+ end
132
+
133
+ before do
134
+ stub_request(:post, "http://api.brightbox.localhost/1.0/load_balancers?account_id=acc-12345")
135
+ .with(:body => hash_including("buffer_size" => 1024))
136
+ .to_return(:status => 202, :body => json_response)
137
+ end
138
+
139
+ it "includes buffer_size in response" do
140
+ expect(Brightbox::LoadBalancer).to receive(:create).with(hash_including(expected_args)).and_call_original
141
+
142
+ expect(stderr).to eq("Creating a new load balancer\n")
143
+ expect(stdout).to include("lba-12345")
144
+ end
145
+ end
146
+
147
+ context "with --ssl-min-ver=TLSv1.0" do
23
148
  let(:argv) { ["lbs", "create", "--ssl-min-ver", "TLSv1.0", "srv-12345"] }
24
149
  let(:expected_args) { { ssl_minimum_version: "TLSv1.0" } }
25
150
 
26
151
  let(:json_response) do
27
- <<-EOS
152
+ <<~EOS
28
153
  {
29
154
  "id":"lba-12345",
30
155
  "ssl_minimum_version":"TLSv1.0"
@@ -44,5 +169,46 @@ describe "brightbox lbs" do
44
169
  expect(stdout).to include("lba-12345")
45
170
  end
46
171
  end
172
+
173
+ context "--acme-domains=example.com" do
174
+ let(:argv) { ["lbs", "create", "--acme-domains", "example.com", "--listeners", "443:443:https:5000", "lba-12345"] }
175
+ let(:json_response) do
176
+ <<~EOS
177
+ {
178
+ "id":"lba-12345",
179
+ "acme": {
180
+ "domains": [
181
+ {
182
+ "identifier": "example.com",
183
+ "last_message": null,
184
+ "status": "pending"
185
+ }
186
+ ]
187
+ },
188
+ "certificate": null,
189
+ "listeners": [
190
+ {
191
+ "in": 443,
192
+ "out": 443,
193
+ "protocol": "https",
194
+ "proxy_protocol": null,
195
+ "timeout": 5000
196
+ }
197
+ ]
198
+ }
199
+ EOS
200
+ end
201
+
202
+ before do
203
+ stub_request(:post, "http://api.brightbox.localhost/1.0/load_balancers?account_id=acc-12345")
204
+ .with(body: hash_including(domains: ["example.com"]))
205
+ .to_return(:status => 202, :body => json_response)
206
+ end
207
+
208
+ it "includes acme_certificate_domain in response" do
209
+ expect(stderr).to eq("Creating a new load balancer\n")
210
+ expect(stdout).to include("lba-12345")
211
+ end
212
+ end
47
213
  end
48
214
  end
@@ -6,11 +6,95 @@ describe "brightbox lbs" do
6
6
  let(:stdout) { output.stdout }
7
7
  let(:stderr) { output.stderr }
8
8
 
9
- context "" do
9
+ before do
10
+ config = config_from_contents(USER_APP_CONFIG_CONTENTS)
11
+ cache_access_token(config, "f83da712e6299cda953513ec07f7a754f747d727")
12
+ end
13
+
14
+ context "without identifier argument" do
10
15
  let(:argv) { %w[lbs show] }
16
+ let(:json_response) do
17
+ <<~EOS
18
+ [
19
+ {
20
+ "id":"lba-12345",
21
+ "name":"app-lb1",
22
+ "status":"active",
23
+ "created_at":"2012-03-05T12:00:00Z",
24
+ "nodes":[
25
+ {
26
+ "id":"srv-12345",
27
+ "status":"active"
28
+ }
29
+ ]
30
+ }
31
+ ]
32
+ EOS
33
+ end
34
+
35
+ before do
36
+ stub_request(:get, "http://api.brightbox.localhost/1.0/load_balancers?account_id=acc-12345")
37
+ .to_return(:status => 200, :body => json_response)
38
+ end
39
+
40
+ it "shows load balancer details" do
41
+ aggregate_failures do
42
+ expect(stderr).to eq("")
43
+ expect(stdout).to include("id: lba-12345")
44
+ expect(stdout).to include("status: active")
45
+ expect(stdout).to include("name: app-lb1")
46
+ expect(stdout).to include("created_at: 2012-03-05T12:00Z")
47
+ expect(stdout).to include("nodes: srv-12345")
48
+ end
49
+ end
50
+ end
51
+
52
+ context "with identifier argument" do
53
+ let(:argv) { %w[lbs show lba-12345] }
54
+ let(:json_response) do
55
+ <<~EOS
56
+ {
57
+ "id":"lba-12345",
58
+ "name":"app-lb1",
59
+ "status":"active",
60
+ "created_at":"2012-03-05T12:00:00Z",
61
+ "acme": {
62
+ "domains": [
63
+ {
64
+ "identifier": "domain.test",
65
+ "status": "verified"
66
+ },
67
+ {
68
+ "identifier": "domain2.test",
69
+ "status": "verified"
70
+ }
71
+ ]
72
+ },
73
+ "nodes":[
74
+ {
75
+ "id":"srv-12345",
76
+ "status":"active"
77
+ }
78
+ ]
79
+ }
80
+ EOS
81
+ end
82
+
83
+ before do
84
+ stub_request(:get, "http://api.brightbox.localhost/1.0/load_balancers/lba-12345?account_id=acc-12345")
85
+ .to_return(:status => 200, :body => json_response)
86
+ end
11
87
 
12
- it "does not error" do
13
- expect { output }.to_not raise_error
88
+ it "shows load balancer details" do
89
+ aggregate_failures do
90
+ expect(stderr).to eq("")
91
+ expect(stdout).to include("id: lba-12345")
92
+ expect(stdout).to include("status: active")
93
+ expect(stdout).to include("name: app-lb1")
94
+ expect(stdout).to include("created_at: 2012-03-05T12:00Z")
95
+ expect(stdout).to include("nodes: srv-12345")
96
+ expect(stdout).to include("acme_domains: domain.test:verified,domain2.test:verified")
97
+ end
14
98
  end
15
99
  end
16
100
  end
@@ -23,7 +23,7 @@ describe "brightbox lbs" do
23
23
  let(:argv) { ["lbs", "update", "--ssl-min-ver", "TLSv1.0", "lba-12345"] }
24
24
 
25
25
  let(:json_response) do
26
- <<-EOS
26
+ <<~EOS
27
27
  {
28
28
  "id":"lba-12345",
29
29
  "ssl_minimum_version":"TLSv1.0"
@@ -50,7 +50,7 @@ describe "brightbox lbs" do
50
50
  let(:argv) { ["lbs", "update", "--sslv3", "lba-grt24"] }
51
51
 
52
52
  let(:json_response) do
53
- <<-EOS
53
+ <<~EOS
54
54
  {
55
55
  "id":"lba-grt24",
56
56
  "ssl_minimum_version":"TLSv1.0"
@@ -77,7 +77,7 @@ describe "brightbox lbs" do
77
77
  let(:argv) { ["lbs", "update", "--no-sslv3", "lba-kl432"] }
78
78
 
79
79
  let(:json_response) do
80
- <<-EOS
80
+ <<~EOS
81
81
  {
82
82
  "id":"lba-kl432",
83
83
  "ssl_minimum_version":"TLSv1.0"
@@ -99,5 +99,49 @@ describe "brightbox lbs" do
99
99
  expect(stdout).to include("lba-kl432")
100
100
  end
101
101
  end
102
+
103
+ context "--acme-domains=example.com" do
104
+ let(:argv) { ["lbs", "update", "--acme-domains", "example.com", "--listeners", "443:443:https:5000", "lba-12345"] }
105
+ let(:json_response) do
106
+ <<~EOS
107
+ {
108
+ "id":"lba-12345",
109
+ "acme": {
110
+ "domains": [
111
+ {
112
+ "identifier": "example.com",
113
+ "last_message": null,
114
+ "status": "pending"
115
+ }
116
+ ]
117
+ },
118
+ "certificate": null,
119
+ "listeners": [
120
+ {
121
+ "in": 443,
122
+ "out": 443,
123
+ "protocol": "https",
124
+ "proxy_protocol": null,
125
+ "timeout": 5000
126
+ }
127
+ ]
128
+ }
129
+ EOS
130
+ end
131
+
132
+ before do
133
+ stub_request(:get, "http://api.brightbox.localhost/1.0/load_balancers/lba-12345?account_id=acc-12345")
134
+ .to_return(:status => 200, :body => '{"id":"lba-12345"}')
135
+
136
+ stub_request(:put, "http://api.brightbox.localhost/1.0/load_balancers/lba-12345?account_id=acc-12345")
137
+ .with(body: hash_including(domains: ["example.com"]))
138
+ .to_return(:status => 202, :body => json_response)
139
+ end
140
+
141
+ it "includes acme_certificate_domain in response" do
142
+ expect(stderr).to eq("Updating load balancer lba-12345\n")
143
+ expect(stdout).to include("lba-12345")
144
+ end
145
+ end
102
146
  end
103
147
  end
data/spec/spec_helper.rb CHANGED
@@ -3,6 +3,7 @@ LIB_DIR = File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
3
3
  $LOAD_PATH.unshift LIB_DIR unless
4
4
  $LOAD_PATH.include?(LIB_DIR) || $LOAD_PATH.include?(File.expand_path(LIB_DIR))
5
5
 
6
+ require "simplecov"
6
7
  require "brightbox_cli"
7
8
  require "json"
8
9
  require "tmpdir"
@@ -28,6 +29,17 @@ TEST_RUNNER_HOME = ENV.fetch("HOME", nil)
28
29
  # Reduce the default fog timeout
29
30
  Fog.timeout = 10
30
31
 
32
+ require "fog/brightbox"
33
+
34
+ SimpleCov.start do
35
+ add_filter "/spec/"
36
+ add_filter "/config/"
37
+ add_filter "/vendor/"
38
+ end
39
+
40
+ # Currently just above 80% coverage - don't make it worse
41
+ SimpleCov.minimum_coverage 80
42
+
31
43
  RSpec.configure do |config|
32
44
  config.include CommonHelpers
33
45
  config.include ConfigHelpers
@@ -2,25 +2,45 @@ require "spec_helper"
2
2
 
3
3
  describe Brightbox::BBConfig do
4
4
  describe "#config_directory" do
5
+ context "when HOME is not set" do
6
+ let(:working_dir) { Dir.mktmpdir("working") }
7
+
8
+ before do
9
+ allow(Dir).to receive(:pwd).and_return(working_dir)
10
+ allow(ENV).to receive(:fetch).with("HOME", nil).and_return(nil)
11
+ end
12
+
13
+ it "returns current directory" do
14
+ config = Brightbox::BBConfig.new
15
+
16
+ expect(config.config_directory).to start_with(working_dir)
17
+ expect(config.config_directory).to end_with(".brightbox")
18
+ end
19
+ end
20
+
5
21
  context "when default location is used" do
6
22
  it "returns a String of the users `.brightbox` directory" do
7
23
  config = Brightbox::BBConfig.new
8
24
 
9
25
  expanded_path = File.expand_path("~/.brightbox")
10
- expect(config.config_directory).to eql(expanded_path)
26
+ expect(config.config_directory).to eq(expanded_path)
11
27
  end
12
28
  end
13
29
 
14
30
  context "when absolute custom location is set" do
15
31
  let(:custom_dir) { Dir.mktmpdir("custom") }
16
32
 
33
+ after do
34
+ FileUtils.rm_rf(custom_dir)
35
+ end
36
+
17
37
  it "returns a String of the expanded directory" do
18
38
  config_options = {
19
39
  :directory => custom_dir
20
40
  }
21
41
  config = Brightbox::BBConfig.new(config_options)
22
42
 
23
- expect(config.config_directory).to eql(custom_dir)
43
+ expect(config.config_directory).to eq(custom_dir)
24
44
  end
25
45
  end
26
46
 
@@ -32,7 +52,7 @@ describe Brightbox::BBConfig do
32
52
  config = Brightbox::BBConfig.new(config_options)
33
53
 
34
54
  expanded_path = File.expand_path("~/.cli_config")
35
- expect(config.config_directory).to eql(expanded_path)
55
+ expect(config.config_directory).to eq(expanded_path)
36
56
  end
37
57
  end
38
58
  end
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+ require "fog/brightbox/models/compute/server"
3
+
4
+ RSpec.describe Brightbox::Server, "#hostname" do
5
+ let(:fog_model) { Fog::Brightbox::Compute::Server.new(fog_settings) }
6
+ let(:server) { described_class.new(fog_model) }
7
+
8
+ context "when hostname is not equal to id" do
9
+ let(:fog_settings) do
10
+ {
11
+ id: "srv-12345",
12
+ cloud_ips: [],
13
+ hostname: "server-hostname",
14
+ image_id: "img-12345",
15
+ interfaces: [],
16
+ server_type: "typ-12345"
17
+ }
18
+ end
19
+
20
+ it "returns the hostname" do
21
+ expect(server.attributes[:id]).to eq("srv-12345")
22
+ expect(server.attributes[:hostname]).to eq("server-hostname")
23
+
24
+ expect(server.hostname).to eq("server-hostname")
25
+ end
26
+ end
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brightbox-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.0
4
+ version: 5.0.0.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Leach
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-10-23 00:00:00.000000000 Z
12
+ date: 2024-12-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog-brightbox
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 1.11.0
20
+ version: 1.12.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 1.11.0
27
+ version: 1.12.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: fog-core
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -130,21 +130,21 @@ dependencies:
130
130
  - !ruby/object:Gem::Version
131
131
  version: '1.11'
132
132
  - !ruby/object:Gem::Dependency
133
- name: dry-inflector
133
+ name: mocha
134
134
  requirement: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: 0.2.0
139
- type: :runtime
138
+ version: '0'
139
+ type: :development
140
140
  prerelease: false
141
141
  version_requirements: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: 0.2.0
145
+ version: '0'
146
146
  - !ruby/object:Gem::Dependency
147
- name: mocha
147
+ name: pry-remote
148
148
  requirement: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - ">="
@@ -158,7 +158,7 @@ dependencies:
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  - !ruby/object:Gem::Dependency
161
- name: pry-remote
161
+ name: rake
162
162
  requirement: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - ">="
@@ -172,7 +172,7 @@ dependencies:
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  - !ruby/object:Gem::Dependency
175
- name: rake
175
+ name: rspec
176
176
  requirement: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - ">="
@@ -186,7 +186,7 @@ dependencies:
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  - !ruby/object:Gem::Dependency
189
- name: rspec
189
+ name: rubocop
190
190
  requirement: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - ">="
@@ -200,7 +200,7 @@ dependencies:
200
200
  - !ruby/object:Gem::Version
201
201
  version: '0'
202
202
  - !ruby/object:Gem::Dependency
203
- name: rubocop
203
+ name: rubocop-rake
204
204
  requirement: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - ">="
@@ -214,7 +214,7 @@ dependencies:
214
214
  - !ruby/object:Gem::Version
215
215
  version: '0'
216
216
  - !ruby/object:Gem::Dependency
217
- name: rubocop-rake
217
+ name: rubocop-rspec
218
218
  requirement: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - ">="
@@ -228,7 +228,7 @@ dependencies:
228
228
  - !ruby/object:Gem::Version
229
229
  version: '0'
230
230
  - !ruby/object:Gem::Dependency
231
- name: rubocop-rspec
231
+ name: simplecov
232
232
  requirement: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - ">="
@@ -781,6 +781,7 @@ files:
781
781
  - spec/unit/brightbox/server/destroy_spec.rb
782
782
  - spec/unit/brightbox/server/find_or_call_spec.rb
783
783
  - spec/unit/brightbox/server/find_spec.rb
784
+ - spec/unit/brightbox/server/hostname_spec.rb
784
785
  - spec/unit/brightbox/server/shutdown_spec.rb
785
786
  - spec/unit/brightbox/server/start_spec.rb
786
787
  - spec/unit/brightbox/server/stop_spec.rb
@@ -812,14 +813,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
812
813
  requirements:
813
814
  - - ">="
814
815
  - !ruby/object:Gem::Version
815
- version: '2.5'
816
+ version: '2.7'
816
817
  required_rubygems_version: !ruby/object:Gem::Requirement
817
818
  requirements:
818
- - - ">="
819
+ - - ">"
819
820
  - !ruby/object:Gem::Version
820
- version: '0'
821
+ version: 1.3.1
821
822
  requirements: []
822
- rubygems_version: 3.5.16
823
+ rubygems_version: 3.4.19
823
824
  signing_key:
824
825
  specification_version: 4
825
826
  summary: The Brightbox cloud management system
@@ -1149,6 +1150,7 @@ test_files:
1149
1150
  - spec/unit/brightbox/server/destroy_spec.rb
1150
1151
  - spec/unit/brightbox/server/find_or_call_spec.rb
1151
1152
  - spec/unit/brightbox/server/find_spec.rb
1153
+ - spec/unit/brightbox/server/hostname_spec.rb
1152
1154
  - spec/unit/brightbox/server/shutdown_spec.rb
1153
1155
  - spec/unit/brightbox/server/start_spec.rb
1154
1156
  - spec/unit/brightbox/server/stop_spec.rb