kontena-cli 0.13.4 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/kontena-cli.gemspec +2 -0
  4. data/lib/kontena/cli/app_command.rb +2 -0
  5. data/lib/kontena/cli/apps/common.rb +80 -74
  6. data/lib/kontena/cli/apps/config_command.rb +29 -0
  7. data/lib/kontena/cli/apps/deploy_command.rb +12 -81
  8. data/lib/kontena/cli/apps/docker_helper.rb +3 -3
  9. data/lib/kontena/cli/apps/init_command.rb +0 -3
  10. data/lib/kontena/cli/apps/list_command.rb +2 -3
  11. data/lib/kontena/cli/apps/logs_command.rb +2 -3
  12. data/lib/kontena/cli/apps/monitor_command.rb +3 -4
  13. data/lib/kontena/cli/apps/remove_command.rb +4 -4
  14. data/lib/kontena/cli/apps/restart_command.rb +2 -3
  15. data/lib/kontena/cli/apps/scale_command.rb +3 -5
  16. data/lib/kontena/cli/apps/service_generator.rb +123 -0
  17. data/lib/kontena/cli/apps/service_generator_v2.rb +26 -0
  18. data/lib/kontena/cli/apps/show_command.rb +1 -2
  19. data/lib/kontena/cli/apps/start_command.rb +2 -3
  20. data/lib/kontena/cli/apps/stop_command.rb +2 -3
  21. data/lib/kontena/cli/apps/yaml/reader.rb +150 -0
  22. data/lib/kontena/cli/apps/yaml/service_extender.rb +60 -0
  23. data/lib/kontena/cli/apps/yaml/validations.rb +79 -0
  24. data/lib/kontena/cli/apps/yaml/validator.rb +55 -0
  25. data/lib/kontena/cli/apps/yaml/validator_v2.rb +74 -0
  26. data/lib/kontena/cli/common.rb +23 -0
  27. data/lib/kontena/cli/etcd/remove_command.rb +2 -0
  28. data/lib/kontena/cli/grids/remove_command.rb +2 -0
  29. data/lib/kontena/cli/grids/users/remove_command.rb +3 -0
  30. data/lib/kontena/cli/master/azure/create_command.rb +0 -2
  31. data/lib/kontena/cli/master/packet/create_command.rb +42 -0
  32. data/lib/kontena/cli/master/packet_command.rb +14 -0
  33. data/lib/kontena/cli/master/upcloud/create_command.rb +39 -0
  34. data/lib/kontena/cli/master/upcloud_command.rb +13 -0
  35. data/lib/kontena/cli/master/users/remove_command.rb +3 -0
  36. data/lib/kontena/cli/master/users/roles/remove_command.rb +2 -0
  37. data/lib/kontena/cli/master_command.rb +4 -0
  38. data/lib/kontena/cli/node_command.rb +4 -0
  39. data/lib/kontena/cli/nodes/azure/create_command.rb +0 -2
  40. data/lib/kontena/cli/nodes/list_command.rb +4 -8
  41. data/lib/kontena/cli/nodes/packet/create_command.rb +35 -0
  42. data/lib/kontena/cli/nodes/packet/restart_command.rb +17 -0
  43. data/lib/kontena/cli/nodes/packet/terminate_command.rb +20 -0
  44. data/lib/kontena/cli/nodes/packet_command.rb +15 -0
  45. data/lib/kontena/cli/nodes/remove_command.rb +2 -0
  46. data/lib/kontena/cli/nodes/show_command.rb +3 -1
  47. data/lib/kontena/cli/nodes/upcloud/create_command.rb +33 -0
  48. data/lib/kontena/cli/nodes/upcloud/restart_command.rb +20 -0
  49. data/lib/kontena/cli/nodes/upcloud/terminate_command.rb +20 -0
  50. data/lib/kontena/cli/nodes/upcloud_command.rb +15 -0
  51. data/lib/kontena/cli/registry/remove_command.rb +3 -0
  52. data/lib/kontena/cli/services/remove_command.rb +2 -0
  53. data/lib/kontena/cli/services/services_helper.rb +1 -0
  54. data/lib/kontena/cli/vault/list_command.rb +2 -0
  55. data/lib/kontena/cli/vault/read_command.rb +2 -0
  56. data/lib/kontena/cli/vault/remove_command.rb +4 -0
  57. data/lib/kontena/cli/vault/update_command.rb +8 -1
  58. data/lib/kontena/cli/vault/write_command.rb +2 -0
  59. data/lib/kontena/cli/vpn/remove_command.rb +3 -0
  60. data/lib/kontena/machine/azure/master_provisioner.rb +2 -2
  61. data/lib/kontena/machine/azure/node_provisioner.rb +7 -4
  62. data/lib/kontena/machine/digital_ocean/node_provisioner.rb +1 -1
  63. data/lib/kontena/machine/packet.rb +17 -0
  64. data/lib/kontena/machine/packet/cloudinit.yml +66 -0
  65. data/lib/kontena/machine/packet/cloudinit_master.yml +118 -0
  66. data/lib/kontena/machine/packet/master_provisioner.rb +93 -0
  67. data/lib/kontena/machine/packet/node_destroyer.rb +42 -0
  68. data/lib/kontena/machine/packet/node_provisioner.rb +77 -0
  69. data/lib/kontena/machine/packet/node_restarter.rb +41 -0
  70. data/lib/kontena/machine/packet/packet_common.rb +89 -0
  71. data/lib/kontena/machine/upcloud.rb +9 -0
  72. data/lib/kontena/machine/upcloud/cloudinit.yml +64 -0
  73. data/lib/kontena/machine/upcloud/cloudinit_master.yml +118 -0
  74. data/lib/kontena/machine/upcloud/master_provisioner.rb +136 -0
  75. data/lib/kontena/machine/upcloud/node_destroyer.rb +82 -0
  76. data/lib/kontena/machine/upcloud/node_provisioner.rb +119 -0
  77. data/lib/kontena/machine/upcloud/node_restarter.rb +47 -0
  78. data/lib/kontena/machine/upcloud/upcloud_common.rb +70 -0
  79. data/lib/kontena/scripts/completer +8 -3
  80. data/spec/fixtures/docker-compose_v2.yml +10 -0
  81. data/spec/fixtures/kontena-invalid.yml +4 -0
  82. data/spec/fixtures/kontena-with-variables.yml +19 -0
  83. data/spec/fixtures/kontena.yml +2 -2
  84. data/spec/fixtures/kontena_v2.yml +35 -0
  85. data/spec/kontena/cli/app/common_spec.rb +39 -101
  86. data/spec/kontena/cli/app/deploy_command_spec.rb +37 -388
  87. data/spec/kontena/cli/app/docker_helper_spec.rb +4 -4
  88. data/spec/kontena/cli/app/service_generator_spec.rb +374 -0
  89. data/spec/kontena/cli/app/service_generator_v2_spec.rb +74 -0
  90. data/spec/kontena/cli/app/yaml/reader_spec.rb +249 -0
  91. data/spec/kontena/cli/app/yaml/service_extender_spec.rb +104 -0
  92. data/spec/kontena/cli/app/yaml/validator_spec.rb +263 -0
  93. data/spec/kontena/cli/app/yaml/validator_v2_spec.rb +309 -0
  94. data/spec/kontena/cli/common_spec.rb +39 -1
  95. data/spec/kontena/cli/master/users/remove_command_spec.rb +9 -0
  96. data/spec/kontena/cli/master/users/roles/remove_command_spec.rb +2 -0
  97. metadata +86 -2
