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.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/VERSION +1 -1
  4. data/bin/kontena +1 -1
  5. data/kontena-cli.gemspec +3 -3
  6. data/lib/kontena/cli/certificate/authorize_command.rb +67 -6
  7. data/lib/kontena/cli/certificate/get_command.rb +7 -0
  8. data/lib/kontena/cli/certificate/list_command.rb +75 -0
  9. data/lib/kontena/cli/certificate/register_command.rb +13 -2
  10. data/lib/kontena/cli/certificate/request_command.rb +20 -0
  11. data/lib/kontena/cli/certificate/show_command.rb +19 -0
  12. data/lib/kontena/cli/certificate_command.rb +4 -1
  13. data/lib/kontena/cli/cloud/master/add_command.rb +1 -1
  14. data/lib/kontena/cli/common.rb +21 -33
  15. data/lib/kontena/cli/etcd/health_command.rb +21 -27
  16. data/lib/kontena/cli/helpers/exec_helper.rb +15 -6
  17. data/lib/kontena/cli/helpers/health_helper.rb +12 -0
  18. data/lib/kontena/cli/helpers/log_helper.rb +2 -2
  19. data/lib/kontena/cli/helpers/time_helper.rb +29 -0
  20. data/lib/kontena/cli/master/init_cloud_command.rb +19 -0
  21. data/lib/kontena/cli/master/list_command.rb +1 -1
  22. data/lib/kontena/cli/master/ssh_command.rb +3 -1
  23. data/lib/kontena/cli/master/use_command.rb +1 -2
  24. data/lib/kontena/cli/node_command.rb +1 -0
  25. data/lib/kontena/cli/nodes/health_command.rb +28 -13
  26. data/lib/kontena/cli/nodes/list_command.rb +19 -3
  27. data/lib/kontena/cli/nodes/show_command.rb +4 -2
  28. data/lib/kontena/cli/nodes/ssh_command.rb +5 -2
  29. data/lib/kontena/cli/nodes/update_command.rb +2 -0
  30. data/lib/kontena/cli/plugins/install_command.rb +11 -8
  31. data/lib/kontena/cli/plugins/list_command.rb +5 -3
  32. data/lib/kontena/cli/plugins/search_command.rb +4 -2
  33. data/lib/kontena/cli/plugins/show_command.rb +17 -0
  34. data/lib/kontena/cli/plugins/uninstall_command.rb +9 -13
  35. data/lib/kontena/cli/registry/create_command.rb +1 -1
  36. data/lib/kontena/cli/services/create_command.rb +6 -0
  37. data/lib/kontena/cli/services/services_helper.rb +33 -6
  38. data/lib/kontena/cli/services/update_command.rb +6 -0
  39. data/lib/kontena/cli/stacks/build_command.rb +3 -3
  40. data/lib/kontena/cli/stacks/common.rb +105 -90
  41. data/lib/kontena/cli/stacks/deploy_command.rb +7 -3
  42. data/lib/kontena/cli/stacks/install_command.rb +39 -6
  43. data/lib/kontena/cli/stacks/list_command.rb +36 -4
  44. data/lib/kontena/cli/stacks/logs_command.rb +9 -2
  45. data/lib/kontena/cli/stacks/registry/pull_command.rb +2 -2
  46. data/lib/kontena/cli/stacks/registry/push_command.rb +20 -9
  47. data/lib/kontena/cli/stacks/registry/remove_command.rb +4 -4
  48. data/lib/kontena/cli/stacks/registry/show_command.rb +4 -4
  49. data/lib/kontena/cli/stacks/remove_command.rb +27 -1
  50. data/lib/kontena/cli/stacks/service_generator.rb +12 -2
  51. data/lib/kontena/cli/stacks/show_command.rb +35 -5
  52. data/lib/kontena/cli/stacks/stack_name.rb +71 -0
  53. data/lib/kontena/cli/stacks/upgrade_command.rb +127 -14
  54. data/lib/kontena/cli/stacks/validate_command.rb +38 -10
  55. data/lib/kontena/cli/stacks/yaml/custom_validators/certificates_validator.rb +22 -0
  56. data/lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb +1 -2
  57. data/lib/kontena/cli/stacks/yaml/reader.rb +211 -185
  58. data/lib/kontena/cli/stacks/yaml/service_extender.rb +6 -12
  59. data/lib/kontena/cli/stacks/yaml/stack_file_loader.rb +97 -0
  60. data/lib/kontena/cli/stacks/yaml/stack_file_loader/file_loader.rb +41 -0
  61. data/lib/kontena/cli/stacks/yaml/stack_file_loader/registry_loader.rb +24 -0
  62. data/lib/kontena/cli/stacks/yaml/stack_file_loader/uri_loader.rb +23 -0
  63. data/lib/kontena/cli/stacks/yaml/validations.rb +16 -0
  64. data/lib/kontena/cli/stacks/yaml/validator_v3.rb +25 -8
  65. data/lib/kontena/client.rb +2 -2
  66. data/lib/kontena/command.rb +11 -0
  67. data/lib/kontena/main_command.rb +3 -1
  68. data/lib/kontena/plugin_manager.rb +11 -198
  69. data/lib/kontena/plugin_manager/cleaner.rb +33 -0
  70. data/lib/kontena/plugin_manager/common.rb +86 -0
  71. data/lib/kontena/plugin_manager/installer.rb +54 -0
  72. data/lib/kontena/plugin_manager/loader.rb +93 -0
  73. data/lib/kontena/plugin_manager/rubygems_client.rb +42 -23
  74. data/lib/kontena/plugin_manager/uninstaller.rb +34 -0
  75. data/lib/kontena/util.rb +24 -0
  76. data/lib/kontena_cli.rb +1 -0
  77. data/omnibus/config/projects/kontena.rb +7 -1
  78. data/omnibus/config/software/{kontena.rb → kontena-cli.rb} +2 -0
  79. data/spec/fixtures/api/node.json +2 -1
  80. data/spec/fixtures/stack-internal-extend.yml +6 -1
  81. data/spec/fixtures/stack-with-dependencies-dep-1-1.yml +8 -0
  82. data/spec/fixtures/stack-with-dependencies-dep-1.yml +17 -0
  83. data/spec/fixtures/stack-with-dependencies-dep-2.yml +8 -0
  84. data/spec/fixtures/stack-with-dependencies-dep-3.yml +5 -0
  85. data/spec/fixtures/stack-with-dependencies-dep_2-removed.yml +17 -0
  86. data/spec/fixtures/stack-with-dependencies-dep_3-added.yml +25 -0
  87. data/spec/fixtures/stack-with-dependencies.yml +22 -0
  88. data/spec/fixtures/stack-with-variables.yml +3 -0
  89. data/spec/kontena/cli/etcd/health_command_spec.rb +45 -33
  90. data/spec/kontena/cli/helpers/exec_helper_spec.rb +2 -1
  91. data/spec/kontena/cli/master/init_cloud_command_spec.rb +14 -0
  92. data/spec/kontena/cli/nodes/health_command_spec.rb +74 -10
  93. data/spec/kontena/cli/nodes/list_command_spec.rb +381 -232
  94. data/spec/kontena/cli/nodes/show_command_spec.rb +31 -0
  95. data/spec/kontena/cli/nodes/ssh_command_spec.rb +18 -3
  96. data/spec/kontena/cli/plugins/install_command_spec.rb +1 -1
  97. data/spec/kontena/cli/stacks/build_command_spec.rb +6 -12
  98. data/spec/kontena/cli/stacks/common_spec.rb +42 -69
  99. data/spec/kontena/cli/stacks/install_command_spec.rb +57 -31
  100. data/spec/kontena/cli/stacks/list_command_spec.rb +44 -0
  101. data/spec/kontena/cli/stacks/logs_command_spec.rb +12 -1
  102. data/spec/kontena/cli/stacks/remove_command_spec.rb +39 -0
  103. data/spec/kontena/cli/stacks/show_command_spec.rb +16 -0
  104. data/spec/kontena/cli/stacks/stack_name_spec.rb +21 -0
  105. data/spec/kontena/cli/stacks/upgrade_command_spec.rb +73 -56
  106. data/spec/kontena/cli/stacks/validate_command_spec.rb +81 -0
  107. data/spec/kontena/cli/stacks/yaml/custom_validators/affinities_validator_spec.rb +22 -0
  108. data/spec/kontena/cli/stacks/yaml/reader_spec.rb +173 -169
  109. data/spec/kontena/cli/stacks/yaml/service_extender_spec.rb +12 -3
  110. data/spec/kontena/cli/stacks/yaml/stack_file_loader/file_loader_spec.rb +47 -0
  111. data/spec/kontena/cli/stacks/yaml/stack_file_loader/registry_loader_spec.rb +53 -0
  112. data/spec/kontena/cli/stacks/yaml/stack_file_loader/uri_loader_spec.rb +53 -0
  113. data/spec/kontena/cli/stacks/yaml/stack_file_loader_spec.rb +104 -0
  114. data/spec/kontena/cli/stacks/yaml/validator_v3_spec.rb +19 -0
  115. data/spec/kontena/plugin_manager/cleaner_spec.rb +20 -0
  116. data/spec/kontena/plugin_manager/common_spec.rb +39 -0
  117. data/spec/kontena/plugin_manager/installer_spec.rb +50 -0
  118. data/spec/kontena/plugin_manager/loader_spec.rb +5 -0
  119. data/spec/kontena/plugin_manager/rubygems_client_spec.rb +11 -25
  120. data/spec/kontena/plugin_manager/uninstaller_spec.rb +19 -0
  121. data/spec/kontena/plugin_manager_spec.rb +7 -7
  122. metadata +64 -97
  123. data/lib/kontena/cli/app_command.rb +0 -22
  124. data/lib/kontena/cli/apps/build_command.rb +0 -28
  125. data/lib/kontena/cli/apps/common.rb +0 -172
  126. data/lib/kontena/cli/apps/config_command.rb +0 -25
  127. data/lib/kontena/cli/apps/deploy_command.rb +0 -137
  128. data/lib/kontena/cli/apps/docker_compose_generator.rb +0 -61
  129. data/lib/kontena/cli/apps/docker_helper.rb +0 -80
  130. data/lib/kontena/cli/apps/dockerfile_generator.rb +0 -16
  131. data/lib/kontena/cli/apps/init_command.rb +0 -89
  132. data/lib/kontena/cli/apps/kontena_yml_generator.rb +0 -105
  133. data/lib/kontena/cli/apps/list_command.rb +0 -59
  134. data/lib/kontena/cli/apps/logs_command.rb +0 -37
  135. data/lib/kontena/cli/apps/monitor_command.rb +0 -93
  136. data/lib/kontena/cli/apps/remove_command.rb +0 -74
  137. data/lib/kontena/cli/apps/restart_command.rb +0 -39
  138. data/lib/kontena/cli/apps/scale_command.rb +0 -33
  139. data/lib/kontena/cli/apps/service_generator.rb +0 -114
  140. data/lib/kontena/cli/apps/service_generator_v2.rb +0 -27
  141. data/lib/kontena/cli/apps/show_command.rb +0 -23
  142. data/lib/kontena/cli/apps/start_command.rb +0 -40
  143. data/lib/kontena/cli/apps/stop_command.rb +0 -40
  144. data/lib/kontena/cli/apps/yaml/custom_validators/affinities_validator.rb +0 -19
  145. data/lib/kontena/cli/apps/yaml/custom_validators/build_validator.rb +0 -22
  146. data/lib/kontena/cli/apps/yaml/custom_validators/extends_validator.rb +0 -20
  147. data/lib/kontena/cli/apps/yaml/custom_validators/hooks_validator.rb +0 -54
  148. data/lib/kontena/cli/apps/yaml/custom_validators/secrets_validator.rb +0 -22
  149. data/lib/kontena/cli/apps/yaml/reader.rb +0 -213
  150. data/lib/kontena/cli/apps/yaml/service_extender.rb +0 -77
  151. data/lib/kontena/cli/apps/yaml/validations.rb +0 -71
  152. data/lib/kontena/cli/apps/yaml/validator.rb +0 -38
  153. data/lib/kontena/cli/apps/yaml/validator_v2.rb +0 -53
  154. data/spec/fixtures/app.json +0 -42
  155. data/spec/fixtures/health.yml +0 -26
  156. data/spec/fixtures/kontena-build.yml +0 -16
  157. data/spec/fixtures/kontena-internal-extend.yml +0 -8
  158. data/spec/fixtures/kontena-invalid.yml +0 -4
  159. data/spec/fixtures/kontena-with-env-file.yml +0 -18
  160. data/spec/fixtures/kontena-with-variables.yml +0 -19
  161. data/spec/fixtures/kontena.yml +0 -17
  162. data/spec/fixtures/kontena_build_v2.yml +0 -26
  163. data/spec/fixtures/kontena_numeric_version.yml +0 -9
  164. data/spec/fixtures/kontena_v2.yml +0 -35
  165. data/spec/fixtures/mysql.yml +0 -3
  166. data/spec/fixtures/wordpress-scaled.yml +0 -3
  167. data/spec/fixtures/wordpress.yml +0 -2
  168. data/spec/kontena/cli/app/build_command_spec.rb +0 -55
  169. data/spec/kontena/cli/app/common_spec.rb +0 -110
  170. data/spec/kontena/cli/app/config_command_spec.rb +0 -78
  171. data/spec/kontena/cli/app/deploy_command_spec.rb +0 -217
  172. data/spec/kontena/cli/app/docker_helper_spec.rb +0 -155
  173. data/spec/kontena/cli/app/init_command_spec.rb +0 -109
  174. data/spec/kontena/cli/app/logs_command_spec.rb +0 -131
  175. data/spec/kontena/cli/app/scale_spec.rb +0 -51
  176. data/spec/kontena/cli/app/service_generator_spec.rb +0 -384
  177. data/spec/kontena/cli/app/service_generator_v2_spec.rb +0 -73
  178. data/spec/kontena/cli/app/yaml/reader_spec.rb +0 -457
  179. data/spec/kontena/cli/app/yaml/service_extender_spec.rb +0 -127
  180. data/spec/kontena/cli/app/yaml/validator_spec.rb +0 -380
  181. data/spec/kontena/cli/app/yaml/validator_v2_spec.rb +0 -301
