When using m4 to configure Nagios, great advantages can be realized. One of the easiest places to gain an advantage by using m4 is when defining a new host.
Typically, a new host not only has a host definition but a number of fairly standardized services – such as ping, FTP, telnet, SSH, and so forth. Thus, when defining a new host configuration, you not only have to add a new host, but all of the relevant services as well – and may also include host extra info and service extra info also.
#---------------------------------------- # HOST: marco #---------------------------------------- define host{ use hpux-host ; Name of host template host_name marco address 192.168.4.1 } define hostextinfo{ host_name marco action_url http://marco-mp/ } define service{ use passive-service ; Name of servi host_name marco service_description System Load servicegroups Load } define service{ use hpux-service ; Name of service host_name marco service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use hpux-service ; Name of service host_name marco service_description TELNET servicegroups TELNET check_command check_telnet } define serviceextinfo{ host_name marco service_description TELNET action_url telnet://marco } define service{ use hpux-service ; Name of service host_name marco service_description FTP servicegroups FTP check_command check_ftp } define service{ use hpux-service ; Name of service host_name marco service_description NTP servicegroups NTP check_command check_ntp } define service{ use hpux-service ; Name of service host_name marco service_description SSH servicegroups SSH check_command check_ssh }
Compare that output from the m4 code that generated it:
DEFHPUX(`marco',`192.168.4.1')
Another benefit is that if DEFHPUX is coded correctly (with each service independent – such as an m4 macro DOSSH for SSH) – then a single change to the m4 file, propogated to the Nagios config file, can alter a service for every HP-UX host (in this example).
Here is a possible definition of DEFHPUX:
define(`DEFHPUX',` #---------------------------------------- # HOST: $1 #---------------------------------------- define host{ use hpux-host ; Name of host template host_name $1 address $2 } define hostextinfo{ host_name $1 action_url http://$1-mp/ }' DOLOAD(`$1') DOPING(`$1') DOTELNET(`$1') DOFTP(`$1') DONTP(`$1') DOSSH(`$1')
There is a lot more that m4 can do; this is just the tip of the iceberg.
Powered by ScribeFire.
Sweet! Never really looked at m4, very old-school Unix. Thanks for posting this tip.