@@ -0,0 +1,309 @@
1
+ require_relative '../../../../spec_helper'
2
+ require 'kontena/cli/apps/yaml/validator_v2'
3
+
4
+ describe Kontena::Cli::Apps::YAML::ValidatorV2 do
5
+ describe '#validate_keys' do
6
+ it 'returns error on invalid key' do
7
+ result = subject.validate_keys('name' => 'wordpress')
8
+ expect(result['name'].size).to eq(1)
9
+ end
10
+ end
11
+
12
+ describe '#validate_options' do
13
+ context 'build' do
14
+ it 'can be string' do
15
+ result = subject.validate_options('build' => '.')
16
+ expect(result.success?).to be_truthy
17
+ expect(result.messages.key?('build')).to be_falsey
18
+ end
19
+
20
+ it 'can be hash' do
21
+ result = subject.validate_options('build' => { 'context' => '.' })
22
+ expect(result.success?).to be_truthy
23
+ expect(result.messages.key?('build')).to be_falsey
24
+ end
25
+
26
+ it 'returns error if build is hash and context is missing' do
27
+ result = subject.validate_options('build' => {})
28
+ expect(result.success?).to be_falsey
29
+ expect(result.messages.key?('build')).to be_truthy
30
+ end
31
+
32
+ it 'returns error if optional dockerfile is not string' do
33
+ result = subject.validate_options('build' => {
34
+ 'context' => '.',
35
+ 'dockerfile' => 123
36
+ })
37
+ expect(result.success?).to be_falsey
38
+ expect(result.messages.key?('build')).to be_truthy
39
+ end
40
+ end
41
+ it 'validates image is string' do
42
+ result = subject.validate_options('image' => true)
43
+ expect(result.success?).to be_falsey
44
+ expect(result.messages.key?('image')).to be_truthy
45
+ end
46
+
47
+ it 'validates stateful is boolean' do
48
+ result = subject.validate_options('stateful' => 'bool')
49
+ expect(result.messages.key?('stateful')).to be_truthy
50
+ end
51
+
52
+ it 'validates network_mode is host or bridge' do
53
+ result = subject.validate_options('network_mode' => 'invalid')
54
+ expect(result.messages.key?('network_mode')).to be_truthy
55
+
56
+ result = subject.validate_options('network_mode' => 'bridge')
57
+ expect(result.messages.key?('network_mode')).to be_falsey
58
+
59
+ result = subject.validate_options('network_mode' => 'host')
60
+ expect(result.messages.key?('network_mode')).to be_falsey
61
+ end
62
+
63
+ context 'affinity' do
64
+ it 'is optional' do
65
+ result = subject.validate_options({})
66
+ expect(result.messages.key?('affinity')).to be_falsey
67
+ end
68
+
69
+ it 'must be array' do
70
+ result = subject.validate_options('affinity' => 'node==node1')
71
+ expect(result.messages.key?('affinity')).to be_truthy
72
+ result = subject.validate_options('affinity' => ['node==node1'])
73
+ expect(result.messages.key?('affinity')).to be_falsey
74
+ end
75
+
76
+ it 'validates format' do
77
+ result = subject.validate_options('affinity' => ['node=node1'])
78
+ expect(result.messages.key?('affinity')).to be_truthy
79
+
80
+ result = subject.validate_options('affinity' => ['node==node1', 'service!=mariadb'])
81
+ expect(result.messages.key?('affinity')).to be_falsey
82
+ end
83
+ end
84
+
85
+ context 'command' do
86
+ it 'is optional' do
87
+ result = subject.validate_options({})
88
+ expect(result.messages.key?('command')).to be_falsey
89
+ end
90
+
91
+ it 'must be string or empty' do
92
+ result = subject.validate_options('command' => 1234)
93
+ expect(result.messages.key?('command')).to be_truthy
94
+
95
+ result = subject.validate_options('command' => nil)
96
+ expect(result.messages.key?('command')).to be_falsey
97
+
98
+ result = subject.validate_options('command' => 'bundle exec rails s')
99
+ expect(result.messages.key?('command')).to be_falsey
100
+ end
101
+ end
102
+
103
+ it 'validates cpu_shares is integer' do
104
+ result = subject.validate_options('cpu_shares' => '1m')
105
+ expect(result.messages.key?('cpu_shares')).to be_truthy
106
+ result = subject.validate_options('cpu_shares' => 1024)
107
+ expect(result.messages.key?('cpu_shares')).to be_falsey
108
+ result = subject.validate_options({})
109
+ expect(result.messages.key?('cpu_shares')).to be_falsey
110
+ end
111
+
112
+ it 'validates environment is array or hash' do
113
+ result = subject.validate_options('environment' => 'KEY=VALUE')
114
+ expect(result.messages.key?('environment')).to be_truthy
115
+ result = subject.validate_options('environment' => ['KEY=VALUE'])
116
+ expect(result.messages.key?('environment')).to be_falsey
117
+ result = subject.validate_options('environment' => { 'KEY' => 'VALUE' })
118
+ expect(result.messages.key?('environment')).to be_falsey
119
+ end
120
+
121
+ context 'validates secrets' do
122
+ it 'must be array' do
123
+ result = subject.validate_options('secrets' => {})
124
+ expect(result.messages.key?('secrets')).to be_truthy
125
+ end
126
+
127
+ context 'item' do
128
+ it 'must contain secret' do
129
+ result = subject.validate_options('secrets' => [{ 'name' => 'test', 'type' => 'env' }])
130
+ expect(result.messages.key?('secrets')).to be_truthy
131
+ end
132
+
133
+ it 'must contain name' do
134
+ result = subject.validate_options('secrets' => [{ 'secret' => 'test', 'type' => 'env' }])
135
+ expect(result.messages.key?('secrets')).to be_truthy
136
+ end
137
+
138
+ it 'must contain type' do
139
+ result = subject.validate_options('secrets' => [{ 'secret' => 'test', 'name' => 'test' }])
140
+ expect(result.messages.key?('secrets')).to be_truthy
141
+ end
142
+
143
+ it 'accepts valid input' do
144
+ result = subject.validate_options('secrets' =>
145
+ [
146
+ {
147
+ 'secret' => 'test',
148
+ 'name' => 'test',
149
+ 'type' => 'env'
150
+ }
151
+ ])
152
+ expect(result.messages.key?('secrets')).to be_falsey
153
+ end
154
+ end
155
+ end
156
+
157
+ context 'logging' do
158
+ context 'options' do
159
+ it 'must be hash' do
160
+ result = subject.validate_options('logging' => { 'options' => [] })
161
+ expect(result.messages.key?('logging')).to be_truthy
162
+ data = {
163
+ 'logging' => {
164
+ 'options' => {
165
+ 'syslog-address' => "tcp://192.168.0.42:123"
166
+ }
167
+ }
168
+ }
169
+ result = subject.validate_options(data)
170
+ expect(result.messages.key?('logging')).to be_falsey
171
+ end
172
+ end
173
+ end
174
+
175
+ context 'hooks' do
176
+ context 'validates pre_build' do
177
+ it 'must be array' do
178
+ result = subject.validate_options('hooks' => { 'pre_build' => {} })
179
+ expect(result.messages.key?('hooks')).to be_truthy
180
+ data = {
181
+ 'hooks' => {
182
+ 'pre_build' => [
183
+ {
184
+ 'cmd' => 'rake db:migrate'
185
+ }
186
+ ]
187
+ }
188
+ }
189
+ result = subject.validate_options(data)
190
+ expect(result.messages.key?('hooks')).to be_falsey
191
+ end
192
+ end
193
+ context 'post_start' do
194
+ it 'must be array' do
195
+ result = subject.validate_options('hooks' => { 'post_start' => {} })
196
+ expect(result.messages.key?('hooks')).to be_truthy
197
+ data = {
198
+ 'hooks' => {
199
+ 'post_start' => [
200
+ {
201
+ 'name' => 'migrate',
202
+ 'cmd' => 'rake db:migrate',
203
+ 'instances' => '*'
204
+ }
205
+ ]
206
+ }
207
+ }
208
+ result = subject.validate_options(data)
209
+ expect(result.messages.key?('hooks')).to be_falsey
210
+ end
211
+
212
+ context 'item' do
213
+ it 'must contain name' do
214
+ result = subject.validate_options('hooks' =>
215
+ {
216
+ 'post_start' => [
217
+ {
218
+ 'cmd' => 'rake db:migrate',
219
+ 'instances' => '1'
220
+ }
221
+ ]
222
+ })
223
+ expect(result.messages.key?('hooks')).to be_truthy
224
+ end
225
+
226
+ it 'must contain cmd' do
227
+ result = subject.validate_options('hooks' =>
228
+ {
229
+ 'post_start' => [
230
+ {
231
+ 'name' => 'migrate',
232
+ 'instances' => '1'
233
+ }
234
+ ]
235
+ })
236
+ expect(result.messages.key?('hooks')).to be_truthy
237
+ end
238
+
239
+ it 'must contain instance number or *' do
240
+ result = subject.validate_options('hooks' =>
241
+ {
242
+ 'post_start' => [
243
+ { 'name' => 'migrate',
244
+ 'cmd' => 'rake db:migrate'
245
+ }
246
+ ]
247
+ })
248
+ expect(result.messages.key?('hooks')).to be_truthy
249
+ data = {
250
+ 'hooks' => {
251
+ 'post_start' => [
252
+ {
253
+ 'name' => 'migrate',
254
+ 'cmd' => 'rake db:migrate',
255
+ 'instances' => 'all',
256
+ 'oneshot' => true
257
+ }
258
+ ]
259
+ }
260
+ }
261
+ result = subject.validate_options(data)
262
+ expect(result.messages.key?('hooks')).to be_truthy
263
+ end
264
+
265
+ it 'may contain boolean oneshot' do
266
+ data = {
267
+ 'hooks' => {
268
+ 'post_start' => [
269
+ {
270
+ 'name' => 'migrate',
271
+ 'cmd' => 'rake db:migrate',
272
+ 'instances' => '*',
273
+ 'oneshot' => 'true'
274
+ }
275
+ ]
276
+ }
277
+ }
278
+ result = subject.validate_options(data)
279
+ expect(result.messages.key?('hooks')).to be_truthy
280
+ end
281
+ end
282
+
283
+ it 'validates depends_on is array' do
284
+ result = subject.validate_options('depends_on' => 'web')
285
+ expect(result.messages.key?('depends_on')).to be_truthy
286
+
287
+ result = subject.validate_options('depends_on' => ['web'])
288
+ expect(result.messages.key?('depends_on')).to be_falsey
289
+ end
290
+
291
+ it 'validates volumes is array' do
292
+ result = subject.validate_options('volumes' => '/app')
293
+ expect(result.messages.key?('volumes')).to be_truthy
294
+
295
+ result = subject.validate_options('volumes' => ['/app'])
296
+ expect(result.messages.key?('volumes')).to be_falsey
297
+ end
298
+
299
+ it 'validates volumes_from is array' do
300
+ result = subject.validate_options('volumes_from' => 'mysql_data')
301
+ expect(result.messages.key?('volumes_from')).to be_truthy
302
+
303
+ result = subject.validate_options('volumes_from' => ['mysql_data'])
304
+ expect(result.messages.key?('volumes_from')).to be_falsey
305
+ end
306
+ end
307
+ end
308
+ end
309
+ end
@@ -89,7 +89,6 @@ describe Kontena::Cli::Common do
89
89
 