@@ -11,263 +11,412 @@ describe Kontena::Cli::Nodes::ListCommand do
11
11
  allow(subject).to receive(:client).and_return(client)
12
12
  end
13
13
 
14
- describe '#show_grid_nodes' do
15
- context "For a initial_size=3 grid" do
14
+ def time_ago(offset)
15
+ (Time.now.utc - offset).strftime('%FT%T.%NZ')
16
+ end
17
+
18
+ context "For a initial_size=1 grid" do
19
+ before do
20
+ allow(client).to receive(:get).with('grids/test-grid').and_return(
21
+ {
22
+ "id" => "test-grid",
23
+ "name" => "test-grid",
24
+ "initial_size" => 1,
25
+ "node_count" => 1,
26
+ }
27
+ )
28
+ end
29
+
30
+ context "with initializing and connecting nodes" do
16
31
  before do
17
- allow(client).to receive(:get).with('grids/test-grid').and_return(
18
- {
19
- "id" => "test-grid",
20
- "name" => "test-grid",
21
- "initial_size" => 3,
22
- "node_count" => 1,
32
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
33
+ { "nodes" => [
34
+ # connected node
35
+ {
36
+ "id" => 'test-grid/node-1',
37
+ "node_id" => 'AAAA:AAAA',
38
+ "connected" => true,
39
+ 'connected_at' => time_ago(60.0),
40
+ 'disconnected_at' => nil,
41
+ "updated" => true,
42
+ "status" => "online",
43
+ "name" => "node-1",
44
+ "node_number" => 1,
45
+ "initial_member" => true,
46
+ 'agent_version' => '1.4.0.dev',
47
+ },
48
+ # node was created, not connected yet
49
+ {
50
+ "id" => 'test-grid/node-2',
51
+ "node_id" => nil,
52
+ "connected" => false,
53
+ 'connected_at' => nil,
54
+ 'disconnected_at' => nil,
55
+ "updated" => false,
56
+ "status" => "created",
57
+ "name" => "node-2",
58
+ "node_number" => 2,
59
+ "initial_member" => false,
60
+ 'agent_version' => nil,
61
+ },
62
+ # node was just created when connecting, but not yet connected
63
+ {
64
+ "id" => 'test-grid/CCCC:CCCC',
65
+ "node_id" => 'CCCC:CCCC',
66
+ "connected" => true,
67
+ 'connected_at' => nil,
68
+ 'disconnected_at' => nil,
69
+ "updated" => false,
70
+ "status" => "offline",
71
+ "name" => nil,
72
+ "node_number" => 3,
73
+ "initial_member" => false,
74
+ 'agent_version' => '1.4.0.dev',
75
+ },
76
+ # node has just connected, but not sent any node_info yet
77
+ {
78
+ "id" => 'test-grid/node-4',
79
+ "node_id" => 'DDDD:DDDD',
80
+ "connected" => true,
81
+ 'connected_at' => time_ago(60.0),
82
+ 'disconnected_at' => time_ago(120.0),
83
+ "updated" => false,
84
+ "status" => "connecting",
85
+ "name" => "node-4",
86
+ "node_number" => 4,
87
+ "initial_member" => false,
88
+ 'agent_version' => '1.4.0.dev',
89
+ },
90
+ ]
23
91
  }
24
92
  )
25
93
  end
26
94
 
27
- context "with a single node" do
95
+ it "outputs nodes" do
96
+ expect{subject.run([])}.to output_table [
97
+ [':ok node-1', '1.4.0.dev', 'online 1m', '1 / 1', '-'],
98
+ [':offline node-2', '-', 'created', '-', '-'],
99
+ [':ok CCCC:CCCC', '1.4.0.dev', 'offline', '-', '-'],
100
+ [':ok node-4', '1.4.0.dev', 'connecting 1m', '-', '-'],
101
+ ]
102
+ end
103
+ end
28
104
 
29
- before do
30
- allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
31
- {
32
- 'nodes' => [
33
- {
34
- "connected" => true,
35
- "name" => "node-1",
36
- "node_number" => 1,
37
- "initial_member" => true,
38
- 'agent_version' => '1.1-dev',
39
- }
40
- ]
41
- }
42
- )
43
- end
105
+ context "with a draining node" do
106
+ before do
107
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
108
+ { "nodes" => [
109
+ # draining node
110
+ {
111
+ "id" => 'test-grid/node-1',
112
+ "node_id" => 'AAAA:AAAA',
113
+ "connected" => true,
114
+ 'connected_at' => time_ago(60.0),
115
+ 'disconnected_at' => nil,
116
+ "updated" => true,
117
+ "status" => "drain",
118
+ "name" => "node-1",
119
+ "node_number" => 1,
120
+ "initial_member" => true,
121
+ 'agent_version' => '1.4.0.dev',
122
+ },
123
+ ]
124
+ }
125
+ )
126
+ end
44
127
 
