The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME - library for parsing/modifying/generating Nagios configuration.


Before you will be able to use any functions from this module, you have to give it a config file.

It is better to place config in /usr/local/etc/ or make a lymlink.

All directories should be present and ym must have access and write permissions.

Sample config file looks like in example:

    package Ym;
    $YMHOME = '/home/monitor/work/ym';
    # Place to keep serialized Nagios configs.
    # This is needed for running multiple ym commands before
    # building new configuration files.
    $STRUCT_FILE = "$YMHOME/store/config.struct";
    # Specify user and group. Ym will act and use their permissions.
    # This feature will come later.
    # $YM_USER  = 'monitor';
    # $YM_GROUP = 'monitor';
    # Tell ym where you keep Nagios configs.
    $NAGIOS_CFG_DIR = '/home/monitor/NAGIOS/etc';
    $NAGIOS_CFG_NAME = 'nagios.cfg';
    # Place to build test configuration when 'verify-cfg' command is called.
    $WORKPLACE = "$YMHOME/tmp/etc";
    $HOSTNAME = `hostname -f`;
    $VERBOSE = 0;
    $DEBUG   = 0;
    # Run ym with a '--diff' option by default.
    # Backup *.cfg files from NAGIOS_CFG_DIR defore generating 
    # new configs when 'make-cfg' is called.
    $BACKUP_PATH = '/var/backups/ym/nagios_cfg_backup';

    # Turn this option on if you want to add part to Ym.
    # This will call Ym::GenerateSpecific($tree, $Ym::HOSTNAME)
    # where you can put code for building host specific configuraion.


Type 'ym --help' and see all available console commands.

Now describe usage of different subroutines.

  use Ym;

  # STRUCT_FILE and NAGIOS_MAIN_CFG should be defined in
  # Will parse Nagios configs or use serialized cache if any.
  my $tree = Ym::GetStruct($Ym::STRUCT_FILE, $Ym::NAGIOS_MAIN_CFG);

  # Add a new command
  Ym::AddCommand($tree, ['new_command'], {'command_line' => 'check_ping'});

  # Add new hosts
  Ym::AddHost($tree, ['host1', 'host2', 'READ_FILE=/tmp/hostlist'], 
      'use' => 'default-host',
      'contact_groups' => 'new_user_group',
      'check_command' => 'new_command',

  # Add new hostgroup
  Ym::AddHostgroup($tree, ['hostgroup1'], {'members' => 'host1,host2'});

  # Add new service
  Ym::AddService($tree, ['raid'], ['host1'], [], 
      'use' => 'passive-service',
      'contact_groups' => 'some-admins',
      'max_check_attempts' => 1,

  # or add services to hostgroup.
  Ym::AddService($tree, ['raid'], [], ['hostgroup1'], {'use' => 'raid-service'});

Almost the same usage for DeleteCommand, DeleteHost, DeleteHostgroup, DeleteService and

ModifyCommand, ModifyHost, ModifyHostgroup, ModifyService subroutines.

Save all changes in serialized file ($STRUCT_FILE variable must be defined in

  Ym::SaveStruct($tree, $Ym::STRUCT_FILE);

Generate new config in specified dir.

  Ym::GenerateCfg($tree, $dest_dir);


Andrey Grunau, <>


Copyright (C) 2010 by Andrey Grunau

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.