90
90
  expect(subject.current_master['url']).to eq('someurl')
91
91
  expect(subject.current_master['name']).to eq('alias')
92
-
93
92
  end
94
93
  end
95
94
 
@@ -122,4 +121,43 @@ describe Kontena::Cli::Common do
122
121
  end
123
122
 
124
123
  end
124
+
125
+ describe '#error' do
126
+ it 'prints error message to stderr if given and raise error' do
127
+ expect($stderr).to receive(:puts).with('error message!')
128
+ expect{subject.error('error message!')}.to raise_error(SystemExit)
129
+ end
130
+ end
131
+
132
+ describe '#confirm_command' do
133
+ it 'returns true if input matches' do
134
+ allow(subject).to receive(:prompt).and_return('name-to-confirm')
135
+
136
+ expect(subject.confirm_command('name-to-confirm')).to be_truthy
137
+ expect{subject.confirm_command('name-to-confirm')}.to_not raise_error
138
+ end
139
+
140
+ it 'raises error unless input matches' do
141
+ expect(subject).to receive(:prompt).and_return('wrong-name')
142
+ expect(subject).to receive(:error).with(/did not match/)
143
+
144
+ subject.confirm_command('name-to-confirm')
145
+ end
146
+ end
147
+
148
+ describe '#confirm' do
149
+ it 'returns true if confirmed' do
150
+ allow(subject).to receive(:prompt).and_return('y')
151
+
152
+ expect(subject.confirm).to be_truthy
153
+ expect{subject.confirm}.to_not raise_error
154
+ end
155
+
156
+ it 'raises error unless confirmed' do
157
+ expect(subject).to receive(:prompt).and_return('ei')
158
+ expect(subject).to receive(:error).with(/Aborted/)
159
+
160
+ subject.confirm
161
+ end
162
+ end
125
163
  end
