UNPKG

1.67 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.3.1
2(function() {
3 var buildKnifeCommand, defaultFindHost, exec, getNodesByRoleAndEnv, knife;
4
5 exec = require("child_process").exec;
6
7 knife = "knife";
8
9 buildKnifeCommand = function(role, env) {
10 if (env) {
11 return "" + knife + " search node --format=json 'role:" + role + " AND chef_environment:" + env + "' --format=json";
12 }
13 };
14
15 getNodesByRoleAndEnv = function(role, env, cb) {
16 return exec(buildKnifeCommand(role, env), function(err, stdout) {
17 var nodes;
18 if (err != null) {
19 return cb(err);
20 }
21 nodes = JSON.parse(stdout);
22 return cb(null, nodes);
23 });
24 };
25
26 defaultFindHost = function(member) {
27 return member.automatic.cloud.public_hostname;
28 };
29
30 module.exports = function(opts, cb) {
31 var env, findHost;
32 if (!opts.role) {
33 return cb(new Error("no role specified"));
34 }
35 findHost = opts.findHost || defaultFindHost;
36 knife = opts.knifePath || knife;
37 env = opts.env || "_default";
38 return getNodesByRoleAndEnv(opts.role, env, function(err, nodes) {
39 var hosts, member, members, _i, _len;
40 if (err != null) {
41 return cb(err);
42 }
43 if (!nodes.results) {
44 return cb(new Error("no hosts found!"));
45 }
46 members = nodes.rows;
47 hosts = [];
48 for (_i = 0, _len = members.length; _i < _len; _i++) {
49 member = members[_i];
50 try {
51 hosts.push(findHost(member));
52 } catch (error) {
53 return cb(new Error("failed to find the hostname using method:\n " + (findHost.toString())));
54 }
55 }
56 return cb(null, hosts);
57 });
58 };
59
60}).call(this);