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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/beaker-task_helper/inventory.rb', line 25
def hosts_to_inventory
groups = []
def add_node(node, group_name, groups)
if group_name =~ %r{\A[a-z0-9_]+\Z}
group = groups.find { |g| g['name'] == group_name }
unless group
group = { 'name' => group_name, target_key => [] }
groups << group
end
group[target_key] << node
else
puts "invalid group name #{group_name} skipping"
end
end
nodes = hosts.map do |host|
node_name = host[:ip] ? "#{host[:ip]}?n=#{host.hostname}" : host.hostname
if host[:platform] =~ %r{windows}
config = { 'transport' => 'winrm',
'winrm' => { 'ssl' => false,
'user' => host[:user],
'password' => ENV['BEAKER_password'] } }
else
config = { 'transport' => 'ssh',
'ssh' => { 'host-key-check' => false } }
%i[password user].each do |k|
config['ssh'][k.to_s] = host[:ssh][k] if host[:ssh][k]
end
if host[:ssh][:port]
config['ssh']['port'] = host[:ssh][:port].to_i
end
case host[:hypervisor]
when 'docker'
nil
when 'vagrant'
key = nil
keys = host.connection.instance_variable_get(:@ssh).options[:keys]
key = keys.first if keys
config['ssh']['private-key'] = key if key
when 'vmpooler', 'abs'
key = nil
keys = host[:ssh][:keys]
key = keys.first if keys
config['ssh']['private-key'] = key if key
else
raise "Can't generate inventory for platform #{host[:platform]} hypervisor #{host[:hypervisor]}"
end
end
host[:roles].each do |role|
add_node(node_name, role, groups)
end
{
uri_key => node_name,
'config' => config
}
end
inv = { target_key => nodes,
'groups' => groups,
'config' => {
'ssh' => {
'host-key-check' => false
}
} }
inv.merge!({'version' => 2}) if inventory_version == 2
inv
end
|