[rancid] Re: francid on MLX and edge case behaviors.

Jethro R Binks jethro.binks at strath.ac.uk
Thu Feb 26 09:17:47 UTC 2009


On Wed, 25 Feb 2009, Nick Buraglio wrote:

> This began on the f-nsp list here: 
> http://www.mail-archive.com/foundry-nsp@puck.nether.net/msg01603.html 
> Anyway, I was having trouble getting flogin to work against MLX code 
> 3.9.00a over ssh.  Long story short, the user I had set up had lower 
> privilege and couldn't support the "skip-page-display" command that 
> francid was expecting.  Since I have more experience with pretty much 
> every network vendor other than foundry, I thought this may just be what 
> I like to call a "foundry-ism".  Anyway, I solved this (possibly not the 
> best way) by just changing flogin to call "terminal length 0"  since the 
> MLX code supports it and there are no foundries managed by this instance 
> of rancid that don't.

Sorry I meant to respond to your message on f-nsp :)

Anyway, I can confirm that "terminal length 0" also works on at least the 
BigIrons and Super-X related models, although they also support 
"skip-page-display" anyway (I do not have any MLX).  It may be suitable to 
just send both commands and hope one works.

However, I would add the following note, which may or may not be relevant 
to your environment.  I use a special user for the rancid stuff, which is 
priv level 5:

  username rouser privilege 5 password .....

In order for skip-page-display to work, I need to change specify that I 
can run the command at this (lower) priv level:

  privilege exec level 5 skip-page-display

It turns out if I wanted to use "terminal length 0" I would also need:

  privilege exec level 5 terminal

(I do similar things for a Cisco ASA too).

Working out the variants in command lines on different models or code revs 
even for the same vendor is the most difficult area, and even the most 
innocuous change can break things for someone else ('expect' is pretty 
fragile anyway *cough* Net::Appliance::Session (maybe) *cough*).  Once 
you've actually bagged a copy of the config though, by whatever means, the 
rest of rancid works great!

One potential improvement to make rancid more flexible might be to 
abstract some of these model/code-specific aspects, so that the 
appropriate command to "turn off paging" (if there is one) is determined 
in advance based on the vendor/model/version (with a default otherwise), 
then just the correct one sent.  Then tweaking for other models is a 
matter of modifying the "commands to send" table, and the bulk of the code 
can remain the same, untouched, and hopefully not broken.  There are 
already some tests modifying behaviour based on platform ("if { [ string 
compare "extreme" "$platform" ] }").  However, having said all that, it 
may well not simplify the bulk of the code enough to make the effort 
worthwhile ... (*cough* Net::Appliance::Session again (maybe) *cough*).

A niggle I have is that clogin has been copied to a multitude of other 
*login modules for different vendors, some of which aren't really that 
different, and which don't all necessarily get useful changes made to 
clogin merged back into them.  Some work to reduce this duplication would 
also be beneficial.  I have vaguely looked at the potential for this from 
time to time, but not with any real committment so far.

(Aside: These texts are from Net::Appliance::Session and related modules 
(which has a number of other dependencies like YAML):

"Various models of network device, either from one vendor such as Cisco or 
between vendors, will naturally use alternate command and command prompt 
syntax. Net::Appliance::Session does not hard-code any of these commands 
or pattern matches in its source. They are all loaded at run-time from an 
external phrasebook (a.k.a. dictionary), which you may of course 
override."

"In the world of network appliances, vendors will sometimes change the 
commands used in or even the appearance of the command line interface. 
This might happen between software version releases, or as a new product 
line is released.  However, typically there is an ancestry to all these 
interfaces, so we can base a new product's dictionary on an existing 
dictionary whilst overriding some entries with new values."

I wonder if, by using w(rap)rancid, it would be possible to investigate 
the use of Net::Appliance::Session, without having to touch rancid itself 
...

Jethro.

-- 
.  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
Jethro R Binks
Computing Officer, IT Services, University Of Strathclyde, Glasgow, UK


More information about the Rancid-discuss mailing list