mecano
Version:
Common functions for system deployment.
111 lines (107 loc) • 2.75 kB
JavaScript
// Generated by CoffeeScript 1.11.1
var docker, path;
module.exports = function(options) {
var cmd, cmd_ps, cmd_up, k, ref, services, source_dir, v;
options.log({
message: "Entering Docker Compose",
level: 'DEBUG',
module: 'mecano/lib/docker/compose/up'
});
if (options.docker == null) {
options.docker = {};
}
ref = options.docker;
for (k in ref) {
v = ref[k];
if (options[k] == null) {
options[k] = v;
}
}
if ((options.target == null) && (options.content == null)) {
throw Error('Missing docker-compose content or target');
}
if (options.content && (options.target == null)) {
if (options.target == null) {
options.target = "/tmp/docker_compose_" + (Date.now()) + "/docker-compose.yml";
}
}
if (options.detached == null) {
options.detached = true;
}
if (options.force == null) {
options.force = false;
}
if (options.recreate == null) {
options.recreate = false;
}
if (options.services == null) {
options.services = [];
}
if (!Array.isArray(options.services)) {
options.services = [options.services];
}
services = options.services.join(' ');
cmd = " --file " + options.target;
cmd_ps = cmd + " ps -q | xargs docker inspect";
cmd_up = cmd + " up";
if (options.detached) {
cmd_up += ' -d ';
}
if (options.force) {
cmd_up += ' --force-recreate ';
}
cmd_up += " " + services;
source_dir = "" + (path.dirname(options.target));
if (options.eof == null) {
options.eof = true;
}
if (options.backup == null) {
options.backup = false;
}
options.compose = true;
this.file.yaml({
"if": options.content != null,
eof: options.eof,
backup: options.backup,
target: options.target,
content: options.content
});
this.call(function(_, callback) {
var start;
start = true;
this.execute({
cmd: docker.wrap(options, cmd_ps),
cwd: options.cwd,
uid: options.uid,
code_skipped: 123,
stdout_log: false
}, function(err, status, stdout, stderr) {
var containers;
if (err) {
throw err;
}
if (!status) {
return start = true;
}
containers = JSON.parse(stdout);
start = containers.some(function(container) {
return !container.State.Running;
});
if (start) {
return options.log("Docker created, need start");
}
});
return this.then(function() {
return callback(null, start);
});
});
return this.execute({
"if": function() {
return options.force || this.status();
},
cwd: source_dir,
cmd: docker.wrap(options, cmd_up)
}, docker.callback);
};
docker = require('../../misc/docker');
path = require('path');