configuration syntax, backwards compatibility

Andreas Ericsson ae at op5.se
Fri May 28 14:55:11 CEST 2004


Hi all.
I was thinking about the way contacts are propagated through the service 
and host objects in nagios 2.0, and I found some room for improvement.

I'd like to be able to define contacts on a multitude of levels, 
starting with hostgroups and working their way down through 
service_groups and finally to services. (this also makes configuration 
backwards compatible, which is always a Good Thing).
Here's how I thought it.

A general syntax should be agreed upon to define exactly or add or 
subtract reference pointers to other objects.
To _add_ a reference, one would prefix the reference name with a '&'.
To _remove_ a reference, one would prefix the reference with a '!', and 
to specify exactly, one would use no prefix at all (like we override 
things inherited from templates today).
To specify a group, one could prefix with a '@' (this way configuration 
file token support can be kept small).

Not all references would have to support this, but it might be easier to 
include it on a general basis.

For example, we have hosts 'server1' and 'server2' which are in 
hostgroup 'server-group', looking something like this;

define hostgroup {
hostgroup_name server-group
alias          some servers
members        server1,server2
contacts       @server_contacts,server_admin,!@support_contacts
}
# all contacts in server_contacts and the contact server_admin
# remove the contacts in contactgroup support_contacts

define host {
host_name server1
alias     alias for server1
address   10.1.1.2
contacts  !the_boss,&@quake_contacts
}
# the company quake-server, so don't let the boss know
# it's being loaded too high all the time.

define host{
host_name server2
alias     alias for server2
address   10.1.1.3
contacts  &xerox_workers
}
# print-server, so store emails where support staff can find them

....
(I don't know enough about servicegroups yet to give an example of how 
it would work)
...
# this looks silly with only 2 hosts, but you get the idea
define service{
use                   default-service
host                  @server-group,!server1
service_description   Webpage integrity
check_command         check_http
contacts              @security_contacts, at web_contacts
}
# override host and hostgroup contacts completely for this service

define service{
use                   default-service
host                  @server-group
service_description   Mailserver
check_command         check_nrpe!mailq
contacts              !@quaker_group
}
# inherit contacts from server-group AND server{1,2}, respectively.
# but don't send to @quaker_group


I'd be willing to implement it, but I won't be able to work all too fast.

One of the major benefits of this is that it makes it really easy to 
write a webconfiguration interface for it (solid object variable 
dependancies). I have done some work in that area, and I'd be willing to 
release it to the public if I can make it work properly on Nagios 2.0. 
Today, that requires some hacking. It also includes very nice (and 
extremely fast) functions to read and parse the configuration files, 
making it easy to extend it to replace the C-version of the GUI.

Also, would I wreak havoc on everything if I removed the need for the 
'define' word from the beginning of every object statement?

-- 
Andreas Ericsson
OP5 AB
+46 (0)733 709032
andreas.ericsson at op5.se


-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click




More information about the Developers mailing list