45
- it "outputs node with error" do
46
- expect{subject.run([])}.to output_table [
47
- [':error node-1', '1.1-dev', 'online', '1 / 3', '-'],
48
- ]
49
- end
128
+ it "outputs nodes" do
129
+ expect{subject.run([])}.to output_table [
130
+ [':ok node-1', '1.4.0.dev', 'drain', '1 / 1', '-'],
131
+ ]
50
132
  end
133
+ end
134
+ end
51
135
 
52
- context "with a single online node" do
53
- before do
54
- allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
55
- { "nodes" => [
56
- {
57
- "connected" => true,
58
- "name" => "node-1",
59
- "node_number" => 1,
60
- "initial_member" => true,
61
- 'agent_version' => '1.1-dev',
62
- },
63
- {
64
- "connected" => false,
65
- "name" => "node-2",
66
- "node_number" => 2,
67
- "initial_member" => true,
68
- 'agent_version' => '1.1-dev',
69
- },
70
- ]
71
- }
72
- )
73
- end
136
+ context "For a initial_size=3 grid" do
137
+ before do
138
+ allow(client).to receive(:get).with('grids/test-grid').and_return(
139
+ {
140
+ "id" => "test-grid",
141
+ "name" => "test-grid",
142
+ "initial_size" => 3,
143
+ "node_count" => 1,
144
+ }
145
+ )
146
+ end
74
147
 
