presidium 0.19.3 → 0.19.5
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.
- package/Docker.js +25 -8
- package/Docker.test.js +20 -10
- package/DockerService.js +3 -1
- package/DockerService.test.js +3 -1
- package/package.json +1 -1
package/Docker.js
CHANGED
|
@@ -336,6 +336,7 @@ Docker.prototype.removeImage = function dockerRemoveImage(image, options) {
|
|
|
336
336
|
* healthRetries: 5|number, // number of retries before unhealhty
|
|
337
337
|
* healthStartPeriod: >=1e6, // nanoseconds to wait on container init before starting first healthcheck
|
|
338
338
|
* memory: number, // memory limit in bytes
|
|
339
|
+
* cpus: number, // number of cpus
|
|
339
340
|
* mounts: Array<{
|
|
340
341
|
* source: string, // name of volume
|
|
341
342
|
* target: string, // mounted path inside container
|
|
@@ -762,6 +763,8 @@ Docker.prototype.updateSwarm = async function dockerUpdateSwarm(options = {}) {
|
|
|
762
763
|
* healthTimeout: 20e9|>1e6, // nanoseconds to wait before healthcheck fails
|
|
763
764
|
* healthRetries: 5|number, // number of retries before unhealhty
|
|
764
765
|
* healthStartPeriod: >=1e6, // nanoseconds to wait on container init before starting first healthcheck
|
|
766
|
+
* memory: number, // memory limit in bytes
|
|
767
|
+
* cpus: number, // number of cpus
|
|
765
768
|
* mounts: Array<{
|
|
766
769
|
* source: string, // name of volume
|
|
767
770
|
* target: string, // mounted path inside container
|
|
@@ -860,11 +863,18 @@ Docker.prototype.createService = function dockerCreateService(service, options)
|
|
|
860
863
|
MaxAttempts: pipe([get(1, 10), Number]),
|
|
861
864
|
})(options.restart.split(':')),
|
|
862
865
|
},
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
866
|
+
|
|
867
|
+
Resources: {
|
|
868
|
+
Reservations: {
|
|
869
|
+
...options.memory ? {
|
|
870
|
+
MemoryBytes: Number(options.memory),
|
|
871
|
+
} : {},
|
|
872
|
+
...options.cpus ? {
|
|
873
|
+
NanoCPUs: Number(options.cpus * 1e9),
|
|
874
|
+
} : {},
|
|
875
|
+
}, // bytes
|
|
867
876
|
},
|
|
877
|
+
|
|
868
878
|
...options.logDriver && {
|
|
869
879
|
LogDriver: {
|
|
870
880
|
Name: options.logDriver,
|
|
@@ -979,6 +989,8 @@ const has = property => value => {
|
|
|
979
989
|
* healthTimeout: 20e9|>1e6, // nanoseconds to wait before healthcheck fails
|
|
980
990
|
* healthRetries: 5|number, // number of retries before unhealhty
|
|
981
991
|
* healthStartPeriod: >=1e6, // nanoseconds to wait on container init before starting first healthcheck
|
|
992
|
+
* memory: number, // memory limit in bytes
|
|
993
|
+
* cpus: number, // number of cpus
|
|
982
994
|
* mounts: Array<{
|
|
983
995
|
* source: string, // name of volume
|
|
984
996
|
* target: string, // mounted path inside container
|
|
@@ -1074,10 +1086,15 @@ Docker.prototype.updateService = function dockerUpdateService(service, options)
|
|
|
1074
1086
|
...options.restartDelay && { Delay: Number(options.restartDelay) },
|
|
1075
1087
|
},
|
|
1076
1088
|
},
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1089
|
+
Resources: {
|
|
1090
|
+
Reservations: {
|
|
1091
|
+
...options.memory ? {
|
|
1092
|
+
MemoryBytes: Number(options.memory),
|
|
1093
|
+
} : {},
|
|
1094
|
+
...options.cpus ? {
|
|
1095
|
+
NanoCPUs: Number(options.cpus * 1e9),
|
|
1096
|
+
} : {},
|
|
1097
|
+
}, // bytes
|
|
1081
1098
|
},
|
|
1082
1099
|
...or([has('logDriver'), has('logDriverOptions')])(options) && {
|
|
1083
1100
|
LogDriver: {
|
package/Docker.test.js
CHANGED
|
@@ -345,6 +345,7 @@ EXPOSE 8888`,
|
|
|
345
345
|
readonly: true,
|
|
346
346
|
}],
|
|
347
347
|
memory: 512e6, // bytes
|
|
348
|
+
cpus: 2,
|
|
348
349
|
restart: 'on-failure:5',
|
|
349
350
|
|
|
350
351
|
healthCmd: ['wget', '--no-verbose', '--tries=1', '--spider', 'localhost:3000'],
|
|
@@ -367,7 +368,17 @@ EXPOSE 8888`,
|
|
|
367
368
|
})
|
|
368
369
|
assert.equal(response.status, 201)
|
|
369
370
|
const body = await response.json()
|
|
370
|
-
|
|
371
|
+
const serviceId = body.ID
|
|
372
|
+
|
|
373
|
+
await docker.inspectService(serviceId).then(async response => {
|
|
374
|
+
const data = await response.json()
|
|
375
|
+
assert.equal(data.Spec.Labels.foo, 'bar')
|
|
376
|
+
assert.equal(data.Spec.TaskTemplate.Resources.Reservations.NanoCPUs, 2000000000)
|
|
377
|
+
assert.equal(data.Spec.TaskTemplate.Resources.Reservations.MemoryBytes, 512000000)
|
|
378
|
+
})
|
|
379
|
+
|
|
380
|
+
this.serviceId1 = serviceId
|
|
381
|
+
|
|
371
382
|
}
|
|
372
383
|
|
|
373
384
|
{ // create another service
|
|
@@ -382,13 +393,19 @@ EXPOSE 8888`,
|
|
|
382
393
|
target: '/opt/other-volume',
|
|
383
394
|
readonly: true,
|
|
384
395
|
}],
|
|
385
|
-
memory: 512e6, // bytes
|
|
386
396
|
restart: 'on-failure',
|
|
387
397
|
publish: { 8081: 3001 },
|
|
388
398
|
|
|
389
399
|
healthCmd: ['wget', '--no-verbose', '--tries=1', '--spider', 'localhost:3001'],
|
|
390
400
|
})
|
|
391
401
|
assert.equal(response.status, 201)
|
|
402
|
+
const body = await response.json()
|
|
403
|
+
const serviceId = body.ID
|
|
404
|
+
|
|
405
|
+
await docker.inspectService(serviceId).then(async response => {
|
|
406
|
+
const data = await response.json()
|
|
407
|
+
assert.equal(Object.keys(data.Spec.TaskTemplate.Resources.Reservations), 0)
|
|
408
|
+
})
|
|
392
409
|
}
|
|
393
410
|
|
|
394
411
|
{ // listServices
|
|
@@ -404,15 +421,8 @@ EXPOSE 8888`,
|
|
|
404
421
|
assert.equal(body.length, 3) // 2 for hey1, 1 for hey2 (global)
|
|
405
422
|
}
|
|
406
423
|
|
|
407
|
-
{ // inspectService
|
|
408
|
-
const response = await docker.inspectService(this.serviceId)
|
|
409
|
-
assert.equal(response.status, 200)
|
|
410
|
-
const data = await response.json()
|
|
411
|
-
assert.equal(data.Spec.Labels.foo, 'bar')
|
|
412
|
-
}
|
|
413
|
-
|
|
414
424
|
{ // deleteService
|
|
415
|
-
const response = await docker.deleteService(this.
|
|
425
|
+
const response = await docker.deleteService(this.serviceId1)
|
|
416
426
|
assert.equal(response.status, 200)
|
|
417
427
|
}
|
|
418
428
|
|
package/DockerService.js
CHANGED
|
@@ -36,7 +36,7 @@ const dockerServiceOptions = [
|
|
|
36
36
|
'rollbackParallelism', 'rollbackDelay',
|
|
37
37
|
'rollbackFailureAction', 'rollbackMonitor', 'rollbackMaxFailureRatio',
|
|
38
38
|
'username', 'password', 'email', 'serveraddress', 'identitytoken',
|
|
39
|
-
'network',
|
|
39
|
+
'network', 'memory', 'cpus',
|
|
40
40
|
]
|
|
41
41
|
|
|
42
42
|
/**
|
|
@@ -58,6 +58,8 @@ const dockerServiceOptions = [
|
|
|
58
58
|
* healthTimeout: 20e9|>1e6, // nanoseconds to wait before healthcheck fails
|
|
59
59
|
* healthRetries: 5|number, // number of retries before unhealhty
|
|
60
60
|
* healthStartPeriod: >=1e6, // nanoseconds to wait on container init before starting first healthcheck
|
|
61
|
+
* memory: number, // memory limit in bytes
|
|
62
|
+
* cpus: number, // number of cpus
|
|
61
63
|
* mounts: Array<{
|
|
62
64
|
* source: string, // name of volume
|
|
63
65
|
* target: string, // mounted path inside container
|
package/DockerService.test.js
CHANGED
|
@@ -68,6 +68,7 @@ const test = new Test('DockerService', DockerService)
|
|
|
68
68
|
healthCmd: ['curl', '0.0.0.0:80'],
|
|
69
69
|
restart: 'on-failure:5',
|
|
70
70
|
memory: 512e6, // bytes
|
|
71
|
+
cpus: 2,
|
|
71
72
|
})
|
|
72
73
|
|
|
73
74
|
{
|
|
@@ -96,7 +97,8 @@ const test = new Test('DockerService', DockerService)
|
|
|
96
97
|
[{ Type: 'volume', Source: 'other-volume', Target: '/opt/other-volume' }])
|
|
97
98
|
assert.equal(info.Spec.TaskTemplate.RestartPolicy.Condition, 'on-failure')
|
|
98
99
|
assert.equal(info.Spec.TaskTemplate.RestartPolicy.MaxAttempts, 5)
|
|
99
|
-
assert.equal(info.Spec.TaskTemplate.Resources.
|
|
100
|
+
assert.equal(info.Spec.TaskTemplate.Resources.Reservations.MemoryBytes, 512e6)
|
|
101
|
+
assert.equal(info.Spec.TaskTemplate.Resources.Reservations.NanoCPUs, 2e9)
|
|
100
102
|
this.myServiceSpec = myService.spec
|
|
101
103
|
}
|
|
102
104
|
|