diff --git a/src/addons.js b/src/addons.js index b8b5907c7..e9260f0fe 100644 --- a/src/addons.js +++ b/src/addons.js @@ -421,31 +421,14 @@ function setupMySql(app, options, callback) { debugApp(app, 'Setting up mysql'); - var container = dockerConnection.getContainer('mysql'); var cmd = [ '/addons/mysql/service.sh', options.multipleDatabases ? 'add-prefix' : 'add', app.id ]; - container.exec({ Cmd: cmd, AttachStdout: true, AttachStderr: true }, function (error, execContainer) { + docker.execContainer('mysql', cmd, null /* input */, function (error, stdout) { if (error) return callback(error); - execContainer.start(function (error, stream) { - if (error) return callback(error); - - var stdout = new MemoryStream(); - var stderr = new MemoryStream(); - - execContainer.modem.demuxStream(stream, stdout, stderr); - stderr.on('data', function (data) { debugApp(app, data.toString('utf8')); }); // set -e output - - var chunks = [ ]; - stdout.on('data', function (chunk) { chunks.push(chunk); }); - - stream.on('error', callback); - stream.on('end', function () { - var env = Buffer.concat(chunks).toString('utf8').split('\n').slice(0, -1); // remove trailing newline - debugApp(app, 'Setting mysql addon config to %j', env); - appdb.setAddonConfig(app.id, 'mysql', env, callback); - }); - }); + var env = stdout.toString('utf8').split('\n').slice(0, -1); // remove trailing newline + debugApp(app, 'Setting mysql addon config to %j', env); + appdb.setAddonConfig(app.id, 'mysql', env, callback); }); } @@ -454,24 +437,14 @@ function teardownMySql(app, options, callback) { assert.strictEqual(typeof options, 'object'); assert.strictEqual(typeof callback, 'function'); - var container = dockerConnection.getContainer('mysql'); var cmd = [ '/addons/mysql/service.sh', options.multipleDatabases ? 'remove-prefix' : 'remove', app.id ]; debugApp(app, 'Tearing down mysql'); - container.exec({ Cmd: cmd, AttachStdout: true, AttachStderr: true }, function (error, execContainer) { + docker.execContainer('mysql', cmd, null /* input */, function (error) { if (error) return callback(error); - execContainer.start(function (error, stream) { - if (error) return callback(error); - - var data = ''; - stream.on('error', callback); - stream.on('data', function (d) { data += d.toString('utf8'); }); - stream.on('end', function () { - appdb.unsetAddonConfig(app.id, 'mysql', callback); - }); - }); + appdb.unsetAddonConfig(app.id, 'mysql', callback); }); } diff --git a/src/docker.js b/src/docker.js index 145e5822f..a279841bb 100644 --- a/src/docker.js +++ b/src/docker.js @@ -403,10 +403,13 @@ function execContainer(containerId, cmd, input, callback) { callback = once(callback); // ChildProcess exit may or may not be called after error var cp = spawn('/usr/bin/docker', [ 'exec', '-i', containerId ].concat(cmd)); - cp.on('error', callback); + var chunks = [ ]; + cp.stdout.on('data', function (chunk) { chunks.push(chunk); }); + + cp.on('error', function (error) { console.log(error); callback(error); }); cp.on('exit', function (code, signal) { debug('execContainer code: %s signal: %s', code, signal); - if (!callback.called) callback(code ? 'Failed with status ' + code : null, process.stdout); + if (!callback.called) callback(code ? 'Failed with status ' + code : null, Buffer.concat(chunks)); }); cp.stderr.pipe(process.stderr);