@@ -8,11 +8,20 @@ describe Kontena::Cli::Master::Users::RemoveCommand do
8
8
 
9
9
  describe '#execute' do
10
10
 
11
+ before(:each) do
12
+ allow(subject).to receive(:confirm).and_return(true)
13
+ end
14
+
11
15
  it 'requires api url' do
12
16
  expect(subject).to receive(:require_api_url).once
13
17
  subject.run(['john@domain.com'])
14
18
  end
15
19
 
20
+ it 'it requires confirmation' do
21
+ expect(subject).to receive(:confirm).once
22
+ subject.run(['john@domain.com'])
23
+ end
24
+
16
25
  it 'requires token' do
17
26
  expect(subject).to receive(:require_token).and_return(token)
18
27
  subject.run(['john@domain.com'])
@@ -23,11 +23,13 @@ describe Kontena::Cli::Master::Users::Roles::RemoveCommand do
23
23
  before(:each) do
24
24
  allow(subject).to receive(:client).and_return(client)
25
25
  allow(subject).to receive(:settings).and_return(valid_settings)
26
+ allow(subject).to receive(:confirm).and_return(true)
26
27
  end
27
28
 
28
29
  it 'makes remove role request for all given users' do
29
30
  expect(client).to receive(:delete).with("users/john@example.org/roles/role").once
