kontena-cli 1.4.0.pre6 → 1.4.0.pre7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/VERSION +1 -1
- data/bin/kontena +1 -1
- data/kontena-cli.gemspec +3 -3
- data/lib/kontena/cli/certificate/authorize_command.rb +67 -6
- data/lib/kontena/cli/certificate/get_command.rb +7 -0
- data/lib/kontena/cli/certificate/list_command.rb +75 -0
- data/lib/kontena/cli/certificate/register_command.rb +13 -2
- data/lib/kontena/cli/certificate/request_command.rb +20 -0
- data/lib/kontena/cli/certificate/show_command.rb +19 -0
- data/lib/kontena/cli/certificate_command.rb +4 -1
- data/lib/kontena/cli/cloud/master/add_command.rb +1 -1
- data/lib/kontena/cli/common.rb +21 -33
- data/lib/kontena/cli/etcd/health_command.rb +21 -27
- data/lib/kontena/cli/helpers/exec_helper.rb +15 -6
- data/lib/kontena/cli/helpers/health_helper.rb +12 -0
- data/lib/kontena/cli/helpers/log_helper.rb +2 -2
- data/lib/kontena/cli/helpers/time_helper.rb +29 -0
- data/lib/kontena/cli/master/init_cloud_command.rb +19 -0
- data/lib/kontena/cli/master/list_command.rb +1 -1
- data/lib/kontena/cli/master/ssh_command.rb +3 -1
- data/lib/kontena/cli/master/use_command.rb +1 -2
- data/lib/kontena/cli/node_command.rb +1 -0
- data/lib/kontena/cli/nodes/health_command.rb +28 -13
- data/lib/kontena/cli/nodes/list_command.rb +19 -3
- data/lib/kontena/cli/nodes/show_command.rb +4 -2
- data/lib/kontena/cli/nodes/ssh_command.rb +5 -2
- data/lib/kontena/cli/nodes/update_command.rb +2 -0
- data/lib/kontena/cli/plugins/install_command.rb +11 -8
- data/lib/kontena/cli/plugins/list_command.rb +5 -3
- data/lib/kontena/cli/plugins/search_command.rb +4 -2
- data/lib/kontena/cli/plugins/show_command.rb +17 -0
- data/lib/kontena/cli/plugins/uninstall_command.rb +9 -13
- data/lib/kontena/cli/registry/create_command.rb +1 -1
- data/lib/kontena/cli/services/create_command.rb +6 -0
- data/lib/kontena/cli/services/services_helper.rb +33 -6
- data/lib/kontena/cli/services/update_command.rb +6 -0
- data/lib/kontena/cli/stacks/build_command.rb +3 -3
- data/lib/kontena/cli/stacks/common.rb +105 -90
- data/lib/kontena/cli/stacks/deploy_command.rb +7 -3
- data/lib/kontena/cli/stacks/install_command.rb +39 -6
- data/lib/kontena/cli/stacks/list_command.rb +36 -4
- data/lib/kontena/cli/stacks/logs_command.rb +9 -2
- data/lib/kontena/cli/stacks/registry/pull_command.rb +2 -2
- data/lib/kontena/cli/stacks/registry/push_command.rb +20 -9
- data/lib/kontena/cli/stacks/registry/remove_command.rb +4 -4
- data/lib/kontena/cli/stacks/registry/show_command.rb +4 -4
- data/lib/kontena/cli/stacks/remove_command.rb +27 -1
- data/lib/kontena/cli/stacks/service_generator.rb +12 -2
- data/lib/kontena/cli/stacks/show_command.rb +35 -5
- data/lib/kontena/cli/stacks/stack_name.rb +71 -0
- data/lib/kontena/cli/stacks/upgrade_command.rb +127 -14
- data/lib/kontena/cli/stacks/validate_command.rb +38 -10
- data/lib/kontena/cli/stacks/yaml/custom_validators/certificates_validator.rb +22 -0
- data/lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb +1 -2
- data/lib/kontena/cli/stacks/yaml/reader.rb +211 -185
- data/lib/kontena/cli/stacks/yaml/service_extender.rb +6 -12
- data/lib/kontena/cli/stacks/yaml/stack_file_loader.rb +97 -0
- data/lib/kontena/cli/stacks/yaml/stack_file_loader/file_loader.rb +41 -0
- data/lib/kontena/cli/stacks/yaml/stack_file_loader/registry_loader.rb +24 -0
- data/lib/kontena/cli/stacks/yaml/stack_file_loader/uri_loader.rb +23 -0
- data/lib/kontena/cli/stacks/yaml/validations.rb +16 -0
- data/lib/kontena/cli/stacks/yaml/validator_v3.rb +25 -8
- data/lib/kontena/client.rb +2 -2
- data/lib/kontena/command.rb +11 -0
- data/lib/kontena/main_command.rb +3 -1
- data/lib/kontena/plugin_manager.rb +11 -198
- data/lib/kontena/plugin_manager/cleaner.rb +33 -0
- data/lib/kontena/plugin_manager/common.rb +86 -0
- data/lib/kontena/plugin_manager/installer.rb +54 -0
- data/lib/kontena/plugin_manager/loader.rb +93 -0
- data/lib/kontena/plugin_manager/rubygems_client.rb +42 -23
- data/lib/kontena/plugin_manager/uninstaller.rb +34 -0
- data/lib/kontena/util.rb +24 -0
- data/lib/kontena_cli.rb +1 -0
- data/omnibus/config/projects/kontena.rb +7 -1
- data/omnibus/config/software/{kontena.rb → kontena-cli.rb} +2 -0
- data/spec/fixtures/api/node.json +2 -1
- data/spec/fixtures/stack-internal-extend.yml +6 -1
- data/spec/fixtures/stack-with-dependencies-dep-1-1.yml +8 -0
- data/spec/fixtures/stack-with-dependencies-dep-1.yml +17 -0
- data/spec/fixtures/stack-with-dependencies-dep-2.yml +8 -0
- data/spec/fixtures/stack-with-dependencies-dep-3.yml +5 -0
- data/spec/fixtures/stack-with-dependencies-dep_2-removed.yml +17 -0
- data/spec/fixtures/stack-with-dependencies-dep_3-added.yml +25 -0
- data/spec/fixtures/stack-with-dependencies.yml +22 -0
- data/spec/fixtures/stack-with-variables.yml +3 -0
- data/spec/kontena/cli/etcd/health_command_spec.rb +45 -33
- data/spec/kontena/cli/helpers/exec_helper_spec.rb +2 -1
- data/spec/kontena/cli/master/init_cloud_command_spec.rb +14 -0
- data/spec/kontena/cli/nodes/health_command_spec.rb +74 -10
- data/spec/kontena/cli/nodes/list_command_spec.rb +381 -232
- data/spec/kontena/cli/nodes/show_command_spec.rb +31 -0
- data/spec/kontena/cli/nodes/ssh_command_spec.rb +18 -3
- data/spec/kontena/cli/plugins/install_command_spec.rb +1 -1
- data/spec/kontena/cli/stacks/build_command_spec.rb +6 -12
- data/spec/kontena/cli/stacks/common_spec.rb +42 -69
- data/spec/kontena/cli/stacks/install_command_spec.rb +57 -31
- data/spec/kontena/cli/stacks/list_command_spec.rb +44 -0
- data/spec/kontena/cli/stacks/logs_command_spec.rb +12 -1
- data/spec/kontena/cli/stacks/remove_command_spec.rb +39 -0
- data/spec/kontena/cli/stacks/show_command_spec.rb +16 -0
- data/spec/kontena/cli/stacks/stack_name_spec.rb +21 -0
- data/spec/kontena/cli/stacks/upgrade_command_spec.rb +73 -56
- data/spec/kontena/cli/stacks/validate_command_spec.rb +81 -0
- data/spec/kontena/cli/stacks/yaml/custom_validators/affinities_validator_spec.rb +22 -0
- data/spec/kontena/cli/stacks/yaml/reader_spec.rb +173 -169
- data/spec/kontena/cli/stacks/yaml/service_extender_spec.rb +12 -3
- data/spec/kontena/cli/stacks/yaml/stack_file_loader/file_loader_spec.rb +47 -0
- data/spec/kontena/cli/stacks/yaml/stack_file_loader/registry_loader_spec.rb +53 -0
- data/spec/kontena/cli/stacks/yaml/stack_file_loader/uri_loader_spec.rb +53 -0
- data/spec/kontena/cli/stacks/yaml/stack_file_loader_spec.rb +104 -0
- data/spec/kontena/cli/stacks/yaml/validator_v3_spec.rb +19 -0
- data/spec/kontena/plugin_manager/cleaner_spec.rb +20 -0
- data/spec/kontena/plugin_manager/common_spec.rb +39 -0
- data/spec/kontena/plugin_manager/installer_spec.rb +50 -0
- data/spec/kontena/plugin_manager/loader_spec.rb +5 -0
- data/spec/kontena/plugin_manager/rubygems_client_spec.rb +11 -25
- data/spec/kontena/plugin_manager/uninstaller_spec.rb +19 -0
- data/spec/kontena/plugin_manager_spec.rb +7 -7
- metadata +64 -97
- data/lib/kontena/cli/app_command.rb +0 -22
- data/lib/kontena/cli/apps/build_command.rb +0 -28
- data/lib/kontena/cli/apps/common.rb +0 -172
- data/lib/kontena/cli/apps/config_command.rb +0 -25
- data/lib/kontena/cli/apps/deploy_command.rb +0 -137
- data/lib/kontena/cli/apps/docker_compose_generator.rb +0 -61
- data/lib/kontena/cli/apps/docker_helper.rb +0 -80
- data/lib/kontena/cli/apps/dockerfile_generator.rb +0 -16
- data/lib/kontena/cli/apps/init_command.rb +0 -89
- data/lib/kontena/cli/apps/kontena_yml_generator.rb +0 -105
- data/lib/kontena/cli/apps/list_command.rb +0 -59
- data/lib/kontena/cli/apps/logs_command.rb +0 -37
- data/lib/kontena/cli/apps/monitor_command.rb +0 -93
- data/lib/kontena/cli/apps/remove_command.rb +0 -74
- data/lib/kontena/cli/apps/restart_command.rb +0 -39
- data/lib/kontena/cli/apps/scale_command.rb +0 -33
- data/lib/kontena/cli/apps/service_generator.rb +0 -114
- data/lib/kontena/cli/apps/service_generator_v2.rb +0 -27
- data/lib/kontena/cli/apps/show_command.rb +0 -23
- data/lib/kontena/cli/apps/start_command.rb +0 -40
- data/lib/kontena/cli/apps/stop_command.rb +0 -40
- data/lib/kontena/cli/apps/yaml/custom_validators/affinities_validator.rb +0 -19
- data/lib/kontena/cli/apps/yaml/custom_validators/build_validator.rb +0 -22
- data/lib/kontena/cli/apps/yaml/custom_validators/extends_validator.rb +0 -20
- data/lib/kontena/cli/apps/yaml/custom_validators/hooks_validator.rb +0 -54
- data/lib/kontena/cli/apps/yaml/custom_validators/secrets_validator.rb +0 -22
- data/lib/kontena/cli/apps/yaml/reader.rb +0 -213
- data/lib/kontena/cli/apps/yaml/service_extender.rb +0 -77
- data/lib/kontena/cli/apps/yaml/validations.rb +0 -71
- data/lib/kontena/cli/apps/yaml/validator.rb +0 -38
- data/lib/kontena/cli/apps/yaml/validator_v2.rb +0 -53
- data/spec/fixtures/app.json +0 -42
- data/spec/fixtures/health.yml +0 -26
- data/spec/fixtures/kontena-build.yml +0 -16
- data/spec/fixtures/kontena-internal-extend.yml +0 -8
- data/spec/fixtures/kontena-invalid.yml +0 -4
- data/spec/fixtures/kontena-with-env-file.yml +0 -18
- data/spec/fixtures/kontena-with-variables.yml +0 -19
- data/spec/fixtures/kontena.yml +0 -17
- data/spec/fixtures/kontena_build_v2.yml +0 -26
- data/spec/fixtures/kontena_numeric_version.yml +0 -9
- data/spec/fixtures/kontena_v2.yml +0 -35
- data/spec/fixtures/mysql.yml +0 -3
- data/spec/fixtures/wordpress-scaled.yml +0 -3
- data/spec/fixtures/wordpress.yml +0 -2
- data/spec/kontena/cli/app/build_command_spec.rb +0 -55
- data/spec/kontena/cli/app/common_spec.rb +0 -110
- data/spec/kontena/cli/app/config_command_spec.rb +0 -78
- data/spec/kontena/cli/app/deploy_command_spec.rb +0 -217
- data/spec/kontena/cli/app/docker_helper_spec.rb +0 -155
- data/spec/kontena/cli/app/init_command_spec.rb +0 -109
- data/spec/kontena/cli/app/logs_command_spec.rb +0 -131
- data/spec/kontena/cli/app/scale_spec.rb +0 -51
- data/spec/kontena/cli/app/service_generator_spec.rb +0 -384
- data/spec/kontena/cli/app/service_generator_v2_spec.rb +0 -73
- data/spec/kontena/cli/app/yaml/reader_spec.rb +0 -457
- data/spec/kontena/cli/app/yaml/service_extender_spec.rb +0 -127
- data/spec/kontena/cli/app/yaml/validator_spec.rb +0 -380
- data/spec/kontena/cli/app/yaml/validator_v2_spec.rb +0 -301
@@ -1,4 +1,5 @@
|
|
1
1
|
name "kontena-cli"
|
2
|
+
license "Apache 2.0"
|
2
3
|
default_version File.read('../VERSION').strip
|
3
4
|
source path: "./wrappers"
|
4
5
|
dependency "ruby"
|
@@ -10,5 +11,6 @@ build do
|
|
10
11
|
gem "install rb-readline -v 0.5.4 --no-ri --no-doc"
|
11
12
|
gem "install nokogiri -v 1.6.8 --no-ri --no-doc"
|
12
13
|
gem "install kontena-cli -v #{default_version} --no-ri --no-doc"
|
14
|
+
gem "install kontena-plugin-cloud --no-ri --no-doc"
|
13
15
|
copy "sh/kontena", "#{install_dir}/bin/kontena"
|
14
16
|
end
|
data/spec/fixtures/api/node.json
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
stack: user/depstack1child1
|
2
|
+
version: 0.0.1
|
3
|
+
variables:
|
4
|
+
test_var:
|
5
|
+
type: string
|
6
|
+
from:
|
7
|
+
random_string:
|
8
|
+
length: 16
|
9
|
+
charset: hex
|
10
|
+
depends:
|
11
|
+
dep_1:
|
12
|
+
stack: stack-with-dependencies-dep-1-1.yml
|
13
|
+
variables:
|
14
|
+
dep_var: 2
|
15
|
+
services:
|
16
|
+
db:
|
17
|
+
image: "$test_var"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
stack: user/depstack1
|
2
|
+
version: 0.0.1
|
3
|
+
variables:
|
4
|
+
test_var:
|
5
|
+
type: string
|
6
|
+
from:
|
7
|
+
random_string:
|
8
|
+
length: 16
|
9
|
+
charset: hex
|
10
|
+
depends:
|
11
|
+
dep_1:
|
12
|
+
stack: stack-with-dependencies-dep-1.yml
|
13
|
+
services:
|
14
|
+
app:
|
15
|
+
image: "${test_var}"
|
16
|
+
environment:
|
17
|
+
- "TEST=${dep_1}"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
stack: user/depstack1
|
2
|
+
version: 0.0.1
|
3
|
+
variables:
|
4
|
+
test_var:
|
5
|
+
type: string
|
6
|
+
from:
|
7
|
+
random_string:
|
8
|
+
length: 16
|
9
|
+
charset: hex
|
10
|
+
depends:
|
11
|
+
dep_1:
|
12
|
+
stack: stack-with-dependencies-dep-1.yml
|
13
|
+
dep_2:
|
14
|
+
stack: stack-with-dependencies-dep-2.yml
|
15
|
+
variables:
|
16
|
+
dep_var: 1
|
17
|
+
dep_3:
|
18
|
+
stack: stack-with-dependencies-dep-3.yml
|
19
|
+
services:
|
20
|
+
app:
|
21
|
+
image: "${test_var}"
|
22
|
+
environment:
|
23
|
+
- "TEST=${dep_1}"
|
24
|
+
- "TEST2=${dep_2}"
|
25
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
stack: user/depstack1
|
2
|
+
version: 0.0.1
|
3
|
+
variables:
|
4
|
+
test_var:
|
5
|
+
type: string
|
6
|
+
from:
|
7
|
+
random_string:
|
8
|
+
length: 16
|
9
|
+
charset: hex
|
10
|
+
depends:
|
11
|
+
dep_1:
|
12
|
+
stack: stack-with-dependencies-dep-1.yml
|
13
|
+
dep_2:
|
14
|
+
stack: stack-with-dependencies-dep-2.yml
|
15
|
+
variables:
|
16
|
+
dep_var: 1
|
17
|
+
services:
|
18
|
+
app:
|
19
|
+
image: "${test_var}"
|
20
|
+
environment:
|
21
|
+
- "TEST=${dep_1}"
|
22
|
+
- "TEST2=${dep_2}"
|
@@ -8,26 +8,14 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
8
8
|
allow(subject).to receive(:health_icon) {|health| health.inspect }
|
9
9
|
end
|
10
10
|
|
11
|
-
let :
|
11
|
+
let :node1_errors do
|
12
12
|
{
|
13
|
-
|
14
|
-
"connected" => false,
|
15
|
-
"name" => "node-1",
|
16
|
-
'etcd_health' => {
|
17
|
-
'health' => nil,
|
18
|
-
'error' => nil,
|
19
|
-
},
|
13
|
+
'connection' => "Websocket disconnected at 2017-08-16 14:50:46 UTC with code 1006: ",
|
20
14
|
}
|
21
15
|
end
|
22
|
-
let :
|
16
|
+
let :node2_errors do
|
23
17
|
{
|
24
|
-
|
25
|
-
"name" => "node-2",
|
26
|
-
"connected" => true,
|
27
|
-
'etcd_health' => {
|
28
|
-
'health' => nil,
|
29
|
-
'error' => "timeout",
|
30
|
-
},
|
18
|
+
'etcd_health' => "RPC timeout",
|
31
19
|
}
|
32
20
|
end
|
33
21
|
let :node3_health do
|
@@ -46,6 +34,17 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
46
34
|
"id" => 'test-grid/node-4',
|
47
35
|
"name" => "node-4",
|
48
36
|
"connected" => true,
|
37
|
+
'etcd_health' => {
|
38
|
+
'health' => nil,
|
39
|
+
'error' => "proxy: zero endpoints currently available",
|
40
|
+
},
|
41
|
+
}
|
42
|
+
end
|
43
|
+
let :node5_health do
|
44
|
+
{
|
45
|
+
"id" => 'test-grid/node-5',
|
46
|
+
"name" => "node-5",
|
47
|
+
"connected" => true,
|
49
48
|
'etcd_health' => {
|
50
49
|
'health' => true,
|
51
50
|
'error' => nil,
|
@@ -54,24 +53,25 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
54
53
|
end
|
55
54
|
|
56
55
|
before do
|
57
|
-
allow(client).to receive(:get).with('nodes/test-grid/node-1/health').
|
58
|
-
allow(client).to receive(:get).with('nodes/test-grid/node-2/health').
|
56
|
+
allow(client).to receive(:get).with('nodes/test-grid/node-1/health').and_raise(Kontena::Errors::StandardErrorHash.new(422, "", node1_errors))
|
57
|
+
allow(client).to receive(:get).with('nodes/test-grid/node-2/health').and_raise(Kontena::Errors::StandardErrorHash.new(422, "", node2_errors))
|
59
58
|
allow(client).to receive(:get).with('nodes/test-grid/node-3/health').and_return(node3_health)
|
60
59
|
allow(client).to receive(:get).with('nodes/test-grid/node-4/health').and_return(node4_health)
|
60
|
+
allow(client).to receive(:get).with('nodes/test-grid/node-5/health').and_return(node5_health)
|
61
61
|
end
|
62
62
|
|
63
63
|
context "For an offline node-1" do
|
64
64
|
it "shows offline and returns false" do
|
65
65
|
expect{subject.run(['node-1'])}.to exit_with_error.and output_lines [
|
66
|
-
":offline Node node-1
|
66
|
+
":offline Node test-grid/node-1 connection error: Websocket disconnected at 2017-08-16 14:50:46 UTC with code 1006: ",
|
67
67
|
]
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
context "For a node-2 with
|
71
|
+
context "For a node-2 with RPC errors" do
|
72
72
|
it "shows errored and returns false" do
|
73
73
|
expect{subject.run(['node-2'])}.to exit_with_error.and output_lines [
|
74
|
-
":
|
74
|
+
":offline Node test-grid/node-2 etcd_health error: RPC timeout",
|
75
75
|
]
|
76
76
|
end
|
77
77
|
end
|
@@ -79,15 +79,23 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
79
79
|
context "For a node-3 that returns health=false" do
|
80
80
|
it "shows unhealthy and returns false" do
|
81
81
|
expect{subject.run(['node-3'])}.to exit_with_error.and output_lines [
|
82
|
-
":error Node node-3 is unhealthy",
|
82
|
+
":error Node node-3 etcd is unhealthy",
|
83
|
+
]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "For an unhealthy node-4" do
|
88
|
+
it "shows unhealthy and returns false" do
|
89
|
+
expect{subject.run(['node-4'])}.to exit_with_error.and output_lines [
|
90
|
+
":error Node node-4 etcd is unhealthy: proxy: zero endpoints currently available",
|
83
91
|
]
|
84
92
|
end
|
85
93
|
end
|
86
94
|
|
87
|
-
context "For a healthy node-
|
95
|
+
context "For a healthy node-5" do
|
88
96
|
it "shows healthy and returns true" do
|
89
|
-
expect{subject.run(['node-
|
90
|
-
":ok Node node-
|
97
|
+
expect{subject.run(['node-5'])}.to output_lines [
|
98
|
+
":ok Node node-5 etcd is healthy",
|
91
99
|
]
|
92
100
|
end
|
93
101
|
end
|
@@ -107,6 +115,9 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
107
115
|
{
|
108
116
|
'id' => 'test-grid/node-4',
|
109
117
|
},
|
118
|
+
{
|
119
|
+
'id' => 'test-grid/node-5',
|
120
|
+
},
|
110
121
|
]
|
111
122
|
end
|
112
123
|
|
@@ -118,10 +129,11 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
118
129
|
|
119
130
|
it 'shows all nodes and exits with an error' do
|
120
131
|
expect{subject.run([])}.to exit_with_error.and output_lines [
|
121
|
-
":offline Node node-1
|
122
|
-
":
|
123
|
-
":error Node node-3 is unhealthy",
|
124
|
-
":
|
132
|
+
":offline Node test-grid/node-1 connection error: Websocket disconnected at 2017-08-16 14:50:46 UTC with code 1006: ",
|
133
|
+
":offline Node test-grid/node-2 etcd_health error: RPC timeout",
|
134
|
+
":error Node node-3 etcd is unhealthy",
|
135
|
+
":error Node node-4 etcd is unhealthy: proxy: zero endpoints currently available",
|
136
|
+
":ok Node node-5 etcd is healthy",
|
125
137
|
]
|
126
138
|
end
|
127
139
|
end
|
@@ -130,10 +142,10 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
130
142
|
let :grid_nodes do
|
131
143
|
[
|
132
144
|
{
|
133
|
-
'id' => 'test-grid/node-
|
145
|
+
'id' => 'test-grid/node-5',
|
134
146
|
},
|
135
147
|
{
|
136
|
-
'id' => 'test-grid/node-
|
148
|
+
'id' => 'test-grid/node-5',
|
137
149
|
},
|
138
150
|
]
|
139
151
|
end
|
@@ -146,8 +158,8 @@ describe Kontena::Cli::Etcd::HealthCommand do
|
|
146
158
|
|
147
159
|
it 'shows nodes as healthy anddoes not and exit with an error' do
|
148
160
|
expect{subject.run([])}.to output_lines [
|
149
|
-
":ok Node node-
|
150
|
-
":ok Node node-
|
161
|
+
":ok Node node-5 etcd is healthy",
|
162
|
+
":ok Node node-5 etcd is healthy",
|
151
163
|
]
|
152
164
|
end
|
153
165
|
end
|
@@ -235,7 +235,8 @@ describe Kontena::Cli::Helpers::ExecHelper do
|
|
235
235
|
|
236
236
|
it 'connects and sends messages from stdin' do
|
237
237
|
stdin_eol = false
|
238
|
-
|
238
|
+
allow(IO.console).to receive(:winsize).and_return([100, 100])
|
239
|
+
expect(websocket_client).to receive(:send).once.with('{"tty_size":{"width":100,"height":100}}')
|
239
240
|
expect(websocket_client).to receive(:send).once.with('{"cmd":["test-tty"]}')
|
240
241
|
|
241
242
|
expect(subject).to receive(:read_stdin).once.with(tty: true) do |&block|
|
@@ -20,8 +20,22 @@ describe Kontena::Cli::Master::InitCloudCommand do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'runs the invite self after deploy callback' do
|
23
|
+
allow(subject).to receive(:already_cloud_enabled?).and_return(false)
|
23
24
|
expect(Kontena).to receive(:run!).with(%w(cloud master add --current --force)).and_return(true)
|
24
25
|
expect_any_instance_of(Kontena::Callbacks::InviteSelfAfterDeploy).to receive(:after).and_return(true)
|
25
26
|
subject.run(['--force'])
|
26
27
|
end
|
28
|
+
|
29
|
+
it 'exits with error if master is already registered to use cloud' do
|
30
|
+
expect(subject.cloud_client).to receive(:get).with('user/masters').and_return(
|
31
|
+
'data' => [
|
32
|
+
{ 'attributes' => { 'client-id' => 'abc123', 'name' => 'testmaster' } },
|
33
|
+
{ 'attributes' => { 'client-id' => 'def234', 'name' => 'foo' } },
|
34
|
+
]
|
35
|
+
)
|
36
|
+
expect(subject.client).to receive(:get).with('config').and_return(
|
37
|
+
'oauth2.client_id' => 'abc123'
|
38
|
+
)
|
39
|
+
expect{subject.run(['--force'])}.to exit_with_error.and output(/already registered.+?testmaster/).to_stderr
|
40
|
+
end
|
27
41
|
end
|
@@ -8,40 +8,104 @@ describe Kontena::Cli::Nodes::HealthCommand do
|
|
8
8
|
allow(subject).to receive(:health_icon) {|health| health.inspect }
|
9
9
|
end
|
10
10
|
|
11
|
-
before do
|
12
|
-
allow(client).to receive(:get).with('nodes/test-grid/node').and_return(node)
|
13
|
-
end
|
14
|
-
|
15
11
|
context "for an online node" do
|
16
|
-
let :
|
12
|
+
let :node_health do
|
17
13
|
{
|
18
14
|
"name" => "node",
|
19
15
|
"node_number" => 4,
|
20
16
|
"initial_member" => false,
|
17
|
+
'status' => 'online',
|
18
|
+
'connected_at' => (Time.now - 50.0).to_s,
|
21
19
|
"connected" => true,
|
20
|
+
'etcd_health' => {
|
21
|
+
'health' => true,
|
22
|
+
'error' => nil,
|
23
|
+
},
|
22
24
|
}
|
23
25
|
end
|
24
26
|
|
27
|
+
before do
|
28
|
+
allow(client).to receive(:get).with('nodes/test-grid/node/health').and_return(node_health)
|
29
|
+
end
|
30
|
+
|
25
31
|
it "outputs ok" do
|
26
32
|
expect{subject.run(['node'])}.to output_lines [
|
27
|
-
":ok Node is online",
|
33
|
+
":ok Node is online for 50s",
|
34
|
+
":ok Node node etcd is healthy",
|
28
35
|
]
|
29
36
|
end
|
30
37
|
end
|
31
38
|
|
32
39
|
context "for an offline node" do
|
33
|
-
let :
|
40
|
+
let :node_errors do
|
41
|
+
{
|
42
|
+
'connection' => "Websocket disconnected at 2017-07-12 12:28:10 UTC with code 4030: ping timeout after 5.00s",
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
before do
|
47
|
+
allow(client).to receive(:get).with('nodes/test-grid/node/health').and_raise(Kontena::Errors::StandardErrorHash.new(422, "", node_errors))
|
48
|
+
end
|
49
|
+
|
50
|
+
it "fails as error" do
|
51
|
+
expect{subject.run(['node'])}.to exit_with_error.and output_lines [
|
52
|
+
":offline Node test-grid/node connection error: Websocket disconnected at 2017-07-12 12:28:10 UTC with code 4030: ping timeout after 5.00s",
|
53
|
+
]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "for an online initial node in an ok grid" do
|
58
|
+
let :node_health do
|
59
|
+
{
|
60
|
+
"name" => "node",
|
61
|
+
"node_number" => 1,
|
62
|
+
"initial_member" => true,
|
63
|
+
'status' => 'online',
|
64
|
+
'connected_at' => (Time.now - 50.0).to_s,
|
65
|
+
"connected" => true,
|
66
|
+
'etcd_health' => {
|
67
|
+
'health' => true,
|
68
|
+
'error' => nil,
|
69
|
+
},
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
before do
|
74
|
+
allow(client).to receive(:get).with('nodes/test-grid/node/health').and_return(node_health)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "outputs ok" do
|
78
|
+
expect{subject.run(['node'])}.to output_lines [
|
79
|
+
":ok Node is online for 50s",
|
80
|
+
":ok Node node etcd is healthy",
|
81
|
+
]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context "for an online node in an grid with broken etcd" do
|
86
|
+
let :node_health do
|
34
87
|
{
|
35
88
|
"name" => "node",
|
36
89
|
"node_number" => 4,
|
37
90
|
"initial_member" => false,
|
38
|
-
|
91
|
+
'status' => 'online',
|
92
|
+
'connected_at' => (Time.now - 50.0).to_s,
|
93
|
+
"connected" => true,
|
94
|
+
'etcd_health' => {
|
95
|
+
'health' => false,
|
96
|
+
'error' => "no peers reachable",
|
97
|
+
},
|
39
98
|
}
|
40
99
|
end
|
41
100
|
|
42
|
-
|
101
|
+
before do
|
102
|
+
allow(client).to receive(:get).with('nodes/test-grid/node/health').and_return(node_health)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "fails with etcd errro" do
|
43
106
|
expect{subject.run(['node'])}.to exit_with_error.and output_lines [
|
44
|
-
":
|
107
|
+
":ok Node is online for 50s",
|
108
|
+
":error Node node etcd is unhealthy: no peers reachable",
|
45
109
|
]
|
46
110
|
end
|
47
111
|
end
|