#!/usr/bin/perl

use strict;
use warnings;
use Cisco::CopyConfig ();

#####################################################

# ip адрес tftp-сервера на который заливаются конфиги
# на этой же машине и должен запускаться скрипт
my $tftp_host = '192.168.1.1';

# директория на tftp-сервере куда кладутся конфиги
my $dir = 'config';

# директория где лежат RCS-файлы
my $home = '/home/netmgr/ciscocong';

# snmp RW community для кошек
my %community = (
        '192.168.2.1' => 'E9bJFckD',
        '192.168.2.2' => 'J0uSsO6Yt'
        );

# имена хостов для кошек, на основе этого именуются файлы
my %hosts = (
	'192.168.2.1' => 'router1',
	'192.168.2.2' => 'router2'
	);

# e-mail на который будут высылаться изменения
my $to = 'noc@localhost';

my $path = '/usr/bin';

#####################################################

my $message = "";

foreach my $ip (keys %community ){
  my $config     = Cisco::CopyConfig->new (
    Host => $ip,
    Comm => $community{$ip}
  );

  my $name = $hosts{$ip};

  # если конфигурационного файла в tftproot еще нет, то создаем его
  if ( ! -r "/var/tftproot/$dir/$name" ) {
    system "$path/touch /var/tftproot/$dir/$name";
  }

  # даем команду скопироать конфиг с циски по tftp
  warn "Error while copy conf from $ip to tftp://$tftp_host/$dir/$name: $config->{err}\n" 
		unless $config->copy($tftp_host, "$dir/$name");

  # Создаем и нициализируем  RCS файл, если его еще нет
  if ( ! -r "$home/$name,v" ) {
    system "$path/rcs -q -t-$name -i $home/$name,v /var/tftproot/$dir/$name";
  }

  # удаляем из кофига ntp clock-period, потому что это значение часто меняется
  system "$path/fgrep -v 'ntp clock-period' /var/tftproot/$dir/$name > $home/$name";

  # RCS diff
  my $msg = `$path/rcsdiff -qu $home/$name`;
  if ($msg ne '') {
    $message .= "===  $name =============================================================\n";
    $message .= "$msg\n\n";
  }
  # store config in RCS
  system "$path/ci -q -m'-' -l $home/$name";
}

# Отправляем изменения по почте
my $now = localtime;

open (MAIL, "| $path/mail -E -s \"cisco config diff ($now)\" $to") || die "$!\n"; 
print MAIL $message;
close MAIL;