30
31
  expect(client).to receive(:delete).with("users/jane@example.org/roles/role").once
32
+ expect(subject).to receive(:confirm).once
31
33
 
32
34
  subject.run(['role', 'john@example.org', 'jane@example.org'])
33
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kontena-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.4
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kontena, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-29 00:00:00.000000000 Z
11
+ date: 2016-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,6 +122,34 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: dry-validation
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 0.7.4
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 0.7.4
139
+ - !ruby/object:Gem::Dependency
140
+ name: dry-logic
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 0.2.2
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 0.2.2
125
153
  description: Kontena command line tool
126
154
  email:
127
155
  - info@kontena.io
@@ -143,6 +171,7 @@ files:
143
171
  - lib/kontena/cli/app_command.rb
144
172
  - lib/kontena/cli/apps/build_command.rb
145
173
  - lib/kontena/cli/apps/common.rb
174
+ - lib/kontena/cli/apps/config_command.rb
146
175
  - lib/kontena/cli/apps/deploy_command.rb
147
176
  - lib/kontena/cli/apps/docker_compose_generator.rb
148
177
  - lib/kontena/cli/apps/docker_helper.rb
@@ -155,9 +184,16 @@ files:
155
184
  - lib/kontena/cli/apps/remove_command.rb
156
185
  - lib/kontena/cli/apps/restart_command.rb
