nanog mailing list archives

Re: using expect to log into devices


From: "Scott Weeks" <surfer () mauigateway com>
Date: Sat, 21 Jul 2018 13:37:47 -0700


--- ler762 () gmail com wrote:
From: Lee <ler762 () gmail com>

I have a file with 1000s of devices and another file
with a list of commands.  The program issues all
commands for a device and then moves on to the next
one using nested loops.  In the debug I see the
"spawn_id expNN" (where NN is a number that, I
believe is representative of the number of file
descriptors used in the system) increment only when
a device does not respond.  As long as a device
responds before the timeout period I see the expNN
number does not increase.  As soon as a device
doesn't respond the expNN count goes up and I can't
figure out why.  Once I hit a certain expNN the
<snip>

:: 'close $spawn_id' is wrong, so maybe that's it?

:: man expect
:: close [-slave] [-onexec 0|1] [-i spawn_id]
:: closes  the  connection to the current process.  
:: ...  The -i
:: flag declares the
:: process to close corresponding to the named 
:: spawn_id.
   <.. snip ..>
----------------------------------------

I hand typed the close stuff in the email with just
'close spawn_id'.  I did the -i in previous 
iterations, but saw no difference.  Maybe I should 
try more.  I saw the 'close' alone a lot on 
Stackexchange a lot,so I was copying those in this 
iteration.  I also should have read the man page 
more than I did, so a face slap to myself.


:: No  matter  whether  the connection is closed 
:: implicitly or explicitly, you should call wait to 
:: clear up the corresponding kernel process slot.  
:: close does not call wait since there is no guarantee 
:: that closing a process connection will cause it to 
:: exit.  See wait below for more info.

:: The eof and timeout cases are basically
::  { catch {close}; catch {wait}; }

I always used wait after close and need to look into 
those above.  Maybe they close it different somehow.


:: get rancid from here... and take a look at clogin...

I'm going to be looking for a new job and want to up my 
skills, in case I get a chance to do the SDN/NFV stuff, 
which I read requires coding skills, so this is also an 
exercise toward that.  Plus it's fun.

I had already done this in PERL, but, even though we 
have PERL, we are not allowed to download modules here.  
So, I'm redoing it in Expect.  I thought someone would
say a "oh just <blah, blah> and you're done" type of 
response.

Thanks a lot from everyone private and on the list.
I'll post for the archives if I find the answer.

scott


Current thread: