kontena-cli 0.13.4 → 0.14.0
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/VERSION +1 -1
- data/kontena-cli.gemspec +2 -0
- data/lib/kontena/cli/app_command.rb +2 -0
- data/lib/kontena/cli/apps/common.rb +80 -74
- data/lib/kontena/cli/apps/config_command.rb +29 -0
- data/lib/kontena/cli/apps/deploy_command.rb +12 -81
- data/lib/kontena/cli/apps/docker_helper.rb +3 -3
- data/lib/kontena/cli/apps/init_command.rb +0 -3
- data/lib/kontena/cli/apps/list_command.rb +2 -3
- data/lib/kontena/cli/apps/logs_command.rb +2 -3
- data/lib/kontena/cli/apps/monitor_command.rb +3 -4
- data/lib/kontena/cli/apps/remove_command.rb +4 -4
- data/lib/kontena/cli/apps/restart_command.rb +2 -3
- data/lib/kontena/cli/apps/scale_command.rb +3 -5
- data/lib/kontena/cli/apps/service_generator.rb +123 -0
- data/lib/kontena/cli/apps/service_generator_v2.rb +26 -0
- data/lib/kontena/cli/apps/show_command.rb +1 -2
- data/lib/kontena/cli/apps/start_command.rb +2 -3
- data/lib/kontena/cli/apps/stop_command.rb +2 -3
- data/lib/kontena/cli/apps/yaml/reader.rb +150 -0
- data/lib/kontena/cli/apps/yaml/service_extender.rb +60 -0
- data/lib/kontena/cli/apps/yaml/validations.rb +79 -0
- data/lib/kontena/cli/apps/yaml/validator.rb +55 -0
- data/lib/kontena/cli/apps/yaml/validator_v2.rb +74 -0
- data/lib/kontena/cli/common.rb +23 -0
- data/lib/kontena/cli/etcd/remove_command.rb +2 -0
- data/lib/kontena/cli/grids/remove_command.rb +2 -0
- data/lib/kontena/cli/grids/users/remove_command.rb +3 -0
- data/lib/kontena/cli/master/azure/create_command.rb +0 -2
- data/lib/kontena/cli/master/packet/create_command.rb +42 -0
- data/lib/kontena/cli/master/packet_command.rb +14 -0
- data/lib/kontena/cli/master/upcloud/create_command.rb +39 -0
- data/lib/kontena/cli/master/upcloud_command.rb +13 -0
- data/lib/kontena/cli/master/users/remove_command.rb +3 -0
- data/lib/kontena/cli/master/users/roles/remove_command.rb +2 -0
- data/lib/kontena/cli/master_command.rb +4 -0
- data/lib/kontena/cli/node_command.rb +4 -0
- data/lib/kontena/cli/nodes/azure/create_command.rb +0 -2
- data/lib/kontena/cli/nodes/list_command.rb +4 -8
- data/lib/kontena/cli/nodes/packet/create_command.rb +35 -0
- data/lib/kontena/cli/nodes/packet/restart_command.rb +17 -0
- data/lib/kontena/cli/nodes/packet/terminate_command.rb +20 -0
- data/lib/kontena/cli/nodes/packet_command.rb +15 -0
- data/lib/kontena/cli/nodes/remove_command.rb +2 -0
- data/lib/kontena/cli/nodes/show_command.rb +3 -1
- data/lib/kontena/cli/nodes/upcloud/create_command.rb +33 -0
- data/lib/kontena/cli/nodes/upcloud/restart_command.rb +20 -0
- data/lib/kontena/cli/nodes/upcloud/terminate_command.rb +20 -0
- data/lib/kontena/cli/nodes/upcloud_command.rb +15 -0
- data/lib/kontena/cli/registry/remove_command.rb +3 -0
- data/lib/kontena/cli/services/remove_command.rb +2 -0
- data/lib/kontena/cli/services/services_helper.rb +1 -0
- data/lib/kontena/cli/vault/list_command.rb +2 -0
- data/lib/kontena/cli/vault/read_command.rb +2 -0
- data/lib/kontena/cli/vault/remove_command.rb +4 -0
- data/lib/kontena/cli/vault/update_command.rb +8 -1
- data/lib/kontena/cli/vault/write_command.rb +2 -0
- data/lib/kontena/cli/vpn/remove_command.rb +3 -0
- data/lib/kontena/machine/azure/master_provisioner.rb +2 -2
- data/lib/kontena/machine/azure/node_provisioner.rb +7 -4
- data/lib/kontena/machine/digital_ocean/node_provisioner.rb +1 -1
- data/lib/kontena/machine/packet.rb +17 -0
- data/lib/kontena/machine/packet/cloudinit.yml +66 -0
- data/lib/kontena/machine/packet/cloudinit_master.yml +118 -0
- data/lib/kontena/machine/packet/master_provisioner.rb +93 -0
- data/lib/kontena/machine/packet/node_destroyer.rb +42 -0
- data/lib/kontena/machine/packet/node_provisioner.rb +77 -0
- data/lib/kontena/machine/packet/node_restarter.rb +41 -0
- data/lib/kontena/machine/packet/packet_common.rb +89 -0
- data/lib/kontena/machine/upcloud.rb +9 -0
- data/lib/kontena/machine/upcloud/cloudinit.yml +64 -0
- data/lib/kontena/machine/upcloud/cloudinit_master.yml +118 -0
- data/lib/kontena/machine/upcloud/master_provisioner.rb +136 -0
- data/lib/kontena/machine/upcloud/node_destroyer.rb +82 -0
- data/lib/kontena/machine/upcloud/node_provisioner.rb +119 -0
- data/lib/kontena/machine/upcloud/node_restarter.rb +47 -0
- data/lib/kontena/machine/upcloud/upcloud_common.rb +70 -0
- data/lib/kontena/scripts/completer +8 -3
- data/spec/fixtures/docker-compose_v2.yml +10 -0
- data/spec/fixtures/kontena-invalid.yml +4 -0
- data/spec/fixtures/kontena-with-variables.yml +19 -0
- data/spec/fixtures/kontena.yml +2 -2
- data/spec/fixtures/kontena_v2.yml +35 -0
- data/spec/kontena/cli/app/common_spec.rb +39 -101
- data/spec/kontena/cli/app/deploy_command_spec.rb +37 -388
- data/spec/kontena/cli/app/docker_helper_spec.rb +4 -4
- data/spec/kontena/cli/app/service_generator_spec.rb +374 -0
- data/spec/kontena/cli/app/service_generator_v2_spec.rb +74 -0
- data/spec/kontena/cli/app/yaml/reader_spec.rb +249 -0
- data/spec/kontena/cli/app/yaml/service_extender_spec.rb +104 -0
- data/spec/kontena/cli/app/yaml/validator_spec.rb +263 -0
- data/spec/kontena/cli/app/yaml/validator_v2_spec.rb +309 -0
- data/spec/kontena/cli/common_spec.rb +39 -1
- data/spec/kontena/cli/master/users/remove_command_spec.rb +9 -0
- data/spec/kontena/cli/master/users/roles/remove_command_spec.rb +2 -0
- metadata +86 -2
|
@@ -119,6 +119,7 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
it 'reads given yml file' do
|
|
122
|
+
allow(subject).to receive(:project_name_from_yaml).and_return nil
|
|
122
123
|
expect(File).to receive(:read).with("#{Dir.getwd}/custom.yml").and_return(kontena_yml)
|
|
123
124
|
subject.run(["--file", "custom.yml"])
|
|
124
125
|
end
|
|
@@ -133,22 +134,17 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
133
134
|
context 'when yml file has multiple env files' do
|
|
134
135
|
it 'merges environment variables correctly' do
|
|
135
136
|
allow(subject).to receive(:current_dir).and_return("kontena-test")
|
|
136
|
-
allow(YAML).to receive(:load).and_return(services)
|
|
137
137
|
services['wordpress']['environment'] = ['MYSQL_ADMIN_PASSWORD=password']
|
|
138
138
|
services['wordpress']['env_file'] = %w(/path/to/env_file .env)
|
|
139
|
+
allow(YAML).to receive(:load).and_return(services)
|
|
139
140
|
|
|
140
141
|
expect(File).to receive(:readlines).with('/path/to/env_file').and_return(env_vars)
|
|
141
142
|
expect(File).to receive(:readlines).with('.env').and_return(dot_env)
|
|
142
143
|
|
|
143
144
|
data = {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
:container_count=>2,
|
|
148
|
-
:stateful=>false,
|
|
149
|
-
:strategy=>'ha',
|
|
150
|
-
:links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
|
|
151
|
-
:ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
|
|
145
|
+
'name' => 'kontena-test-wordpress',
|
|
146
|
+
'image' => 'wordpress:latest',
|
|
147
|
+
'env' => ['MYSQL_ADMIN_PASSWORD=password', 'TEST_ENV_VAR=test', 'TEST_ENV_VAR2=test3'],
|
|
152
148
|
}
|
|
153
149
|
|
|
154
150
|
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
|
@@ -159,21 +155,16 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
159
155
|
context 'when yml file has one env file' do
|
|
160
156
|
it 'merges environment variables correctly' do
|
|
161
157
|
allow(subject).to receive(:current_dir).and_return("kontena-test")
|
|
162
|
-
allow(YAML).to receive(:load).and_return(services)
|
|
163
158
|
services['wordpress']['environment'] = ['MYSQL_ADMIN_PASSWORD=password']
|
|
164
159
|
services['wordpress']['env_file'] = '/path/to/env_file'
|
|
160
|
+
allow(YAML).to receive(:load).and_return(services)
|
|
165
161
|
|
|
166
162
|
expect(File).to receive(:readlines).with('/path/to/env_file').and_return(env_vars)
|
|
167
163
|
|
|
168
164
|
data = {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
:container_count=>2,
|
|
173
|
-
:stateful=>false,
|
|
174
|
-
:strategy=>'ha',
|
|
175
|
-
:links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
|
|
176
|
-
:ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
|
|
165
|
+
'name' => 'kontena-test-wordpress',
|
|
166
|
+
'image' => 'wordpress:latest',
|
|
167
|
+
'env' => ['MYSQL_ADMIN_PASSWORD=password', 'TEST_ENV_VAR=test']
|
|
177
168
|
}
|
|
178
169
|
|
|
179
170
|
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
|
@@ -183,17 +174,21 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
183
174
|
|
|
184
175
|
it 'merges external links to links' do
|
|
185
176
|
allow(subject).to receive(:current_dir).and_return("kontena-test")
|
|
186
|
-
allow(YAML).to receive(:load).and_return(services)
|
|
187
177
|
services['wordpress']['external_links'] = ['loadbalancer:loadbalancer']
|
|
178
|
+
allow(YAML).to receive(:load).and_return(services)
|
|
188
179
|
data = {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
180
|
+
'name' => 'kontena-test-wordpress',
|
|
181
|
+
'image' => 'wordpress:latest',
|
|
182
|
+
'links' => [
|
|
183
|
+
{
|
|
184
|
+
'name' => 'kontena-test-mysql',
|
|
185
|
+
'alias' => 'db'
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
'name' => 'loadbalancer',
|
|
189
|
+
'alias' => 'loadbalancer'
|
|
190
|
+
}
|
|
191
|
+
]
|
|
197
192
|
}
|
|
198
193
|
|
|
199
194
|
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
|
@@ -203,11 +198,11 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
203
198
|
it 'creates mysql service before wordpress' do
|
|
204
199
|
allow(subject).to receive(:current_dir).and_return("kontena-test")
|
|
205
200
|
data = {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
201
|
+
'name' => 'kontena-test-mysql',
|
|
202
|
+
'image' => 'mysql:5.6',
|
|
203
|
+
'env' => ['MYSQL_ROOT_PASSWORD=kontena-test_secret'],
|
|
204
|
+
'container_count' => nil,
|
|
205
|
+
'stateful' => true,
|
|
211
206
|
}
|
|
212
207
|
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
|
213
208
|
|
|
@@ -215,17 +210,17 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
215
210
|
end
|
|
216
211
|
|
|
217
212
|
it 'creates wordpress service' do
|
|
218
|
-
allow(subject).to receive(:current_dir).and_return(
|
|
213
|
+
allow(subject).to receive(:current_dir).and_return('kontena-test')
|
|
219
214
|
|
|
220
215
|
data = {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
216
|
+
'name' => 'kontena-test-wordpress',
|
|
217
|
+
'image' => 'wordpress:4.1',
|
|
218
|
+
'env' => ['WORDPRESS_DB_PASSWORD=kontena-test_secret'],
|
|
219
|
+
'container_count' => 2,
|
|
220
|
+
'stateful' => true,
|
|
221
|
+
'strategy' => 'ha',
|
|
222
|
+
'links' => [{ 'name' => 'kontena-test-mysql', 'alias' => 'mysql' }],
|
|
223
|
+
'ports' => [{ 'container_port' => '80', 'node_port' => '80', 'protocol' => 'tcp' }]
|
|
229
224
|
}
|
|
230
225
|
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
|
231
226
|
|
|
@@ -233,7 +228,7 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
233
228
|
end
|
|
234
229
|
|
|
235
230
|
it 'deploys services' do
|
|
236
|
-
allow(subject).to receive(:current_dir).and_return(
|
|
231
|
+
allow(subject).to receive(:current_dir).and_return('kontena-test')
|
|
237
232
|
expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-mysql', {})
|
|
238
233
|
expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-wordpress', {})
|
|
239
234
|
subject.run([])
|
|
@@ -251,350 +246,4 @@ describe Kontena::Cli::Apps::DeployCommand do
|
|
|
251
246
|
end
|
|
252
247
|
end
|
|
253
248
|
end
|
|
254
|
-
|
|
255
|
-
describe '#parse_data' do
|
|
256
|
-
|
|
257
|
-
context 'volumes' do
|
|
258
|
-
it 'returns volumes if set' do
|
|
259
|
-
data = {
|
|
260
|
-
'image' => 'foo/bar:latest',
|
|
261
|
-
'volumes' => [
|
|
262
|
-
'mongodb-1'
|
|
263
|
-
]
|
|
264
|
-
}
|
|
265
|
-
result = subject.send(:parse_data, data)
|
|
266
|
-
expect(result[:volumes]).to eq(data['volumes'])
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
it 'returns empty volumes if not set' do
|
|
270
|
-
data = {
|
|
271
|
-
'image' => 'foo/bar:latest'
|
|
272
|
-
}
|
|
273
|
-
result = subject.send(:parse_data, data)
|
|
274
|
-
expect(result[:volumes]).to eq([])
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
context 'volumes_from' do
|
|
279
|
-
it 'returns volumes_from if set' do
|
|
280
|
-
data = {
|
|
281
|
-
'image' => 'foo/bar:latest',
|
|
282
|
-
'volumes_from' => [
|
|
283
|
-
'mongodb-1'
|
|
284
|
-
]
|
|
285
|
-
}
|
|
286
|
-
result = subject.send(:parse_data, data)
|
|
287
|
-
expect(result[:volumes_from]).to eq(data['volumes_from'])
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
it 'returns empty volumes_from if not set' do
|
|
291
|
-
data = {
|
|
292
|
-
'image' => 'foo/bar:latest'
|
|
293
|
-
}
|
|
294
|
-
result = subject.send(:parse_data, data)
|
|
295
|
-
expect(result[:volumes_from]).to eq([])
|
|
296
|
-
end
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
context 'command' do
|
|
300
|
-
it 'returns cmd array if set' do
|
|
301
|
-
data = {
|
|
302
|
-
'image' => 'foo/bar:latest',
|
|
303
|
-
'command' => 'ls -la'
|
|
304
|
-
}
|
|
305
|
-
result = subject.send(:parse_data, data)
|
|
306
|
-
expect(result[:cmd]).to eq(data['command'].split(' '))
|
|
307
|
-
end
|
|
308
|
-
|
|
309
|
-
it 'does not return cmd if not set' do
|
|
310
|
-
data = {
|
|
311
|
-
'image' => 'foo/bar:latest'
|
|
312
|
-
}
|
|
313
|
-
result = subject.send(:parse_data, data)
|
|
314
|
-
expect(result.has_key?(:cmd)).to be_falsey
|
|
315
|
-
end
|
|
316
|
-
end
|
|
317
|
-
|
|
318
|
-
context 'affinity' do
|
|
319
|
-
it 'returns affinity if set' do
|
|
320
|
-
data = {
|
|
321
|
-
'image' => 'foo/bar:latest',
|
|
322
|
-
'affinity' => [
|
|
323
|
-
'label==az=b'
|
|
324
|
-
]
|
|
325
|
-
}
|
|
326
|
-
result = subject.send(:parse_data, data)
|
|
327
|
-
expect(result[:affinity]).to eq(data['affinity'])
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
it 'returns affinity as empty array if not set' do
|
|
331
|
-
data = {
|
|
332
|
-
'image' => 'foo/bar:latest'
|
|
333
|
-
}
|
|
334
|
-
result = subject.send(:parse_data, data)
|
|
335
|
-
expect(result.has_key?(:affinity)).to be_truthy
|
|
336
|
-
expect(result[:affinity]).to eq([])
|
|
337
|
-
end
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
context 'user' do
|
|
341
|
-
it 'returns user if set' do
|
|
342
|
-
data = {
|
|
343
|
-
'image' => 'foo/bar:latest',
|
|
344
|
-
'user' => 'user'
|
|
345
|
-
}
|
|
346
|
-
result = subject.send(:parse_data, data)
|
|
347
|
-
expect(result[:user]).to eq('user')
|
|
348
|
-
end
|
|
349
|
-
|
|
350
|
-
it 'does not return user if not set' do
|
|
351
|
-
data = {
|
|
352
|
-
'image' => 'foo/bar:latest'
|
|
353
|
-
}
|
|
354
|
-
result = subject.send(:parse_data, data)
|
|
355
|
-
expect(result.has_key?(:user)).to be_falsey
|
|
356
|
-
end
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
context 'stateful' do
|
|
360
|
-
it 'returns stateful if set' do
|
|
361
|
-
data = {
|
|
362
|
-
'image' => 'foo/bar:latest',
|
|
363
|
-
'stateful' => true
|
|
364
|
-
}
|
|
365
|
-
result = subject.send(:parse_data, data)
|
|
366
|
-
expect(result[:stateful]).to eq(true)
|
|
367
|
-
end
|
|
368
|
-
|
|
369
|
-
it 'returns stateful as false if not set' do
|
|
370
|
-
data = {
|
|
371
|
-
'image' => 'foo/bar:latest'
|
|
372
|
-
}
|
|
373
|
-
result = subject.send(:parse_data, data)
|
|
374
|
-
expect(result[:stateful]).to eq(false)
|
|
375
|
-
end
|
|
376
|
-
end
|
|
377
|
-
|
|
378
|
-
context 'privileged' do
|
|
379
|
-
it 'returns privileged if set' do
|
|
380
|
-
data = {
|
|
381
|
-
'image' => 'foo/bar:latest',
|
|
382
|
-
'privileged' => false
|
|
383
|
-
}
|
|
384
|
-
result = subject.send(:parse_data, data)
|
|
385
|
-
expect(result[:privileged]).to eq(false)
|
|
386
|
-
end
|
|
387
|
-
|
|
388
|
-
it 'does not return privileged if not set' do
|
|
389
|
-
data = {
|
|
390
|
-
'image' => 'foo/bar:latest'
|
|
391
|
-
}
|
|
392
|
-
result = subject.send(:parse_data, data)
|
|
393
|
-
expect(result[:privileged]).to be_nil
|
|
394
|
-
end
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
context 'cap_add' do
|
|
398
|
-
it 'returns cap_drop if set' do
|
|
399
|
-
data = {
|
|
400
|
-
'image' => 'foo/bar:latest',
|
|
401
|
-
'cap_add' => [
|
|
402
|
-
'NET_ADMIN'
|
|
403
|
-
]
|
|
404
|
-
}
|
|
405
|
-
result = subject.send(:parse_data, data)
|
|
406
|
-
expect(result[:cap_add]).to eq(data['cap_add'])
|
|
407
|
-
end
|
|
408
|
-
|
|
409
|
-
it 'does not return cap_add if not set' do
|
|
410
|
-
data = {
|
|
411
|
-
'image' => 'foo/bar:latest'
|
|
412
|
-
}
|
|
413
|
-
result = subject.send(:parse_data, data)
|
|
414
|
-
expect(result[:cap_add]).to be_nil
|
|
415
|
-
end
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
context 'cap_drop' do
|
|
419
|
-
it 'returns cap_drop if set' do
|
|
420
|
-
data = {
|
|
421
|
-
'image' => 'foo/bar:latest',
|
|
422
|
-
'cap_drop' => [
|
|
423
|
-
'NET_ADMIN'
|
|
424
|
-
]
|
|
425
|
-
}
|
|
426
|
-
result = subject.send(:parse_data, data)
|
|
427
|
-
expect(result[:cap_drop]).to eq(data['cap_drop'])
|
|
428
|
-
end
|
|
429
|
-
|
|
430
|
-
it 'does not return cap_drop if not set' do
|
|
431
|
-
data = {
|
|
432
|
-
'image' => 'foo/bar:latest'
|
|
433
|
-
}
|
|
434
|
-
result = subject.send(:parse_data, data)
|
|
435
|
-
expect(result[:cap_drop]).to be_nil
|
|
436
|
-
end
|
|
437
|
-
end
|
|
438
|
-
|
|
439
|
-
context 'net' do
|
|
440
|
-
it 'returns net if set' do
|
|
441
|
-
data = {
|
|
442
|
-
'image' => 'foo/bar:latest',
|
|
443
|
-
'net' => 'host'
|
|
444
|
-
}
|
|
445
|
-
result = subject.send(:parse_data, data)
|
|
446
|
-
expect(result[:net]).to eq('host')
|
|
447
|
-
end
|
|
448
|
-
|
|
449
|
-
it 'does not return pid if not set' do
|
|
450
|
-
data = {
|
|
451
|
-
'image' => 'foo/bar:latest'
|
|
452
|
-
}
|
|
453
|
-
result = subject.send(:parse_data, data)
|
|
454
|
-
expect(result[:net]).to be_nil
|
|
455
|
-
end
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
context 'pid' do
|
|
459
|
-
it 'returns pid if set' do
|
|
460
|
-
data = {
|
|
461
|
-
'image' => 'foo/bar:latest',
|
|
462
|
-
'pid' => 'host'
|
|
463
|
-
}
|
|
464
|
-
result = subject.send(:parse_data, data)
|
|
465
|
-
expect(result[:pid]).to eq('host')
|
|
466
|
-
end
|
|
467
|
-
|
|
468
|
-
it 'does not return pid if not set' do
|
|
469
|
-
data = {
|
|
470
|
-
'image' => 'foo/bar:latest'
|
|
471
|
-
}
|
|
472
|
-
result = subject.send(:parse_data, data)
|
|
473
|
-
expect(result[:pid]).to be_nil
|
|
474
|
-
end
|
|
475
|
-
end
|
|
476
|
-
|
|
477
|
-
context 'log_driver' do
|
|
478
|
-
it 'returns log_driver if set' do
|
|
479
|
-
data = {
|
|
480
|
-
'image' => 'foo/bar:latest',
|
|
481
|
-
'log_driver' => 'syslog'
|
|
482
|
-
}
|
|
483
|
-
result = subject.send(:parse_data, data)
|
|
484
|
-
expect(result[:log_driver]).to eq('syslog')
|
|
485
|
-
end
|
|
486
|
-
|
|
487
|
-
it 'does not return log_driver if not set' do
|
|
488
|
-
data = {
|
|
489
|
-
'image' => 'foo/bar:latest'
|
|
490
|
-
}
|
|
491
|
-
result = subject.send(:parse_data, data)
|
|
492
|
-
expect(result[:log_driver]).to be_nil
|
|
493
|
-
end
|
|
494
|
-
end
|
|
495
|
-
|
|
496
|
-
context 'log_opt' do
|
|
497
|
-
it 'returns log_opts hash if log_opt is set' do
|
|
498
|
-
data = {
|
|
499
|
-
'image' => 'foo/bar:latest',
|
|
500
|
-
'log_driver' => 'fluentd',
|
|
501
|
-
'log_opt' => {
|
|
502
|
-
'fluentd-address' => '192.168.99.1:24224',
|
|
503
|
-
'fluentd-tag' => 'docker.{{.Name}}'
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
result = subject.send(:parse_data, data)
|
|
507
|
-
expect(result[:log_opts]).to eq(data['log_opt'])
|
|
508
|
-
end
|
|
509
|
-
|
|
510
|
-
it 'does not return log_opts if log_opt is not set' do
|
|
511
|
-
data = {
|
|
512
|
-
'image' => 'foo/bar:latest'
|
|
513
|
-
}
|
|
514
|
-
result = subject.send(:parse_data, data)
|
|
515
|
-
expect(result[:log_opts]).to be_nil
|
|
516
|
-
end
|
|
517
|
-
end
|
|
518
|
-
|
|
519
|
-
context 'deploy_opts' do
|
|
520
|
-
it 'returns deploy_opts if deploy.wait_for_port is defined' do
|
|
521
|
-
data = {
|
|
522
|
-
'image' => 'foo/bar:latest',
|
|
523
|
-
'deploy' => {
|
|
524
|
-
'wait_for_port' => '8080'
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
result = subject.send(:parse_data, data)
|
|
528
|
-
expect(result[:deploy_opts][:wait_for_port]).to eq('8080')
|
|
529
|
-
end
|
|
530
|
-
|
|
531
|
-
it 'returns deploy_opts if deploy.min_health is defined' do
|
|
532
|
-
data = {
|
|
533
|
-
'image' => 'foo/bar:latest',
|
|
534
|
-
'deploy' => {
|
|
535
|
-
'min_health' => '0.5'
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
result = subject.send(:parse_data, data)
|
|
539
|
-
expect(result[:deploy_opts][:min_health]).to eq('0.5')
|
|
540
|
-
end
|
|
541
|
-
|
|
542
|
-
it 'sets strategy if deploy.strategy is defined' do
|
|
543
|
-
data = {
|
|
544
|
-
'image' => 'foo/bar:latest',
|
|
545
|
-
'deploy' => {
|
|
546
|
-
'strategy' => 'daemon'
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
result = subject.send(:parse_data, data)
|
|
550
|
-
expect(result[:strategy]).to eq('daemon')
|
|
551
|
-
end
|
|
552
|
-
|
|
553
|
-
it 'does not return deploy_opts if no deploy options are defined' do
|
|
554
|
-
data = {
|
|
555
|
-
'image' => 'foo/bar:latest'
|
|
556
|
-
}
|
|
557
|
-
result = subject.send(:parse_data, data)
|
|
558
|
-
expect(result[:deploy_opts]).to be_nil
|
|
559
|
-
end
|
|
560
|
-
end
|
|
561
|
-
|
|
562
|
-
context 'hooks' do
|
|
563
|
-
it 'returns hooks hash if defined' do
|
|
564
|
-
data = {
|
|
565
|
-
'image' => 'foo/bar:latest',
|
|
566
|
-
'hooks' => {
|
|
567
|
-
'post_start' => []
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
result = subject.send(:parse_data, data)
|
|
571
|
-
expect(result[:hooks]).to eq(data['hooks'])
|
|
572
|
-
end
|
|
573
|
-
|
|
574
|
-
it 'does returns empty hook hash if not defined' do
|
|
575
|
-
data = {'image' => 'foo/bar:latest'}
|
|
576
|
-
result = subject.send(:parse_data, data)
|
|
577
|
-
expect(result[:hooks]).to eq({})
|
|
578
|
-
end
|
|
579
|
-
end
|
|
580
|
-
|
|
581
|
-
context 'secrets' do
|
|
582
|
-
it 'returns secrets array if defined' do
|
|
583
|
-
data = {
|
|
584
|
-
'image' => 'foo/bar:latest',
|
|
585
|
-
'secrets' => [
|
|
586
|
-
{'secret' => 'MYSQL_ADMIN_PASSWORD', 'name' => 'WORDPRESS_DB_PASSWORD', 'type' => 'env'}
|
|
587
|
-
]
|
|
588
|
-
}
|
|
589
|
-
result = subject.send(:parse_data, data)
|
|
590
|
-
expect(result[:secrets]).to eq(data['secrets'])
|
|
591
|
-
end
|
|
592
|
-
|
|
593
|
-
it 'does not return secrets if not defined' do
|
|
594
|
-
data = {'image' => 'foo/bar:latest'}
|
|
595
|
-
result = subject.send(:parse_data, data)
|
|
596
|
-
expect(result[:secrets]).to be_nil
|
|
597
|
-
end
|
|
598
|
-
end
|
|
599
|
-
end
|
|
600
249
|
end
|