157
186
  - lib/kontena/cli/apps/scale_command.rb
187
+ - lib/kontena/cli/apps/service_generator.rb
188
+ - lib/kontena/cli/apps/service_generator_v2.rb
158
189
  - lib/kontena/cli/apps/show_command.rb
159
190
  - lib/kontena/cli/apps/start_command.rb
160
191
  - lib/kontena/cli/apps/stop_command.rb
192
+ - lib/kontena/cli/apps/yaml/reader.rb
193
+ - lib/kontena/cli/apps/yaml/service_extender.rb
194
+ - lib/kontena/cli/apps/yaml/validations.rb
195
+ - lib/kontena/cli/apps/yaml/validator.rb
196
+ - lib/kontena/cli/apps/yaml/validator_v2.rb
161
197
  - lib/kontena/cli/bytes_helper.rb
162
198
  - lib/kontena/cli/common.rb
163
199
  - lib/kontena/cli/container_command.rb
@@ -207,6 +243,10 @@ files:
207
243
  - lib/kontena/cli/master/digital_ocean/create_command.rb
208
244
  - lib/kontena/cli/master/digital_ocean_command.rb
209
245
  - lib/kontena/cli/master/list_command.rb
246
+ - lib/kontena/cli/master/packet/create_command.rb
247
+ - lib/kontena/cli/master/packet_command.rb
248
+ - lib/kontena/cli/master/upcloud/create_command.rb
249
+ - lib/kontena/cli/master/upcloud_command.rb
210
250
  - lib/kontena/cli/master/use_command.rb