75
- it "outputs online node with error" do
76
- expect{subject.run([])}.to output_table [
77
- [':error node-1', '1.1-dev', 'online', '1 / 3', '-'],
78
- [':offline node-2', '1.1-dev', 'offline', '2 / 3', '-'],
79
- ]
80
- end
148
+ context "with a single online node" do
149
+ before do
150
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
151
+ {
152
+ 'nodes' => [
153
+ {
154
+ "id" => 'testAAA',
155
+ "connected" => true,
156
+ 'connected_at' => time_ago(60.0),
157
+ 'disconnected_at' => nil,
158
+ "updated" => true,
159
+ "status" => "online",
160
+ "name" => "node-1",
161
+ "node_number" => 1,
162
+ "initial_member" => true,
163
+ 'agent_version' => '1.1-dev',
164
+ }
165
+ ]
166
+ }
167
+ )
81
168
  end
82
169
 
83
- context "with two online nodes" do
84
- before do
85
- allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
86
- { "nodes" => [
87
- {
88
- "connected" => true,
89
- "name" => "node-1",
90
- "node_number" => 1,
91
- "initial_member" => true,
92
- 'agent_version' => '1.1-dev',
93
- },
94
- {
95
- "connected" => true,
96
- "name" => "node-2",
97
- "node_number" => 2,
98
- "initial_member" => true,
99
- 'agent_version' => '1.1-dev',
100
- },
101
- ]
102
- }
103
- )
104
- end
170
+ it "outputs node with error" do
171
+ expect{subject.run([])}.to output_table [
172
+ [':error node-1', '1.1-dev', 'online 1m', '1 / 3', '-'],
173
+ ]
174
+ end
175
+ end
105
176
 
