mecano
Version:
Common functions for system deployment.
124 lines (121 loc) • 2.94 kB
JavaScript
// Generated by CoffeeScript 1.11.1
var uid_gid;
module.exports = function(options, callback) {
var do_compare, do_create, do_info, do_modify, info, modified;
options.log({
message: "Entering group",
level: 'DEBUG',
module: 'mecano/lib/group'
});
if (!options.name) {
return callback(new Error("Option 'name' is required"));
}
if (options.system == null) {
options.system = false;
}
if (options.gid == null) {
options.gid = null;
}
modified = false;
info = null;
do_info = function() {
options.log({
message: "Get group information for '" + options.name + "'",
level: 'DEBUG',
module: 'mecano/lib/group'
});
options.store.cache_group = void 0;
return uid_gid.group(options.ssh, options.store, function(err, groups) {
if (err) {
return callback(err);
}
info = groups[options.name];
options.log({
message: "Got " + (JSON.stringify(info)),
level: 'INFO',
module: 'mecano/lib/group'
});
if (info) {
return do_compare();
} else {
return do_create();
}
});
};
do_create = (function(_this) {
return function() {
var cmd;
cmd = 'groupadd';
if (options.system) {
cmd += " -r";
}
if (options.gid) {
cmd += " -g " + options.gid;
}
cmd += " " + options.name;
return _this.execute({
cmd: cmd,
code_skipped: 9
}, function(err, created) {
if (err) {
return callback(err);
}
if (created) {
modified = true;
} else {
options.log({
message: "Group defined elsewhere than '/etc/group', exit code is 9",
level: 'WARN',
module: 'mecano/lib/group'
});
}
return callback(null, modified);
});
};
})(this);
do_compare = function() {
var i, k, len, ref;
ref = ['gid'];
for (i = 0, len = ref.length; i < len; i++) {
k = ref[i];
if ((options[k] != null) && info[k] !== options[k]) {
modified = true;
}
}
if (modified) {
options.log({
message: "Group information modified",
level: 'WARN',
module: 'mecano/lib/group'
});
} else {
options.log({
message: "Group information unchanged",
level: 'DEBUG',
module: 'mecano/lib/group'
});
}
if (modified) {
return do_modify();
} else {
return callback();
}
};
do_modify = (function(_this) {
return function() {
var cmd;
cmd = 'groupmod';
if (options.gid) {
cmd += " -g " + options.gid;
}
cmd += " " + options.name;
return _this.execute({
cmd: cmd
}, function(err) {
return callback(err, modified);
});
};
})(this);
return do_info();
};
uid_gid = require('../misc/uid_gid');