mecano
Version:
Common functions for system deployment.
94 lines (89 loc) • 2.47 kB
JavaScript
// Generated by CoffeeScript 1.11.1
var fs, quote, string;
module.exports = function(options) {
var properties;
options.log({
message: "Entering file.ini",
level: 'DEBUG',
module: 'mecano/lib/file.ini'
});
if (!options.target) {
throw Error("Missing argument options.target");
}
if (options.separator == null) {
options.separator = '=';
}
if (options.content == null) {
options.content = {};
}
if (options.sort == null) {
options.sort = false;
}
properties = options.merge ? {} : options.content;
options.log({
message: "Merging \"" + (options.merge ? 'true' : 'false') + "\"",
level: 'DEBUG',
module: 'mecano/lib/file.ini'
});
this.call({
"if": options.merge,
handler: function(_, callback) {
options.log({
message: "Reading target \"" + options.target + "\"",
level: 'DEBUG',
module: 'mecano/lib/file.ini'
});
return fs.readFile(options.ssh, options.target, 'utf8', function(err, data) {
var i, k, len, line, lines, ref, ref1, v;
if (err) {
return callback(err);
}
lines = string.lines(data);
for (i = 0, len = lines.length; i < len; i++) {
line = lines[i];
if (/^#/.test(line)) {
continue;
}
if (/^\w*$/.test(line)) {
continue;
}
ref = RegExp("^(.*?)" + (quote(options.separator)) + "(.*)$").exec(line), _ = ref[0], k = ref[1], v = ref[2];
properties[k] = v;
}
ref1 = options.content;
for (k in ref1) {
v = ref1[k];
if (v === null) {
delete properties[k];
} else {
properties[k] = v;
}
}
return callback();
});
}
});
return this.call(function() {
var data, key, keys;
keys = options.sort ? Object.keys(properties).sort() : Object.keys(properties);
data = (function() {
var i, len, results;
results = [];
for (i = 0, len = keys.length; i < len; i++) {
key = keys[i];
results.push("" + key + options.separator + properties[key]);
}
return results;
})();
data = data.join('\n');
return this.file({
target: "" + options.target,
content: data,
backup: options.backup,
eof: true
});
});
};
fs = require('ssh2-fs');
quote = require('regexp-quote');
string = require('../misc/string');