GENERATED_PREFIX="./generated/"
nagios_filename = {};
-%w(hosts hostgroups services dependencies hostextinfo serviceextinfo servicegroups).each{
+%w(hosts hostgroups services dependencies servicegroups).each{
|x| nagios_filename[x] = GENERATED_PREFIX+"auto-#{x}.cfg"
}
nagios_filename['nrpe'] = GENERATED_PREFIX+"nrpe_#{ ORG }.cfg"
# and also skips private keys (those starting with an underscore)
def print_block(fd, kind, hash, exclude_keys)
fd.puts "define #{kind} {"
- hash.each_pair{ |key, value|
- next if key == '_extinfo'
- next if key == '_hostgroups'
- next if key == '_memberlist'
+ hash.keys.sort.each{ |key|
+ next if key[0,1] == '_'
next if exclude_keys.include? key
- fd.puts " #{key} #{value}"
+ fd.puts " #{key} #{hash[key]}"
}
fd.puts "}"
fd.puts
[host, service].each{ |source|
contacts.push source[k] if source.has_key?(k)
}
- service[k] = contacts.join(",") unless contacts.empty?
+ service[k] = contacts.sort.join(",") unless contacts.empty?
}
end
set_complain_if_set s, 'host_name', host, 'Service', s['service_description']
merge_contacts(servers[host], s)
- print_block files['services'], 'service', s, %w(nrpe runfrom remotecheck
- depends
- hosts hostgroups excludehosts excludehostgroups)
+ exclude_keys = %w(nrpe runfrom remotecheck
+ depends
+ hosts hostgroups excludehosts excludehostgroups)
+ if servers[host]['no-servicegroups']
+ exclude_keys << 'servicegroups'
+ end
+ print_block files['services'], 'service', s, exclude_keys
}
if service['depends']
- service['depends'].each{ |prerequisite|
+ service['depends'].sort.each{ |prerequisite|
hosts.sort.each{ |host|
prerequisite_host = host
pre = prerequisite
}
end
-
- set_complain_if_set service['_extinfo'], 'service_description' , service['service_description'], 'serviceextinfo', service['service_description']
- set_complain_if_set service['_extinfo'], 'host_name' , hosts.join(',') , 'serviceextinfo', service['service_description']
-
- print_block files['serviceextinfo'], 'serviceextinfo', service['_extinfo'], %w()
end
# hostlists in services can be given as both, single hosts and hostgroups
return hosts
end
-# Move all elements that have a key that starts with "extinfo-"
-# into the _extinfo subhash
-def split_away_extinfo(hash)
- hash['_extinfo'] = {}
- hash.keys.each{ |key|
- if key[0, 8] == 'extinfo-'
- hash['_extinfo'][ key[8, key.length-8] ] = hash[key]
- hash.delete(key);
- end
- }
-end
-
-
#############################################################################################
#############################################################################################
#############################################################################################
config['hostgroups'].each_pair{ |name, hg|
throw "Empty hostgroup or hostgroup #{name} not a hash" unless hg.kind_of?(Hash)
- split_away_extinfo hg
hg['_memberlist'] = []
}
config['servers'].each_pair{ |name, server|
throw "Empty server or server #{name} not a hash" unless server.kind_of?(Hash)
- split_away_extinfo server
-
throw "No hostgroups defined for #{name}" unless server['hostgroups']
server['_hostgroups'] = server['hostgroups'].split(/,/).map{ |x| x.strip };
server['_hostgroups'] << 'all'
##############
# HOSTS
##############
-config['servers'].each_pair{ |name, server|
+config['servers'].keys.sort.each{ |name|
+ server = config['servers'][name]
# Formerly we used 'ip' instead of 'address' in our source file
# Handle this change but warn XXX
if server.has_key?('ip')
set_if_unset server, 'use' , HOST_TEMPLATE_NAME
set_if_unset server, 'check_command', HOST_ALIVE_CHECK unless server['pingable'] == false
- print_block files['hosts'] , 'host' , server , %w(hostgroups pingable)
-
-
-
- # Handle hostextinfo
- #config['hostgroups'][ server['_hostgroups'].first ]['_extinfo'].each_pair{ |k, v|
- # find the first hostgroup that has extinfo
- extinfo = server['_hostgroups'].collect{ |hgname | config['hostgroups'][hgname]['_extinfo'] }.delete_if{ |ei| ei.size == 0 }.first
- if extinfo then
- extinfo.each_pair do |k, v|
- # substitute hostname into the notes_url
- v = sprintf(v,name) if k == 'notes_url'
-
- set_if_unset server['_extinfo'], k ,v
- end
- end
-
- set_complain_if_set server['_extinfo'], 'host_name' , name, 'hostextinfo', name
- set_if_unset server['_extinfo'], 'vrml_image' , server['_extinfo']['icon_image'] if server['_extinfo'].has_key?('icon_image')
- set_if_unset server['_extinfo'], 'statusmap_image' , server['_extinfo']['icon_image'] if server['_extinfo'].has_key?('icon_image')
-
- print_block files['hostextinfo'], 'hostextinfo', server['_extinfo'], %w()
+ print_block files['hosts'] , 'host' , server , %w(hostgroups pingable no-servicegroups)
}
##############
# HOSTGROUPS
##############
-config['hostgroups'].each_pair{ |name, hg|
+config['hostgroups'].keys.sort.each{ |name|
+ hg = config['hostgroups'][name]
+
next if hg['private']
throw "Empty hostgroup #{name}" if hg['_memberlist'].length == 0
- set_complain_if_set hg, 'hostgroup_name', name , 'Hostgroup', name
- set_complain_if_set hg, 'members' , hg['_memberlist'].join(","), 'Hostgroup', name
+ set_complain_if_set hg, 'hostgroup_name', name , 'Hostgroup', name
+ set_complain_if_set hg, 'members' , hg['_memberlist'].sort.join(","), 'Hostgroup', name
print_block files['hostgroups'], 'hostgroup', hg, %w()
}
config['services'].each{ |service|
throw "Empty service or service not a hash" unless service.kind_of?(Hash)
- split_away_extinfo service
-
+ # make sure the depends list is an array
+ service['depends'] = ensure_array( service['depends'] )
# Both 'name' and 'service_description' are valid for a service's name
# Internally we only use service_description as that's nagios' official term
##############
# SERVICEGROUPS
##############
-config['servicegroups'].each_pair{ |name, sg|
+config['servicegroups'].keys.sort.each{ |name|
+ sg = config['servicegroups'][name]
+
set_complain_if_set sg, 'servicegroup_name', name , 'Servicegroup', name
print_block files['servicegroups'], 'servicegroup', sg, %w()
##############
# NRPE config file
##############
-$nrpe.checks.each_pair{ |name, check|
+$nrpe.checks.keys.sort.each{ |name|
+ check = $nrpe.checks[name]
files['nrpe'].puts "command[#{ name }]=#{ check }"
}