106
- it "outputs both nodes with warning" do
107
- expect{subject.run([])}.to output_table [
108
- [':warning node-1', '1.1-dev', 'online', '1 / 3', '-'],
109
- [':warning node-2', '1.1-dev', 'online', '2 / 3', '-'],
110
- ]
111
- end
177
+ context "with one online and one offline node" do
178
+ before do
179
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
180
+ { "nodes" => [
181
+ {
182
+ "id" => 'testAAA',
183
+ "connected" => true,
184
+ 'connected_at' => time_ago(60.0),
185
+ 'disconnected_at' => nil,
186
+ "updated" => true,
187
+ "status" => "online",
188
+ "name" => "node-1",
189
+ "node_number" => 1,
190
+ "initial_member" => true,
191
+ 'agent_version' => '1.1-dev',
192
+ },
193
+ {
194
+ "id" => 'testBBB',
195
+ "connected" => false,
196
+ 'connected_at' => time_ago(60.0),
197
+ 'disconnected_at' => time_ago(120.0),
198
+ "updated" => false,
199
+ "status" => "offline",
200
+ "name" => "node-2",
201
+ "node_number" => 2,
202
+ "initial_member" => true,
203
+ 'agent_version' => '1.1-dev',
204
+ },
205
+ ]
206
+ }
207
+ )
112
208
  end
