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 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
- ...options.memory && {
864
- Resources: {
865
- Limits: { MemoryBytes: Number(options.memory) }, // bytes
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
- ...options.memory && {
1078
- Resources: {
1079
- Limits: { MemoryBytes: Number(options.memory) }, // bytes
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
- this.serviceId = body.ID
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.serviceId)
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
@@ -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.Limits.MemoryBytes, 512e6)
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "presidium",
3
- "version": "0.19.3",
3
+ "version": "0.19.5",
4
4
  "description": "A library for creating web services",
5
5
  "author": "Richard Tong",
6
6
  "license": "MIT",