211
251
  - lib/kontena/cli/master/users/invite_command.rb
212
252
  - lib/kontena/cli/master/users/list_command.rb
@@ -240,9 +280,17 @@ files:
240
280
  - lib/kontena/cli/nodes/labels/add_command.rb
241
281
  - lib/kontena/cli/nodes/labels/remove_command.rb
242
282
  - lib/kontena/cli/nodes/list_command.rb
283
+ - lib/kontena/cli/nodes/packet/create_command.rb
284
+ - lib/kontena/cli/nodes/packet/restart_command.rb
285
+ - lib/kontena/cli/nodes/packet/terminate_command.rb
286
+ - lib/kontena/cli/nodes/packet_command.rb
243
287
  - lib/kontena/cli/nodes/remove_command.rb
244
288
  - lib/kontena/cli/nodes/show_command.rb
245
289
  - lib/kontena/cli/nodes/ssh_command.rb
290
+ - lib/kontena/cli/nodes/upcloud/create_command.rb
291
+ - lib/kontena/cli/nodes/upcloud/restart_command.rb
292
+ - lib/kontena/cli/nodes/upcloud/terminate_command.rb
293
+ - lib/kontena/cli/nodes/upcloud_command.rb
246
294
  - lib/kontena/cli/nodes/update_command.rb
247
295
  - lib/kontena/cli/nodes/vagrant/create_command.rb
248
296
  - lib/kontena/cli/nodes/vagrant/restart_command.rb
@@ -327,7 +375,23 @@ files:
327
375
  - lib/kontena/machine/digital_ocean/master_provisioner.rb
328
376
  - lib/kontena/machine/digital_ocean/node_destroyer.rb
329
377
  - lib/kontena/machine/digital_ocean/node_provisioner.rb
378
+ - lib/kontena/machine/packet.rb
379
+ - lib/kontena/machine/packet/cloudinit.yml
380
+ - lib/kontena/machine/packet/cloudinit_master.yml
381
+ - lib/kontena/machine/packet/master_provisioner.rb
382
+ - lib/kontena/machine/packet/node_destroyer.rb
383
+ - lib/kontena/machine/packet/node_provisioner.rb
384
+ - lib/kontena/machine/packet/node_restarter.rb
385
+ - lib/kontena/machine/packet/packet_common.rb
330
386
  - lib/kontena/machine/random_name.rb
