Deduplicate compose command running logic.

This commit is contained in:
Pagan Gazzard 2016-06-20 11:55:25 -07:00 committed by Pablo Carranza Velez
parent a371e35d5c
commit 707ed7e1f6

View File

@ -6,10 +6,29 @@ dockerUtils = require './docker-utils'
fs = Promise.promisifyAll(require('fs'))
spawn = require('child_process').spawn
runComposeCommand = (composeArgs, path, onStatus) ->
onStatus ?= console.log.bind(console)
reportStatus = (status) ->
try onStatus(status)
new Promise (resolve, reject) ->
child = spawn('docker-compose', ['-f', path].concat(composeArgs), stdio: 'pipe')
.on 'error', reject
.on 'exit', (code) ->
return reject(new Error("docker-compose exited with code #{code}")) if code isnt 0
resolve()
child.stdout.on 'data', (data) ->
reportStatus(status: '' + data)
child.stderr.on 'data', (data) ->
reportStatus(status: '' + data)
.catch (err) ->
msg = err?.message or err
reportStatus(error: msg)
throw err
# Runs docker-compose up using the compose YAML at "path".
# Reports status and errors in JSON to the onStatus function.
exports.up = (path, onStatus) ->
onStatus = console.log.bind(console) if !onStatus?
onStatus ?= console.log.bind(console)
reportStatus = (status) ->
try onStatus(status)
fs.readFileAsync(path)
@ -28,38 +47,8 @@ exports.up = (path, onStatus) ->
.catch ->
dockerUtils.pullImage(service.image, reportStatus)
.then ->
new Promise (resolve, reject) ->
child = spawn('docker-compose', ['-f', path, 'up', '-d'], stdio: 'pipe')
.on 'error', reject
.on 'exit', (code) ->
return reject(new Error("docker-compose exited with code #{code}")) if code isnt 0
resolve()
child.stdout.on 'data', (data) ->
reportStatus(status: '' + data)
child.stderr.on 'data', (data) ->
reportStatus(status: '' + data)
.catch (err) ->
msg = err?.message or err
reportStatus(error: msg)
throw err
runComposeCommand(['up', '-d'], path, onStatus)
# Runs docker-compose down using the compose YAML at "path".
# Reports status and errors in JSON to the onStatus function.
exports.down = (path, onStatus) ->
onStatus = console.log.bind(console) if !onStatus?
reportStatus = (status) ->
try onStatus(status)
new Promise (resolve, reject) ->
child = spawn('docker-compose', ['-f', path, 'down'], stdio: 'pipe')
.on 'error', reject
.on 'exit', (code) ->
return reject(new Error("docker-compose exited with code #{code}")) if code isnt 0
resolve()
child.stdout.on 'data', (data) ->
reportStatus(status: '' + data)
child.stderr.on 'data', (data) ->
reportStatus(status: '' + data)
.catch (err) ->
msg = err?.message or err
reportStatus(error: msg)
throw err
exports.down = _.partial(runComposeCommand, 'down')