p42
Version:
CLI wrapper for using Docker with Swarm.
131 lines (116 loc) • 3.67 kB
JavaScript
// Generated by CoffeeScript 1.10.0
(function() {
var Config, Errors, Target, Usage, YAML, abort, action, async, call, includes, isBranch, isCluster, join, read, readdir, ref, ref1, rest, write,
slice = [].slice;
join = require("path").join;
YAML = require("js-yaml");
ref = require("fairmont"), async = ref.async, call = ref.call, read = ref.read, readdir = ref.readdir, write = ref.write, abort = ref.abort, includes = ref.includes;
Errors = {
invalidBranch: function(branch) {
return abort("p42: Invalid branch: " + branch);
},
invalidCluster: function(cluster) {
return abort("p42: Invalid cluster: " + cluster);
},
invalidConfig: function() {
return abort("p42: Invalid application configuration.\nTry running: p42 init");
},
errorWritingConfig: function() {
return abort("p42: Unexpected error updating application configuration.");
}
};
Usage = {
main: function() {
return abort("Usage: p42 target [add|rm|remove|mv|rename] <branch> <cluster>");
},
add: function() {
return abort("Usage: p42 target add <branch> <cluster>");
},
remove: function() {
return abort("Usage: p42 target [remove|rm] <branch> <cluster>");
},
rename: function() {
return abort("Usage: p42 target [rename|mv] <branch> <branch>");
}
};
isBranch = function(name) {
return true;
};
isCluster = async(function*(name) {
return includes(name, (yield readdir(join(process.env.HOME, ".config", "p42", "clusters"))));
});
Config = (function(configPath) {
return {
read: async(function*() {
var config, error;
try {
config = YAML.safeLoad((yield read(configPath)));
if (config.clusters == null) {
config.clusters = {};
}
return config;
} catch (error) {
return Errors.invalidConfig();
}
}),
write: async(function*(config) {
var error;
try {
return (yield write(configPath, YAML.safeDump(config)));
} catch (error) {
return Errors.errorWritingConfig();
}
})
};
})(join(".", "p42.yaml"));
Target = {
add: async(function*(branch, cluster) {
var config;
if (!((branch != null) && (cluster != null))) {
Usage.add();
}
if (!isBranch(branch)) {
Errors.invalidBranch(branch);
}
if (!(yield isCluster(cluster))) {
Errors.invalidCluster(cluster);
}
config = (yield Config.read());
config.clusters[branch] = cluster;
return (yield Config.write(config));
}),
remove: async(function*(branch) {
var config;
if (branch == null) {
Usage.remove();
}
if (!isBranch(branch)) {
Errors.invalidBranch(branch);
}
config = (yield Config.read());
delete config.clusters[branch];
return (yield Config.write(config));
}),
rename: async(function*(before, after) {
var config;
if (!((before != null) && (after != null))) {
Usage.rename();
}
if (!isBranch(after)) {
Errors.invalidBranch(after);
}
config = (yield Config.read());
config.clusters[after] = config.clusters[before];
delete config.clusters[before];
return (yield Config.write(config));
})
};
Target.rm = Target.remove;
Target.mv = Target.rename;
ref1 = process.argv.slice(2), action = ref1[0], rest = 2 <= ref1.length ? slice.call(ref1, 1) : [];
if (Target[action] != null) {
Target[action].apply(Target, rest);
} else {
Usage.main();
}
}).call(this);