387
+ - lib/kontena/machine/upcloud.rb
388
+ - lib/kontena/machine/upcloud/cloudinit.yml
389
+ - lib/kontena/machine/upcloud/cloudinit_master.yml
390
+ - lib/kontena/machine/upcloud/master_provisioner.rb
391
+ - lib/kontena/machine/upcloud/node_destroyer.rb
392
+ - lib/kontena/machine/upcloud/node_provisioner.rb
393
+ - lib/kontena/machine/upcloud/node_restarter.rb
394
+ - lib/kontena/machine/upcloud/upcloud_common.rb
331
395
  - lib/kontena/machine/vagrant.rb
332
396
  - lib/kontena/machine/vagrant/Vagrantfile.master.rb.erb
333
397
  - lib/kontena/machine/vagrant/Vagrantfile.node.rb.erb
@@ -339,7 +403,11 @@ files:
339
403
  - lib/kontena/scripts/completer
340
404
  - lib/kontena/scripts/init
341
405
  - spec/fixtures/docker-compose.yml
406
+ - spec/fixtures/docker-compose_v2.yml
407
+ - spec/fixtures/kontena-invalid.yml
408
+ - spec/fixtures/kontena-with-variables.yml
342
409
  - spec/fixtures/kontena.yml
410
+ - spec/fixtures/kontena_v2.yml
343
411
  - spec/fixtures/mysql.yml
344
412
  - spec/fixtures/wordpress-scaled.yml
345
413
  - spec/fixtures/wordpress.yml
@@ -347,6 +415,12 @@ files:
347
415
  - spec/kontena/cli/app/deploy_command_spec.rb
348
416
  - spec/kontena/cli/app/docker_helper_spec.rb
349
417
  - spec/kontena/cli/app/scale_spec.rb
418
+ - spec/kontena/cli/app/service_generator_spec.rb
419
+ - spec/kontena/cli/app/service_generator_v2_spec.rb
420
+ - spec/kontena/cli/app/yaml/reader_spec.rb
421
+ - spec/kontena/cli/app/yaml/service_extender_spec.rb
422
+ - spec/kontena/cli/app/yaml/validator_spec.rb
423
+ - spec/kontena/cli/app/yaml/validator_v2_spec.rb
350
424
  - spec/kontena/cli/common_spec.rb
351
425
  - spec/kontena/cli/grids/trusted_subnets/add_command_spec.rb
352
426
  - spec/kontena/cli/grids/trusted_subnets/list_command_spec.rb
@@ -397,7 +471,11 @@ specification_version: 4
397
471
  summary: Kontena command line tool
398
472
  test_files:
399
473
  - spec/fixtures/docker-compose.yml
474
+ - spec/fixtures/docker-compose_v2.yml
475
+ - spec/fixtures/kontena-invalid.yml
476
+ - spec/fixtures/kontena-with-variables.yml
400
477
  - spec/fixtures/kontena.yml
478
+ - spec/fixtures/kontena_v2.yml
401
479
  - spec/fixtures/mysql.yml
402
480
  - spec/fixtures/wordpress-scaled.yml
403
481
  - spec/fixtures/wordpress.yml
@@ -405,6 +483,12 @@ test_files:
405
483
  - spec/kontena/cli/app/deploy_command_spec.rb
406
484
  - spec/kontena/cli/app/docker_helper_spec.rb
407
485
  - spec/kontena/cli/app/scale_spec.rb
486
+ - spec/kontena/cli/app/service_generator_spec.rb
487
+ - spec/kontena/cli/app/service_generator_v2_spec.rb
488
+ - spec/kontena/cli/app/yaml/reader_spec.rb
489
+ - spec/kontena/cli/app/yaml/service_extender_spec.rb
490
+ - spec/kontena/cli/app/yaml/validator_spec.rb
491
+ - spec/kontena/cli/app/yaml/validator_v2_spec.rb
408
492
  - spec/kontena/cli/common_spec.rb
409
493
  - spec/kontena/cli/grids/trusted_subnets/add_command_spec.rb
410
494
  - spec/kontena/cli/grids/trusted_subnets/list_command_spec.rb