113
209
 
114
- context "with two online nodes and one initializing node" do
115
- before do
116
- allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
117
- { "nodes" => [
118
- {
119
- "connected" => true,
120
- "name" => "node-1",
121
- "node_number" => 1,
122
- "initial_member" => true,
123
- 'agent_version' => '1.1-dev',
124
- },
125
- {
126
- "connected" => true,
127
- "name" => "node-2",
128
- "node_number" => 2,
129
- "initial_member" => true,
130
- 'agent_version' => '1.1-dev',
131
- },
132
- # node has just connected, but not sent any node_info yet
133
- {
134
- "connected" => false,
135
- "name" => nil,
136
- "node_number" => 3,
137
- "initial_member" => false,
138
- 'agent_version' => nil,
139
- },
140
- ]
141
- }
142
- )
143
- end
210
+ it "outputs online node with error" do
211
+ expect{subject.run([])}.to output_table [
212
+ [':error node-1', '1.1-dev', 'online 1m', '1 / 3', '-'],
213
+ [':offline node-2', '1.1-dev', 'offline 2m', '2 / 3', '-'],
214
+ ]
215
+ end
216
+ end
144
217
 
145
- it "outputs two nodes with warning and one initializing" do
146
- expect{subject.run([])}.to output_table [
147
- [':warning node-1', '1.1-dev', 'online', '1 / 3', '-'],
148
- [':warning node-2', '1.1-dev', 'online', '2 / 3', '-'],
149
- [':offline (initializing)', 'offline', '-', '-'], # missing agent_version
150
- ]
151
- end
218
+ context "with two online nodes" do
219
+ before do
220
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
221
+ { "nodes" => [
222
+ {
223
+ "id" => 'testAAA',
224
+ "connected" => true,
225
+ 'connected_at' => time_ago(60.0),
226
+ 'disconnected_at' => nil,
227
+ "updated" => true,
228
+ "status" => "online",
229
+ "name" => "node-1",
230
+ "node_number" => 1,
231
+ "initial_member" => true,
232
+ 'agent_version' => '1.1-dev',
233
+ },
234
+ {
235
+ "id" => 'testBBB',
236
+ "connected" => true,
237
+ 'connected_at' => time_ago(60.0),
238
+ 'disconnected_at' => time_ago(120.0),
239
+ "updated" => true,
240
+ "status" => "online",
241
+ "name" => "node-2",
242
+ "node_number" => 2,
243
+ "initial_member" => true,
244
+ 'agent_version' => '1.1-dev',
245
+ },
246
+ ]
247
+ }
248
+ )
152
249
  end
153
250
 
154
- context "with two online nodes and one offline node" do
155
- before do
156
- allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
157
- { "nodes" => [
158
- {
159
- "connected" => true,
160
- "name" => "node-1",
161
- "node_number" => 1,
162
- "initial_member" => true,
163
- 'agent_version' => '1.1-dev',
164
- },
165
- {
166
- "connected" => true,
167
- "name" => "node-2",
168
- "node_number" => 2,
169
- "initial_member" => true,
170
- 'agent_version' => '1.1-dev',
171
- },
172
- {
173
- "connected" => false,
174
- "name" => "node-3",
175
- "node_number" => 3,
176
- "initial_member" => true,
177
- 'agent_version' => '1.1-dev',
178
- },
179
- ]
180
- }
181
- )
182
- end
251
+ it "outputs both nodes with warning" do
252
+ expect{subject.run([])}.to output_table [
253
+ [':warning node-1', '1.1-dev', 'online 1m', '1 / 3', '-'],
254
+ [':warning node-2', '1.1-dev', 'online 1m', '2 / 3', '-'],
255
+ ]
256
+ end
257
+ end
183
258
 
