mecano
Version:
Common functions for system deployment.
119 lines (118 loc) • 3.79 kB
JavaScript
// Generated by CoffeeScript 1.9.1
module.exports = function(options, callback) {
var do_end, do_startuped, modified, startup_add, startup_del;
if (!options.name) {
return callback(new Error("Missing required option 'name'"));
}
if (options.startup == null) {
return callback(new Error("Missing required option 'startup'"));
}
modified = false;
do_startuped = (function(_this) {
return function() {
return _this.execute({
cmd: "chkconfig --list " + options.name,
code_skipped: 1
}, function(err, registered, stdout, stderr) {
var c, current_startup, j, len, level, ref, ref1, status;
if (err) {
return callback(err);
}
if (/^error/.test(stderr)) {
if (typeof options.log === "function") {
options.log("Mecano `service_startup`: Invalid chkconfig name for `" + options.name + "` [ERROR]");
}
return callback(new Error("Invalid chkconfig name for `" + options.name + "`"));
}
current_startup = '';
if (registered) {
ref = stdout.split(' ').pop().trim().split('\t');
for (j = 0, len = ref.length; j < len; j++) {
c = ref[j];
ref1 = c.split(':'), level = ref1[0], status = ref1[1];
if (['on', 'marche'].indexOf(status) > -1) {
current_startup += level;
}
}
}
if (options.startup === true && current_startup.length) {
return do_end();
}
if (options.startup === current_startup) {
return do_end();
}
if (registered && options.startup === false && current_startup === '') {
return do_end();
}
modified = true;
if (options.startup) {
return startup_add();
} else {
return startup_del();
}
});
};
})(this);
startup_add = (function(_this) {
return function() {
var cmd, i, j, startup_off, startup_on;
cmd = "chkconfig --add " + options.name + ";";
if (typeof options.startup === 'string') {
startup_on = startup_off = '';
for (i = j = 0; j < 6; i = ++j) {
if (options.startup.indexOf(i) !== -1) {
startup_on += i;
} else {
startup_off += i;
}
}
if (startup_on) {
cmd += "chkconfig --level " + startup_on + " " + options.name + " on;";
}
if (startup_off) {
cmd += "chkconfig --level " + startup_off + " " + options.name + " off;";
}
} else {
cmd += "chkconfig " + options.name + " on;";
}
return _this.execute({
cmd: cmd
}, function(err) {
if (err) {
return callback(err);
}
if (typeof options.log === "function") {
options.log("Mecano `service_startup`: " + options.name + " on [INFO]");
}
return do_end();
});
};
})(this);
startup_del = (function(_this) {
return function() {
if (typeof options.log === "function") {
options.log("Mecano `service_startup`: startup off");
}
return _this.execute({
cmd: "chkconfig " + options.name + " off"
}, function(err) {
if (err) {
return callback(err);
}
if (typeof options.log === "function") {
options.log("Mecano `service_startup`: " + options.name + " off [INFO]");
}
return do_end();
});
};
})(this);
do_end = function() {
if (!modified) {
if (typeof options.log === "function") {
options.log("Mecano `service_startup`: " + options.name + " not modified [DEBUG]");
}
}
return callback(null, modified);
};
return do_startuped();
};