kontena-cli 1.4.0.pre6 → 1.4.0.pre7
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/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
|