1 | import cdi from 'cccf-docker-instructions'
|
2 | import clone from 'clone'
|
3 |
|
4 | function removeOutputFields(s) {
|
5 | let service = clone(s)
|
6 | delete service.placement
|
7 | delete service.driver
|
8 | service.host = `tcp://${service.host.ip}:4243`
|
9 | service.memory = service.memory+'b'
|
10 | service['cpu-shares'] = service.cpu
|
11 | delete service.cpu
|
12 | return service
|
13 | }
|
14 |
|
15 | export default function applyPlan(plan, args) {
|
16 | args = args || {}
|
17 |
|
18 | let add_cmds = cdi.run(plan.add.map(removeOutputFields))
|
19 | let stop_cmds = cdi.stop(plan.remove.map(removeOutputFields))
|
20 | let rm_cmds = cdi.rm(plan.remove.map(removeOutputFields))
|
21 |
|
22 |
|
23 |
|
24 | if (args['always-remove']) {
|
25 | let rmIds = plan.remove.map(p => p.id)
|
26 | let addIds = plan.add.map(p => p.id)
|
27 | let allNew = plan.add.filter(a => rmIds.indexOf(a.id) < 0)
|
28 | let always_remove = cdi.rm(allNew.map(removeOutputFields))
|
29 | rm_cmds = rm_cmds.concat(always_remove)
|
30 | }
|
31 |
|
32 | return stop_cmds.concat(rm_cmds, add_cmds)
|
33 | }
|
34 |
|