blob: 8a4058a59396ea4f8b9d399ca3d4415b711e5448 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# encoding: utf-8
module LeapCli
module Macro
##
## HOSTS
##
#
# records the list of hosts that are encountered for this node
#
def hostnames(nodes)
@referenced_nodes ||= Config::ObjectList.new
nodes = listify(nodes)
nodes.each_node do |node|
@referenced_nodes[node.name] ||= node
end
return nodes.values.collect {|node| node.domain.name}
end
#
# Generates entries needed for updating /etc/hosts on a node (as a hash).
#
# Argument `nodes` can be nil or a list of nodes. If nil, only include the
# IPs of the other nodes this @node as has encountered (plus all mx nodes).
#
# Also, for virtual machines, we use the local address if this @node is in
# the same location as the node in question.
#
# We include the ssh public key for each host, so that the hash can also
# be used to generate the /etc/ssh/known_hosts
#
def hosts_file(nodes=nil)
if nodes.nil?
if @referenced_nodes && @referenced_nodes.any?
nodes = @referenced_nodes
nodes = nodes.merge(nodes_like_me[:services => 'mx']) # all nodes always need to communicate with mx nodes.
end
end
return {} unless nodes
hosts = {}
my_location = @node['location'] ? @node['location']['name'] : nil
nodes.each_node do |node|
hosts[node.name] = {'ip_address' => node.ip_address, 'domain_internal' => node.domain.internal, 'domain_full' => node.domain.full}
node_location = node['location'] ? node['location']['name'] : nil
if my_location == node_location
if facts = @node.manager.facts[node.name]
if facts['ec2_public_ipv4']
hosts[node.name]['ip_address'] = facts['ec2_public_ipv4']
end
end
end
host_pub_key = Util::read_file([:node_ssh_pub_key,node.name])
if host_pub_key
hosts[node.name]['host_pub_key'] = host_pub_key
end
end
hosts
end
end
end
|