brightbox-cli 4.4.0 → 4.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +3 -3
- data/brightbox-cli.gemspec +1 -1
- data/lib/brightbox-cli/commands/sql/instances_reset.rb +33 -0
- data/lib/brightbox-cli/commands/sql/instances_resize.rb +42 -0
- data/lib/brightbox-cli/database_server.rb +8 -0
- data/lib/brightbox-cli/version.rb +1 -1
- data/locales/en.yml +17 -0
- data/spec/commands/sql/instances/reset_spec.rb +87 -0
- data/spec/commands/sql/instances/resize_spec.rb +112 -0
- metadata +11 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0ce8d035bac2e5f7df7990bbb5d1d726e3635b8a1bae0bea5ab2afa764755bc
|
4
|
+
data.tar.gz: 99eb62ee760ca495bcf2d5f38adf3eb2b1b5f95c0587b1acf1bc796db779b2ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3630fd90082b69c561736854708c8132b7cb08e346bce2ea5f97318ce3478cc0fdbdc2840e393bf0816064e9894ebc857d866bebdfaf416cc8781e4914b39a5
|
7
|
+
data.tar.gz: 5188e419ae8dff029ddf0bf2ec1c8806774e50462628e4d0f5681ac42931505f5218fee300256755830f9c69c3041e4ec39af9ee64780c8fe2e13f5b0e3e9ee0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
### v4.5.0.rc1 / 2023-01-26
|
2
|
+
|
3
|
+
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.4.0...v4.5.0)
|
4
|
+
|
5
|
+
Enhancements:
|
6
|
+
|
7
|
+
* Added `sql instances reset` subcommand for restarting DBMS on a database server.
|
8
|
+
* Added `sql instances resize` subcommand for increasing database server resources.
|
9
|
+
|
1
10
|
### v4.4.0 / 2023-01-26
|
2
11
|
|
3
12
|
[Full Changelog](https://github.com/brightbox/brightbox-cli/compare/v4.3.2...v4.4.0)
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
brightbox-cli (4.
|
4
|
+
brightbox-cli (4.5.0.rc1)
|
5
5
|
dry-inflector (= 0.2.0)
|
6
|
-
fog-brightbox (>= 1.
|
6
|
+
fog-brightbox (>= 1.11.0)
|
7
7
|
fog-core (< 2.0)
|
8
8
|
gli (~> 2.21)
|
9
9
|
highline (~> 2.0)
|
@@ -26,7 +26,7 @@ GEM
|
|
26
26
|
diff-lcs (1.5.0)
|
27
27
|
dry-inflector (0.2.0)
|
28
28
|
excon (0.97.2)
|
29
|
-
fog-brightbox (1.
|
29
|
+
fog-brightbox (1.11.0)
|
30
30
|
dry-inflector
|
31
31
|
fog-core (>= 1.45, < 3.0)
|
32
32
|
fog-json
|
data/brightbox-cli.gemspec
CHANGED
@@ -21,7 +21,7 @@ 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.11.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"
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Brightbox
|
2
|
+
command [:sql] do |product|
|
3
|
+
product.command [:instances] do |cmd|
|
4
|
+
cmd.desc I18n.t("sql.instances.reset_password.desc")
|
5
|
+
cmd.arg_name "server-id"
|
6
|
+
cmd.command [:reset] do |c|
|
7
|
+
c.action do |global_options, _options, args|
|
8
|
+
dbs_id = args.shift
|
9
|
+
|
10
|
+
unless dbs_id =~ /^dbs-/
|
11
|
+
raise I18n.t("sql.instances.args.invalid")
|
12
|
+
end
|
13
|
+
|
14
|
+
server = DatabaseServer.find dbs_id
|
15
|
+
|
16
|
+
info I18n.t("sql.instances.reset.acting", database_server: server)
|
17
|
+
begin
|
18
|
+
server.reset
|
19
|
+
rescue Brightbox::Api::Conflict
|
20
|
+
error I18n.t("sql.instances.reset.failed", database_server: server)
|
21
|
+
end
|
22
|
+
|
23
|
+
table_options = global_options.merge(
|
24
|
+
:vertical => true,
|
25
|
+
:fields => DatabaseServer.detailed_fields
|
26
|
+
)
|
27
|
+
|
28
|
+
render_table([server], table_options)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Brightbox
|
2
|
+
command [:sql] do |product|
|
3
|
+
product.command [:instances] do |cmd|
|
4
|
+
cmd.desc I18n.t("sql.instances.reset_password.desc")
|
5
|
+
cmd.arg_name "server-id"
|
6
|
+
cmd.command [:resize] do |c|
|
7
|
+
# Database type
|
8
|
+
c.desc I18n.t("sql.instances.options.type.desc")
|
9
|
+
c.flag %i[t type]
|
10
|
+
|
11
|
+
c.action do |global_options, options, args|
|
12
|
+
dbs_id = args.shift
|
13
|
+
|
14
|
+
unless dbs_id =~ /^dbs-/
|
15
|
+
raise I18n.t("sql.instances.args.invalid")
|
16
|
+
end
|
17
|
+
|
18
|
+
new_type = options[:type]
|
19
|
+
unless new_type =~ /^dbt-/
|
20
|
+
raise I18n.t("sql.instances.options.type.invalid")
|
21
|
+
end
|
22
|
+
|
23
|
+
server = DatabaseServer.find dbs_id
|
24
|
+
|
25
|
+
info I18n.t("sql.instances.resize.acting", database_server: server)
|
26
|
+
begin
|
27
|
+
server.resize(new_type: new_type)
|
28
|
+
rescue Brightbox::Api::Conflict
|
29
|
+
error I18n.t("sql.instances.resize.failed", database_server: server)
|
30
|
+
end
|
31
|
+
|
32
|
+
table_options = global_options.merge(
|
33
|
+
:vertical => true,
|
34
|
+
:fields => DatabaseServer.detailed_fields
|
35
|
+
)
|
36
|
+
|
37
|
+
render_table([server], table_options)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -24,10 +24,18 @@ module Brightbox
|
|
24
24
|
self
|
25
25
|
end
|
26
26
|
|
27
|
+
def reset
|
28
|
+
fog_model.reset
|
29
|
+
end
|
30
|
+
|
27
31
|
def reset_password
|
28
32
|
fog_model.reset_password
|
29
33
|
end
|
30
34
|
|
35
|
+
def resize(options)
|
36
|
+
fog_model.resize(options[:new_type])
|
37
|
+
end
|
38
|
+
|
31
39
|
def destroy
|
32
40
|
fog_model.destroy
|
33
41
|
end
|
data/locales/en.yml
CHANGED
@@ -207,6 +207,14 @@ en:
|
|
207
207
|
desc: Manage an account's Cloud SQL instances and snapshots
|
208
208
|
instances:
|
209
209
|
desc: Manage Cloud SQL instances
|
210
|
+
args:
|
211
|
+
one: <sql-instance>
|
212
|
+
optional: "[<sql-instance>...]"
|
213
|
+
many: <sql-instance>...
|
214
|
+
specify_one_id_first: You must specify the SQL instance ID as the first argument
|
215
|
+
specify_many_ids: You must specify SQL instance IDs as arguments
|
216
|
+
invalid: You must specify a valid SQL instance ID as the first argument
|
217
|
+
unknown_id: Couldn't find %{database_server}
|
210
218
|
options:
|
211
219
|
allow_access:
|
212
220
|
desc: Comma separated list of IPs or IDs for servers or groups to allow access
|
@@ -230,6 +238,7 @@ en:
|
|
230
238
|
desc: Clear an existing snapshots schedule
|
231
239
|
type:
|
232
240
|
desc: ID of a Cloud SQL type
|
241
|
+
invalid: Cloud SQL type format is invalid
|
233
242
|
zone:
|
234
243
|
desc: Zone to locate the instance in
|
235
244
|
create:
|
@@ -240,8 +249,16 @@ en:
|
|
240
249
|
desc: Lock Cloud SQL instances
|
241
250
|
list:
|
242
251
|
desc: List Cloud SQL instances
|
252
|
+
reset:
|
253
|
+
desc: Reset a Cloud SQL instance
|
254
|
+
acting: Resetting %{database_server}
|
255
|
+
failed: Could not reset %{database_server}
|
243
256
|
reset_password:
|
244
257
|
desc: Reset the admin password of a Cloud SQL instance
|
258
|
+
resize:
|
259
|
+
desc: Resize a Cloud SQL instance to use a new type
|
260
|
+
acting: Resizing %{database_server}
|
261
|
+
failed: Could not resize %{database_server}
|
245
262
|
show:
|
246
263
|
desc: Show details of Cloud SQL instances
|
247
264
|
snapshot:
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "brightbox sql instances reset" do
|
4
|
+
let(:output) { FauxIO.new { Brightbox.run(argv) } }
|
5
|
+
let(:stdout) { output.stdout }
|
6
|
+
let(:stderr) { output.stderr }
|
7
|
+
|
8
|
+
before do
|
9
|
+
config_from_contents(API_CLIENT_CONFIG_CONTENTS)
|
10
|
+
|
11
|
+
stub_request(:post, "http://api.brightbox.localhost/token")
|
12
|
+
.to_return(
|
13
|
+
status: 200,
|
14
|
+
body: JSON.dump(
|
15
|
+
access_token: "ACCESS-TOKEN",
|
16
|
+
refresh_token: "REFRESH_TOKEN"
|
17
|
+
)
|
18
|
+
)
|
19
|
+
|
20
|
+
Brightbox.config.reauthenticate
|
21
|
+
end
|
22
|
+
|
23
|
+
context "without arguments" do
|
24
|
+
let(:argv) { %w[sql instances reset] }
|
25
|
+
|
26
|
+
it "does not error" do
|
27
|
+
expect { output }.to_not raise_error
|
28
|
+
|
29
|
+
expect(stderr).to eq("ERROR: You must specify a valid SQL instance ID as the first argument\n")
|
30
|
+
|
31
|
+
expect(stdout).to match("")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "with invalid ID" do
|
36
|
+
let(:argv) { %w[sql instances reset dbs-l3kd4] }
|
37
|
+
|
38
|
+
before do
|
39
|
+
stub_request(:get, "http://api.brightbox.localhost/1.0/database_servers/dbs-l3kd4")
|
40
|
+
.with(query: hash_including(account_id: "acc-12345"))
|
41
|
+
.to_return(
|
42
|
+
status: 404,
|
43
|
+
body: ""
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "does not error" do
|
48
|
+
expect { output }.to_not raise_error
|
49
|
+
|
50
|
+
expect(stderr).to eq("ERROR: Couldn't find 'dbs-l3kd4'\n")
|
51
|
+
|
52
|
+
expect(stdout).to match("")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "with valid ID" do
|
57
|
+
let(:argv) { %w[sql instances reset dbs-po953] }
|
58
|
+
|
59
|
+
before do
|
60
|
+
stub_request(:get, "http://api.brightbox.localhost/1.0/database_servers/dbs-po953")
|
61
|
+
.with(query: hash_including(account_id: "acc-12345"))
|
62
|
+
.to_return(
|
63
|
+
status: 200,
|
64
|
+
body: {
|
65
|
+
id: "dbs-po953"
|
66
|
+
}.to_json
|
67
|
+
)
|
68
|
+
|
69
|
+
stub_request(:post, "http://api.brightbox.localhost/1.0/database_servers/dbs-po953/reset")
|
70
|
+
.with(query: hash_including(account_id: "acc-12345"))
|
71
|
+
.to_return(
|
72
|
+
status: 202,
|
73
|
+
body: {
|
74
|
+
id: "dbs-po953"
|
75
|
+
}.to_json
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "does not error" do
|
80
|
+
expect { output }.to_not raise_error
|
81
|
+
|
82
|
+
expect(stderr).to eq("Resetting dbs-po953\n")
|
83
|
+
|
84
|
+
expect(stdout).to match("dbs-po953")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "brightbox sql instances resize" do
|
4
|
+
let(:output) { FauxIO.new { Brightbox.run(argv) } }
|
5
|
+
let(:stdout) { output.stdout }
|
6
|
+
let(:stderr) { output.stderr }
|
7
|
+
|
8
|
+
before do
|
9
|
+
config_from_contents(API_CLIENT_CONFIG_CONTENTS)
|
10
|
+
|
11
|
+
stub_request(:post, "http://api.brightbox.localhost/token")
|
12
|
+
.to_return(
|
13
|
+
status: 200,
|
14
|
+
body: JSON.dump(
|
15
|
+
access_token: "ACCESS-TOKEN",
|
16
|
+
refresh_token: "REFRESH_TOKEN"
|
17
|
+
)
|
18
|
+
)
|
19
|
+
|
20
|
+
Brightbox.config.reauthenticate
|
21
|
+
end
|
22
|
+
|
23
|
+
context "without arguments" do
|
24
|
+
let(:argv) { %w[sql instances resize] }
|
25
|
+
|
26
|
+
it "does not error" do
|
27
|
+
expect { output }.to_not raise_error
|
28
|
+
|
29
|
+
expect(stderr).to eq("ERROR: You must specify a valid SQL instance ID as the first argument\n")
|
30
|
+
|
31
|
+
expect(stdout).to match("")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "with invalid ID" do
|
36
|
+
let(:argv) { %w[sql instances resize --type dbt-12345 dbs-xsd23] }
|
37
|
+
|
38
|
+
before do
|
39
|
+
stub_request(:get, "http://api.brightbox.localhost/1.0/database_servers/dbs-xsd23")
|
40
|
+
.with(query: hash_including(account_id: "acc-12345"))
|
41
|
+
.to_return(
|
42
|
+
status: 404,
|
43
|
+
body: ""
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "does not error" do
|
48
|
+
expect { output }.to_not raise_error
|
49
|
+
|
50
|
+
expect(stderr).to eq("ERROR: Couldn't find 'dbs-xsd23'\n")
|
51
|
+
|
52
|
+
expect(stdout).to match("")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "with valid ID and invalid 'type'" do
|
57
|
+
let(:argv) { %w[sql instances resize --type embiggen dbs-e23ss] }
|
58
|
+
|
59
|
+
it "does not error" do
|
60
|
+
expect { output }.to_not raise_error
|
61
|
+
|
62
|
+
expect(stderr).to eq("ERROR: Cloud SQL type format is invalid\n")
|
63
|
+
|
64
|
+
expect(stdout).to match("")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "with valid ID and 'type'" do
|
69
|
+
let(:argv) { %w[sql instances resize --type dbt-abcde dbs-zzasa] }
|
70
|
+
|
71
|
+
before do
|
72
|
+
stub_request(:get, "http://api.brightbox.localhost/1.0/database_servers/dbs-zzasa")
|
73
|
+
.with(query: hash_including(account_id: "acc-12345"))
|
74
|
+
.to_return(
|
75
|
+
status: 200,
|
76
|
+
body: {
|
77
|
+
id: "dbs-zzasa",
|
78
|
+
database_type: "dbt-12345"
|
79
|
+
}.to_json
|
80
|
+
)
|
81
|
+
.to_return(
|
82
|
+
status: 200,
|
83
|
+
body: {
|
84
|
+
id: "dbs-zzasa",
|
85
|
+
database_type: "dbt-abcde"
|
86
|
+
}.to_json
|
87
|
+
)
|
88
|
+
|
89
|
+
stub_request(:post, "http://api.brightbox.localhost/1.0/database_servers/dbs-zzasa/resize")
|
90
|
+
.with(query: hash_including(account_id: "acc-12345"),
|
91
|
+
body: {
|
92
|
+
new_type: "dbt-abcde"
|
93
|
+
}
|
94
|
+
)
|
95
|
+
.to_return(
|
96
|
+
status: 202,
|
97
|
+
body: {
|
98
|
+
id: "dbs-zzasa",
|
99
|
+
database_type: "dbt-abcde"
|
100
|
+
}.to_json
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "does not error" do
|
105
|
+
expect { output }.to_not raise_error
|
106
|
+
|
107
|
+
expect(stderr).to eq("Resizing dbs-zzasa\n")
|
108
|
+
|
109
|
+
expect(stdout).to match("dbs-zzasa")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
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.
|
4
|
+
version: 4.5.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Leach
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.
|
20
|
+
version: 1.11.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.
|
27
|
+
version: 1.11.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: fog-core
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -371,7 +371,9 @@ files:
|
|
371
371
|
- lib/brightbox-cli/commands/sql/instances_destroy.rb
|
372
372
|
- lib/brightbox-cli/commands/sql/instances_list.rb
|
373
373
|
- lib/brightbox-cli/commands/sql/instances_locking.rb
|
374
|
+
- lib/brightbox-cli/commands/sql/instances_reset.rb
|
374
375
|
- lib/brightbox-cli/commands/sql/instances_reset_password.rb
|
376
|
+
- lib/brightbox-cli/commands/sql/instances_resize.rb
|
375
377
|
- lib/brightbox-cli/commands/sql/instances_show.rb
|
376
378
|
- lib/brightbox-cli/commands/sql/instances_snapshot.rb
|
377
379
|
- lib/brightbox-cli/commands/sql/instances_update.rb
|
@@ -656,6 +658,8 @@ files:
|
|
656
658
|
- spec/commands/servers/update_spec.rb
|
657
659
|
- spec/commands/sql/instances/create_spec.rb
|
658
660
|
- spec/commands/sql/instances/locking_spec.rb
|
661
|
+
- spec/commands/sql/instances/reset_spec.rb
|
662
|
+
- spec/commands/sql/instances/resize_spec.rb
|
659
663
|
- spec/commands/sql/instances/show_spec.rb
|
660
664
|
- spec/commands/sql/instances/snapshot_spec.rb
|
661
665
|
- spec/commands/sql/instances/update_spec.rb
|
@@ -813,9 +817,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
813
817
|
version: '2.5'
|
814
818
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
815
819
|
requirements:
|
816
|
-
- - "
|
820
|
+
- - ">"
|
817
821
|
- !ruby/object:Gem::Version
|
818
|
-
version:
|
822
|
+
version: 1.3.1
|
819
823
|
requirements: []
|
820
824
|
rubygems_version: 3.3.20
|
821
825
|
signing_key:
|
@@ -1023,6 +1027,8 @@ test_files:
|
|
1023
1027
|
- spec/commands/servers/update_spec.rb
|
1024
1028
|
- spec/commands/sql/instances/create_spec.rb
|
1025
1029
|
- spec/commands/sql/instances/locking_spec.rb
|
1030
|
+
- spec/commands/sql/instances/reset_spec.rb
|
1031
|
+
- spec/commands/sql/instances/resize_spec.rb
|
1026
1032
|
- spec/commands/sql/instances/show_spec.rb
|
1027
1033
|
- spec/commands/sql/instances/snapshot_spec.rb
|
1028
1034
|
- spec/commands/sql/instances/update_spec.rb
|