UNPKG

mecano

Version:

Common functions for system deployment.

83 lines (78 loc) 2.45 kB
// Generated by CoffeeScript 1.9.1 var escape, execute, wrap; escape = function(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); }; module.exports = function(options, callback) { return wrap(this, arguments, function(options, callback) { var crontab, do_list, do_write, modified, ref; if (!(((ref = options.cmd) != null ? ref.length : void 0) > 0)) { return callback(new Error('valid cmd is required')); } if (options.user != null) { if (typeof options.log === "function") { options.log("Using user " + options.user + " [INFO]"); } crontab = "crontab -u " + options.user; } else { if (typeof options.log === "function") { options.log('Using default user [INFO]'); } crontab = "crontab"; } modified = false; do_list = function() { return execute({ cmd: crontab + " -l", ssh: options.ssh, log: options.log, stdout: options.stdout, stderr: options.stderr }, function(err, _, stdout, stderr) { var i, j, job, jobs, len, myjob, regex; if (err && !/^no crontab for/.test(stderr)) { return callback(err); } if (err) { return next(err); } myjob = options.when ? escape(options.when) : '.*'; myjob += escape(" " + options.cmd); regex = new RegExp(myjob); jobs = stdout.split('\n'); jobs.pop(); for (i = j = 0, len = jobs.length; j < len; i = ++j) { job = jobs[i]; if (regex.test(job)) { if (typeof options.log === "function") { options.log("Job '" + job + "' matches. Removing from list [WARN]"); } modified = true; jobs.splice(i, 1); } } return do_write(jobs); }); }; do_write = function(jobs) { if (!modified) { if (typeof options.log === "function") { options.log('No Job matches. Skipping [INFO]'); } if (!modified) { return callback(null, false); } } return execute({ cmd: "echo -e '" + (jobs.join('\\n')) + "' | " + crontab + " -", ssh: options.ssh, log: options.log, stdout: options.stdout, stderr: options.stderr }, callback); }; return do_list(); }); }; wrap = require('./misc/wrap'); execute = require('./execute');