I'd like to add some custom Junos commands in rancid.types.conf such as:

wpi-juniper;command;junos::ShowChassisHardware;show lldp neighbors | match 
"^Local | ae[0-9]+ "
wpi-juniper;command;junos::ShowChassisHardware;show system commit | except 
^rescue | trim 4 | except "by apipush via"

These are rather WPI-specific, filtering output based on local conventions, so 
they are not suitable for distribution with upstream
RANCID (although the "show system commit | except ^rescue | trim 4" part could 
be worthy of upstream inclusion--it shows the commit messages people gave when 
they changed the config--but the rollback numbers rotate and need to be trimmed 
out, hence the "| trim 4" part).  By doing filtering in the Junos CLI, it 
allows local customizations without the need to write a new RANCID module to 
filter the output.  This works fine except for the " double quote characters, 
which mess up when passed to system() and open() calls.  The attached patch 
escapes these double quotes before passing the command to the system() or 
open().  The \" escaping cannot be done in rancid.types.conf because it will 
cause problems with the command name not matching the CLI output.
--- rancid.orig 2019-02-06 02:03:28.000000000 -0500
+++ rancid      2019-02-13 13:32:04.103689467 -0500
@@ -116,12 +116,14 @@
     print(STDERR "opening file $host\n") if ($debug || $log);
     open(INPUT,"<$host") || die "open failed for $host: $!\n";
 } else {
-    print(STDERR "executing $lscript -t $timeo -c\"$commandstr\" $host\n") if 
($debug || $log);
+    my $cstr = $commandstr;
+    $cstr =~ s/\"/\\\"/g;
+    print(STDERR "executing $lscript -t $timeo -c\"$cstr\" $host\n") if 
($debug || $log);
     if (defined($ENV{NOPIPE}) && $ENV{NOPIPE} =~ /^YES/i) {
-       system "$lscript -t $timeo -c \"$commandstr\" $host </dev/null > 
$host.raw 2>&1" || die "clogin failed for $host: $!\n";
+       system "$lscript -t $timeo -c \"$cstr\" $host </dev/null > $host.raw 
2>&1" || die "clogin failed for $host: $!\n";
        open(INPUT, "< $host.raw") || die "clogin failed for $host: $!\n";
     } else {
-       open(INPUT,"$lscript -t $timeo -c \"$commandstr\" $host </dev/null |") 
|| die "clogin failed for $host: $!\n";
+       open(INPUT,"$lscript -t $timeo -c \"$cstr\" $host </dev/null |") || die 
"clogin failed for $host: $!\n";
     }
 }
 
_______________________________________________
Rancid-discuss mailing list
Rancid-discuss@shrubbery.net
http://www.shrubbery.net/mailman/listinfo/rancid-discuss

Reply via email to