184
- it "outputs two nodes with warning and one offline" do
185
- expect{subject.run([])}.to output_table [
186
- [':warning node-1', '1.1-dev', 'online', '1 / 3', '-'],
187
- [':warning node-2', '1.1-dev', 'online', '2 / 3', '-'],
188
- [':offline node-3', '1.1-dev', 'offline', '3 / 3', '-'],
189
- ]
190
- end
259
+ context "with two online nodes and one offline node" do
260
+ before do
261
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
262
+ { "nodes" => [
263
+ {
264
+ "id" => 'testAAA',
265
+ "connected" => true,
266
+ 'connected_at' => time_ago(60.0),
267
+ 'disconnected_at' => nil,
268
+ "updated" => true,
269
+ "status" => "online",
270
+ "name" => "node-1",
271
+ "node_number" => 1,
272
+ "initial_member" => true,
273
+ 'agent_version' => '1.1-dev',
274
+ },
275
+ {
276
+ "id" => 'testBBB',
277
+ "connected" => true,
278
+ 'connected_at' => time_ago(60.0),
279
+ 'disconnected_at' => time_ago(120.0),
280
+ "updated" => true,
281
+ "status" => "online",
282
+ "name" => "node-2",
283
+ "node_number" => 2,
284
+ "initial_member" => true,
285
+ 'agent_version' => '1.1-dev',
286
+ },
287
+ {
288
+ "id" => 'testCCC',
289
+ "connected" => false,
290
+ 'connected_at' => time_ago(360.0),
291
+ 'disconnected_at' => time_ago(120.0),
292
+ "updated" => true,
293
+ "status" => "offline",
294
+ "name" => "node-3",
295
+ "node_number" => 3,
296
+ "initial_member" => true,
297
+ 'agent_version' => '1.1-dev',
298
+ },
299
+ ]
300
+ }
301
+ )
191
302
  end
192
303
 
193
- context "with two online initial nodes and one non-initial node" do
194
- before do
195
- allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
196
- {
197
- "nodes" => [
198
- {
199
- "connected" => true,
200
- "name" => "node-1",
201
- "node_number" => 1,
202
- "initial_member" => true,
203
- 'agent_version' => '1.1-dev',
204
- },
205
- {
206
- "connected" => true,
207
- "name" => "node-2",
208
- "node_number" => 2,
209
- "initial_member" => true,
210
- 'agent_version' => '1.1-dev',
211
- },
212
- {
213
- "connected" => true,
214
- "name" => "node-4",
215
- "node_number" => 4,
216
- "initial_member" => false,
217
- 'agent_version' => '1.1-dev',
218
- },
219
- ]
220
- }
221
- )
222
- end
304
+ it "outputs two nodes with warning and one offline" do
305
+ expect{subject.run([])}.to output_table [
306
+ [':warning node-1', '1.1-dev', 'online 1m', '1 / 3', '-'],
307
+ [':warning node-2', '1.1-dev', 'online 1m', '2 / 3', '-'],
308
+ [':offline node-3', '1.1-dev', 'offline 2m', '3 / 3', '-'],
309
+ ]
310
+ end
311
+ end
223
312
 
