From e2febe97257d45d15813a7907b416c0bfcb2cc73 Mon Sep 17 00:00:00 2001 From: Jeffrey Paul Date: Wed, 8 Jun 2011 19:04:37 +0200 Subject: [PATCH] added routerconfig-to-wiki script --- wikify.routerconfig/getall.sh | 22 ++++++++ wikify.routerconfig/getconfig.ex | 10 ++++ wikify.routerconfig/wikiupdate | 92 ++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100755 wikify.routerconfig/getall.sh create mode 100755 wikify.routerconfig/getconfig.ex create mode 100755 wikify.routerconfig/wikiupdate diff --git a/wikify.routerconfig/getall.sh b/wikify.routerconfig/getall.sh new file mode 100755 index 0000000..f8387cb --- /dev/null +++ b/wikify.routerconfig/getall.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +HOSTS=" +r1 r2 r3 +switch1 switch2 switch3 +" + +for HOST in $HOSTS ; do + rm -f ./fetchedconfig + ./getconfig.ex $HOST 2> /dev/null > /dev/null + if [ -e ./fetchedconfig ]; then + #DATE=`date -u --rfc-3339=seconds` + #echo "! fetched from $HOST on $DATE" > ${HOST}-config.txt + cat ./fetchedconfig > ${HOST}-config.txt + rm -f ./fetchedconfig + ./wikiupdate ${HOST} ./${HOST}-config.txt + rm -f ./${HOST}-config.txt + else + echo "unable to fetch config for $HOST" + fi +done + diff --git a/wikify.routerconfig/getconfig.ex b/wikify.routerconfig/getconfig.ex new file mode 100755 index 0000000..05c6717 --- /dev/null +++ b/wikify.routerconfig/getconfig.ex @@ -0,0 +1,10 @@ +#!/usr/bin/expect -f +set hostname [lindex $argv 0] +set timeout 20 +spawn scp root@$hostname:running-config ./fetchedconfig +set pass "ROUTER_PASSWORD_HERE" +expect { + password: {send "$pass\r" ; exp_continue} + eof exit +} + diff --git a/wikify.routerconfig/wikiupdate b/wikify.routerconfig/wikiupdate new file mode 100755 index 0000000..12dac3c --- /dev/null +++ b/wikify.routerconfig/wikiupdate @@ -0,0 +1,92 @@ +#!/usr/bin/perl + +use strict; +use warnings qw( all ); +use WWW::Mechanize; + +our $u = 'WIKI_USERNAME'; +our $p = 'WIKI_PASSWORD'; +our $wikihost = 'wikihost.com' +our $debug = 1; + +main(); + +sub main { + + usage() unless @ARGV == 2; + + my $itemname = uc(shift(@ARGV)); + $itemname =~ s/[^A-Z0-9\-\_\.]//g; + my $pagename = $itemname . '/config'; + + my $filename = shift(@ARGV); + + open(INFILE,$filename) + or die("$0: can't open input file $filename for reading: $!\n"); + my $data; + read(INFILE,$data,1024*1024,0); #1mb sufficient + close(INFILE); + + + my $mech = WWW::Mechanize->new(); + + $mech->credentials( + $wikihost . ':443', + $wikihost, + $u => $p + ); + + $mech->get('https://' . $wikihost . '/w/index.php?title=Special:Userlogin'); + + $mech->submit_form( + form_name => 'userlogin', + fields => { + wpName => $u, + wpPassword => $p, + }, + ); + + $data =~ s/[\n\r]+/\n/gm; + + $data =~ s/^ntp clock\-period [0-9]+//gm; + + $data =~ s/^(.*)$/ $1/gm; + + # this wikifies hostnames conforming to a certian format + $data =~ s/\b([vV][0-9][0-9][A-Za-z][A-Za-z][0-9][0-9][0-9])\b/\[\[$1\]\]/gm; + + # this wikifies ip addresses + $data =~ s/\b([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\b/\[\[$1\]\]/gm; + + $mech->get("https://$wikihost/w/index.php?title=$pagename&action=edit"); + + $mech->submit_form( + form_name => 'editform', + fields => { + wpTextbox1 => "{{autogen}}\n\n". + "= [[$itemname]] configuration =\n\n". + "$data". + "\n". + "{{autofetched-router}}\n", + wpSummary => "auto-update via script by $u", + }, + ); + +} + +sub usage { + print STDERR "usage: $0 \n"; + die; +} + +sub dout { + return unless defined($debug) && $debug; + my $msg = shift; + chomp $msg; + print STDERR "*** $msg\n"; +} + + +1; + +__END__