Hello!<div><br></div><div>Rancid is great, but there are some situations, when some hosts make too much noise and we can&#39;t do anything with that. For example, some Cisco device update their flash too frequent, or some scripts make changes to some ACLs several times a hour. It&#39;s too annoying to receive that changes every hour, even if that information has no value. The solution could be simple: just avoid some commands or replace them. I&#39;ve decided to make a patch for that.</div>
<div><br></div><div>First, we should add some parameters in rancid.conf file:</div><div><div>HOST_REPLACE_CMD=&quot;&quot;; export HOST_REPLACE_CMD</div><div>HOST_REPLACE_CMD=&quot;$HOST_REPLACE_CMD 10.1.1.1, &#39;show flash&#39;, &#39;show flash | exclude bootflash&#39;,&quot;; export HOST_REPLACE_CMD</div>
<div>HOST_REPLACE_CMD=&quot;$HOST_REPLACE_CMD 10.2.2.2, &#39;show flash&#39;, &#39;show flash | exclude bootflash&#39;,&quot;; export HOST_REPLACE_CMD</div><div>HOST_REPLACE_CMD=&quot;$HOST_REPLACE_CMD 10.3.3.3, &#39;more system:running-config&#39;, &#39;more system:running-config | section exclude standard ist$&#39;,&quot;; export HOST_REPLACE_CMD</div>
</div><div><br></div><div>That parameters are telling script to replace &#39;show flash&#39; command for hosts 10.1.1.1 and 10.2.2.2 with &#39;show flash | exclude bootflash&#39; to scrub bootflash info completely, and replace &#39;more system:running-config&#39; for host 10.3.3.3 with &#39;more system:running-config | section exclude standard ist$&#39; to exclude standard access-list with name ist from the resulting file. You should use that replacements with <span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><i style="font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-style: normal; display: inline !important; ">certainty that you will not lose some valuable information.</i></span></div>
<div><span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><i style="font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-style: normal; display: inline !important; "><br>
</i></span></div><div><span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><i style="font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-style: normal; display: inline !important; ">Number of replacements is not limited, just be sure not to skip a comma after last quote in each line (do not place comma after a double quote!).</i></span></div>
<div><span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><i style="font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-style: normal; display: inline !important; "><br>
</i></span></div><div><span class="Apple-style-span" style="font-family: Arial, sans-serif; font-size: 13px; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><i style="font-size: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-style: normal; display: inline !important; ">Next, we should apply a patch to rancid file with the name, ahem, &#39;rancid&#39;:</i></span></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">patch</span></font><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span></div>
<div><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><br></span></div><div><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; display: inline !important; "><div>
<font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">--- rancid.orig<span class="Apple-tab-span" style="white-space: pre; ">        </span>2010-08-05 11:17:24.000000000 +0600</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+++ rancid<span class="Apple-tab-span" style="white-space:pre">        </span>2010-09-20 12:50:18.000000000 +0600</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">@@ -1929,6 +1929,22 @@</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"> <span class="Apple-tab-span" style="white-space:pre">        </span>{&#39;show running-config&#39;<span class="Apple-tab-span" style="white-space:pre">                </span>=&gt; &#39;WriteTerm&#39;},</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"> <span class="Apple-tab-span" style="white-space:pre">        </span>{&#39;write term&#39;<span class="Apple-tab-span" style="white-space:pre">                        </span>=&gt; &#39;WriteTerm&#39;},</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"> );</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+# Replace commands if host matches</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+$host_replace_cmd = $ENV{HOST_REPLACE_CMD};</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+@commandreplace = ();</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+push(@commandreplace, $+) while $host_replace_cmd =~ m{&#39;(.*?)&#39;|(\S+),\s*}g;</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+$cr_length = $#commandreplace;</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+for($i = 0; $i &lt;= $cr_length; $i = $i + 3) {</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">        </span>my $cr_host = $commandreplace[$i];</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">        </span>if ($host eq $cr_host) {</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                </span>my $cr_cmdsearch = $commandreplace[$i + 1];</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                </span>my $cr_cmdreplace = $commandreplace[$i + 2];</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                </span>my ($index) = grep { defined $commandtable[$_]{$cr_cmdsearch} } 0..$#commandtable;</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                </span>my $cr_function = $commandtable[$index]{$cr_cmdsearch};</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">                </span>splice(@commandtable, $index, 1, {$cr_cmdreplace =&gt; $cr_function});</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+<span class="Apple-tab-span" style="white-space:pre">        </span>}</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+}</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;">+</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"> # Use an array to preserve the order of the commands and a hash for mapping</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"> # commands to the subroutine and track commands that have been completed.</span></font></div>
<div><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"> @commands = map(keys(%$_), @commandtable);</span></font></div>
<div style="border-collapse: collapse; font-family: Arial, sans-serif; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-style: italic; "><br></div><div style="border-collapse: collapse; font-family: Arial, sans-serif; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-style: italic; ">
<span class="Apple-style-span" style="border-collapse: separate; font-family: arial; font-style: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: small; "><font class="Apple-style-span" face="Arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span></font><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">patch</span></span></div>
<div style="border-collapse: collapse; font-family: Arial, sans-serif; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-style: italic; "><span class="Apple-style-span" style="border-collapse: separate; font-family: arial; font-style: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: small; "><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><br>
</span></span></div><div style="border-collapse: collapse; font-family: Arial, sans-serif; font-size: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-style: italic; "><span class="Apple-style-span" style="border-collapse: separate; font-family: arial; font-style: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: small; "><span class="Apple-style-span" style="font-family: Arial, sans-serif; border-collapse: collapse; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">Check that everything&#39;s working fine by running &quot;rancid -d hostname&quot; and checking it&#39;s output. I would be glad if this patch or some similar logic will be in the next release of rancid.</span></span></div>
</span></div>