UNPKG

1.03 kBtext/coffeescriptView Raw
1
2{exec} = require "child_process"
3
4knife = "knife"
5buildKnifeCommand = (role, env) ->
6 if env
7 "#{knife} search node --format=json 'role:#{role} AND chef_environment:#{env}' --format=json"
8
9
10getNodesByRoleAndEnv = (role, env, cb) ->
11 exec buildKnifeCommand(role, env), (err, stdout) ->
12 return cb err if err?
13 nodes = JSON.parse stdout
14 cb null, nodes
15
16defaultFindHost = (member) ->
17 member.automatic.cloud.public_hostname
18
19module.exports = (opts, cb) ->
20 return cb new Error "no role specified" if not opts.role
21 findHost = opts.findHost || defaultFindHost
22 knife = opts.knifePath || knife
23
24 env = opts.env || "_default"
25 getNodesByRoleAndEnv opts.role, env, (err, nodes) ->
26 return cb err if err?
27
28 return cb new Error("no hosts found!") if not nodes.results
29 members = nodes.rows
30 hosts = []
31 for member in members
32 try
33 hosts.push findHost(member)
34 catch error
35 return cb new Error("failed to find the hostname using method:\n #{findHost.toString()}")
36
37 cb null, hosts