224
- it "outputs two nodes with warning and one online" do
225
- expect{subject.run([])}.to output_table [
226
- [':warning node-1', '1.1-dev', 'online', '1 / 3', '-'],
227
- [':warning node-2', '1.1-dev', 'online', '2 / 3', '-'],
228
- [':ok node-4', '1.1-dev', 'online', '-', '-'],
229
- ]
230
- end
313
+ context "with two online initial nodes and one non-initial node" do
314
+ before do
315
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
316
+ {
317
+ "nodes" => [
318
+ {
319
+ "id" => 'testAAA',
320
+ "connected" => true,
321
+ 'connected_at' => time_ago(60.0),
322
+ 'disconnected_at' => nil,
323
+ "updated" => true,
324
+ "status" => "online",
325
+ "name" => "node-1",
326
+ "node_number" => 1,
327
+ "initial_member" => true,
328
+ 'agent_version' => '1.1-dev',
329
+ },
330
+ {
331
+ "id" => 'testBBB',
332
+ "connected" => true,
333
+ 'connected_at' => time_ago(60.0),
334
+ 'disconnected_at' => time_ago(120.0),
335
+ "updated" => true,
336
+ "status" => "online",
337
+ "name" => "node-2",
338
+ "node_number" => 2,
339
+ "initial_member" => true,
340
+ 'agent_version' => '1.1-dev',
341
+ },
342
+ {
343
+ "id" => 'testDDD',
344
+ "connected" => true,
345
+ 'connected_at' => time_ago(120.0),
346
+ 'disconnected_at' => nil,
347
+ "updated" => true,
348
+ "status" => "online",
349
+ "name" => "node-4",
350
+ "node_number" => 4,
351
+ "initial_member" => false,
352
+ 'agent_version' => '1.1-dev',
353
+ },
354
+ ]
355
+ }
356
+ )
231
357
  end
232
358
 
233
- context "with three online initial nodes" do
234
- before do
235
- allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
236
- {
237
- "nodes" => [
238
- {
239
- "connected" => true,
240
- "name" => "node-1",
241
- "node_number" => 1,
242
- "initial_member" => true,
243
- 'agent_version' => '1.1-dev',
244
- },
245
- {
246
- "connected" => true,
247
- "name" => "node-2",
248
- "node_number" => 2,
249
- "initial_member" => true,
250
- 'agent_version' => '1.1-dev',
251
- },
252
- {
253
- "connected" => true,
254
- "name" => "node-3",
255
- "node_number" => 3,
256
- "initial_member" => true,
257
- 'agent_version' => '1.1-dev',
258
- },
259
- ]
260
- }
261
- )
262
- end
359
+ it "outputs two nodes with warning and one online" do
360
+ expect{subject.run([])}.to output_table [
361
+ [':warning node-1', '1.1-dev', 'online 1m', '1 / 3', '-'],
362
+ [':warning node-2', '1.1-dev', 'online 1m', '2 / 3', '-'],
363
+ [':ok node-4', '1.1-dev', 'online 2m', '-', '-'],
364
+ ]
365
+ end
366
+ end
367
+
368
+ context "with three online initial nodes" do
369
+ before do
370
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
371
+ {
372
+ "nodes" => [
373
+ {
374
+ "id" => 'testAAA',
375
+ "connected" => true,
376
+ 'connected_at' => time_ago(60.0),
377
+ 'disconnected_at' => nil,
378
+ "updated" => true,
379
+ "status" => "online",
380
+ "name" => "node-1",
381
+ "node_number" => 1,
382
+ "initial_member" => true,
383
+ 'agent_version' => '1.1-dev',
384
+ },
385
+ {
386
+ "id" => 'testBBB',
387
+ "connected" => true,
388
+ 'connected_at' => time_ago(60.0),
389
+ 'disconnected_at' => time_ago(120.0),
390
+ "updated" => true,
391
+ "status" => "online",
392
+ "name" => "node-2",
393
+ "node_number" => 2,
394
+ "initial_member" => true,
395
+ 'agent_version' => '1.1-dev',
396
+ },
397
+ {
398
+ "id" => 'testCCC',
399
+ "connected" => true,
400
+ 'connected_at' => time_ago(3630.0),
401
+ 'disconnected_at' => time_ago(7203.0),
402
+ "updated" => true,
403
+ "status" => "online",
404
+ "name" => "node-3",
405
+ "node_number" => 3,
406
+ "initial_member" => true,
407
+ 'agent_version' => '1.1-dev',
408
+ },
409
+ ]
410
+ }
411
+ )
412
+ end
263
413
 
264
- it "outputs three nodes with ok" do
265
- expect{subject.run([])}.to output_table [
266
- [':ok node-1', '1.1-dev', 'online', '1 / 3', '-'],
267
- [':ok node-2', '1.1-dev', 'online', '2 / 3', '-'],
268
- [':ok node-3', '1.1-dev', 'online', '3 / 3', '-'],
269
- ]
270
- end
414
+ it "outputs three nodes with ok" do
415
+ expect{subject.run([])}.to output_table [
416
+ [':ok node-1', '1.1-dev', 'online 1m', '1 / 3', '-'],
417
+ [':ok node-2', '1.1-dev', 'online 1m', '2 / 3', '-'],
418
+ [':ok node-3', '1.1-dev', 'online 1h', '3 / 3', '-'],
419
+ ]
271
420
  end
272
421
  end
273
422
  end