UNPKG

mecano

Version:

Common functions for system deployment.

111 lines (107 loc) 2.75 kB
// 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');