[rancid] hostname glob - regex?
Per-Olof Olsson
peo at chalmers.se
Sun Feb 23 10:04:47 UTC 2014
heasley wrote 2014-02-10 18:30:
> Mon, Feb 10, 2014 at 12:01:34AM +0100, Pawe?? Rzepa:
>> W dniu 06.02.2014 08:44, Pawel Rzepa pisze:
>>
>> Hi,
>> Any help? I've digged into this a little and found that .cloginrc is
>> interpreted by expect. I'm not very familiar with expect, tried some
>> regexps with braces, escaped braces etc and no success. Is it impossible
>> to use regexp in this context?
>
> no; if it were, the manpage would have read regex, not glob. regex would
> be useful; though i'm not sure how to implement it, since glob and regex
> are not complatible. perhaps a global knob in cloginrc that switches the
> format to regex? or an regex-specific version of the 'add' function and
> search regexes before globs?
>
> Per Olaf, ideas?
>
Just replace "string match" with "regexp" will make a big format change in cloginrc.
Think it's just to look for $ ( ) ^ | + or "\." ("([$)(^|+]|\\\.)+" in regexp)
to determining if it is regexp or not. Possible it will give some false match
and cloginrc need to be written more strict.
...
>>> add user {192.168.1.*|192.168.2.5|*-core-*} {user1}
>>> add password {192.168.1.*|192.168.2.5|*-core-*} {pass1}
>>>
>>> add user {10.1.2.3|10.1.5.*} {user2}
...
Just not that simple when you say regexp.
add user {^(192\.168\.1\..*|192\.168\.2\.5|.*-core-.*)$} {user1}
".*" for numbers? Why not "[0-9]+".
add user {^(192\.168\.1\.[0-9]+|192\.168\.2\.5|.*-core-.*)$} {user1}
Is this a possible way?
cloginrc in my test.
------cloginrc---------------------------------
add password {sw1.aaa.domain.se} x x
add method {10\.10\.1\.1|10\.10\.3\.[0-9]+|sw1\.aaa\.domain\.se} ssh
add password {10\.10\.1\.1|10\.10\.4\.[0-9]+} x x
add identity {^(10\.10\.1\.1|10\.10\.3\.[0-9]+|sw1\.aaa\.domain\.se)$} /home/rancid/.ssh/ssh_key
add autoenable {10\.10\.1\.1|10\.10\.3\.[0-9]+|sw1\.aaa\.domain\.se} 1
add password * y y
-----------------------------------------------
$ ./hlogin +debug_rc +debug_rc -c "show term" -f cloginrc -banner 10.10.3.74
10.10.3.74
Match regexp: 10.10.3.74 autoenable {10\.10\.1\.1|10\.10\.3\.[0-9]+|sw1\.aaa\.domain\.se} 1
No match : 10.10.3.74 password sw1.aaa.domain.se x x
No match : 10.10.3.74 password {10\.10\.1\.1|10\.10\.4\.[0-9]+} x x
Match : 10.10.3.74 password * y y
Match regexp: 10.10.3.74 identity {^(10\.10\.1\.1|10\.10\.3\.[0-9]+|sw1\.aaa\.domain\.se)$} /home/rancid/.ssh/ssh_key
Match regexp: 10.10.3.74 method {10\.10\.1\.1|10\.10\.3\.[0-9]+|sw1\.aaa\.domain\.se} ssh
spawn hpuifilter -- ssh -i /home/rancid/.ssh/ssh_key -c 3des -x -l rancid 10.10.3.74
switch.aaa.domain.s# no page
switch.aaa.domain.s# show term
Terminal width: 132 length: 24
switch.aaa.domain.s#logout
Do you want to log out [y/n]? y
Connection to 10.10.3.74 closed.
Have tested same update on clogin and hlogin 2.3.8
----------------------------------------
*** clogin 2014-02-21 11:03:17.903550570 +0100
--- clogin_new 2014-02-23 08:36:49.088227859 +0100
***************
*** 54,59 ****
--- 54,60 ----
# Usage line
set usage "Usage: $argv0 \[-dSV\] \[-autoenable\] \[-noenable\] \[-c command\] \
+ \[+debug_rc\] \
\[-Evar=x\] \[-e enable-password\] \[-f cloginrc-file\] \[-p user-password\] \
\[-r passphrase\] \[-s script-file\] \[-t timeout\] \[-u username\] \
\[-v vty-password\] \[-w enable-username\] \[-x command-file\] \
***************
*** 76,81 ****
--- 77,84 ----
# tracks if we receive them on the command line.
set do_passwd 1
set do_enapasswd 1
+ # debug matching cloginrc file
+ set debug_rc 0
# Save config, if prompted
set do_saveconfig 0
# Sometimes routers take awhile to answer (the default is 10 sec)
***************
*** 112,117 ****
--- 115,124 ----
# Expect debug mode
-d* {
exp_internal 1
+ # debug matching cloginrc file
+ # option twice, also show "No match"
+ } +debug_rc* {
+ set debug_rc [expr {$debug_rc + 1}]
# Username
} -u* {
if {! [regexp .\[uU\](.+) $arg ignore user]} {
***************
*** 282,292 ****
proc find {var router} {
upvar int_$var list
if { [info exists list] } {
foreach line $list {
! if { [string match [lindex $line 0] $router] } {
! return [lrange $line 1 end]
}
}
}
return {}
--- 289,311 ----
proc find {var router} {
upvar int_$var list
+ global debug_rc
+ set match_regexp 0
if { [info exists list] } {
foreach line $list {
! if { [ regexp {([$)(^|+]|\\\.)+} [lindex $line 0] ] } {
! catch { set match_regexp [regexp [lindex $line 0] $router] } reason
! if { $match_regexp != 0 } {
! if { $debug_rc } {send_user "Match regexp: $router $var $line\n"}
! return [lrange $line 1 end]
! }
! } else {
! if { [string match [lindex $line 0] $router] } {
! if { $debug_rc } { send_user "Match : $router $var $line\n" }
! return [lrange $line 1 end]
! }
}
+ if { $debug_rc >= 2 } {send_user "No match : $router $var $line\n"}
}
}
return {}
-----------------------------------------
>> Regards,
>> Pawel Rzepa
>>
>>> Hi,
>>> When I log into my devices to get configuration with rancid I must use
>>> two different users for two different groups of devices. I know that I
>>> can modify .cloginrc to achieve this:
>>>
>>> add user group-1-* {user1}
>>> add user group-2-* {user2}
>>>
>>> Unfortunately I am unable to describe groups of devices in such a
>>> consistent manner and now my .cloginrc looks like this:
>>>
>>> add user 192.168.1.* {user1}
>>> add password 192.168.1.* {pass1}
>>> add user 192.168.2.5 {user1}
>>> add password 192.168.2.5 {pass1}
>>> add user *-core-* {user1}
>>> add password *-core-* {pass1}
>>>
>>> add user 10.1.2.3 {user2}
>>> add user 10.1.5.* {user2}
>>> etc..
>>>
>>> Is it possible to use regular expression to describe hostname? I'd
>>> love to specify them like that:
>>>
>>> add user {192.168.1.*|192.168.2.5|*-core-*} {user1}
>>> add password {192.168.1.*|192.168.2.5|*-core-*} {pass1}
>>>
>>> add user {10.1.2.3|10.1.5.*} {user2}
>>> ...
>>>
>>> Best regards,
>>> Pawel Rzepa
>>
>> _______________________________________________
>> Rancid-discuss mailing list
>> Rancid-discuss at shrubbery.net
>> http://www.shrubbery.net/mailman/listinfo/rancid-discuss
> _______________________________________________
> Rancid-discuss mailing list
> Rancid-discuss at shrubbery.net
> http://www.shrubbery.net/mailman/listinfo/rancid-discuss
>
/Peo
----------------------------------------------------------
Per-Olof Olsson Email: peo at chalmers.se
Chalmers tekniska högskola IT-service
Arvid Hedvalls backe 6 412 96 Göteborg
Tel: 031/772 6738 Fax: 031/772 8680
----------------------------------------------------------
More information about the Rancid-discuss
mailing list