retire da-backup checks
[mirror/dsa-nagios.git] / config / build-nagios
index 2b9fba1..49b981e 100755 (executable)
@@ -31,7 +31,7 @@ SHORTORG="dsa"
 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"
@@ -131,9 +131,7 @@ $nrpe = Nrpe.new()
 def print_block(fd, kind, hash, exclude_keys)
        fd.puts "define #{kind} {"
        hash.keys.sort.each{ |key|
-               next if key == '_extinfo'
-               next if key == '_hostgroups'
-               next if key == '_memberlist'
+               next if key[0,1] == '_'
                next if exclude_keys.include? key
                fd.puts "       #{key}          #{hash[key]}"
        }
@@ -147,7 +145,7 @@ def merge_contacts(host, service)
                [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
 
@@ -176,9 +174,13 @@ def addService(hosts, service, files, servers)
                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']
@@ -207,11 +209,6 @@ def addService(hosts, service, files, servers)
                }
        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
@@ -250,19 +247,6 @@ def find_hosts(service, servers, 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
-
-
 #############################################################################################
 #############################################################################################
 #############################################################################################
@@ -289,7 +273,6 @@ config['hostgroups']['pingable']['private'] = true
 
 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'] = []
 }
@@ -297,8 +280,6 @@ config['hostgroups'].each_pair{ |name, hg|
 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'
@@ -315,7 +296,8 @@ config['servicegroups'] = {} unless config.has_key? 'servicegroups'
 ##############
 # 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')
@@ -329,28 +311,7 @@ config['servers'].each_pair{ |name, server|
        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)
 }
 
 
@@ -358,12 +319,14 @@ config['servers'].each_pair{ |name, server|
 ##############
 # 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()
 }
@@ -375,8 +338,8 @@ config['hostgroups'].each_pair{ |name, hg|
 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
@@ -447,7 +410,9 @@ config['services'].each{ |service|
 ##############
 # 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()
@@ -457,7 +422,8 @@ config['servicegroups'].each_pair{ |name, sg|
 ##############
 # 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 }"
 }