initial commit of sync-router script, working for my router and git repo now
This commit is contained in:
92
sync-router
Executable file
92
sync-router
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash -e
|
||||
#
|
||||
# sync-router shell scripts to synchronize cisco configuration and DHCP static
|
||||
# lease files with with GIT repository. Operations performed:
|
||||
# - update header of modified DHCP static lease files, upload
|
||||
# them using using scp and add them to the next commit
|
||||
# - restart Cisco DHCP service after updating static lease files
|
||||
# - copy Cisco startup-config using scp and add to next commit
|
||||
# - commit changes to the git repository
|
||||
#
|
||||
# Version 1.0, latest version at: https://gitlab.lindenaar.net/scripts/cisco
|
||||
#
|
||||
# Copyright (c) 2016 Frederik Lindenaar
|
||||
#
|
||||
# This script is free software: you can redistribute and/or modify it under the
|
||||
# terms of version 3 of the GNU General Public License as published by the Free
|
||||
# Software Foundation, or (at your option) any later version of the license.
|
||||
#
|
||||
# This script is distributed in the hope that it will be useful but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along with
|
||||
# this program. If not, visit <http://www.gnu.org/licenses/> to download it.
|
||||
|
||||
### Configuration ###
|
||||
router=`basename \`dirname $0 | pwd\`` # name of router - based on directory
|
||||
syncfiles=dhcp-\* # list/pattern of dhcp lease files
|
||||
fileto=flash: # location of dhcp lease files on cisco
|
||||
|
||||
### Implementation ###
|
||||
echo updating with $router
|
||||
|
||||
# Process the DHCP static lease files that have changed
|
||||
git status -s "$syncfiles" | while read status filename
|
||||
do
|
||||
case $status in
|
||||
\?\?)
|
||||
echo skipping $filename as it is not yet added to the repository
|
||||
;;
|
||||
D)
|
||||
echo removing $filename as it is no longer in the repository
|
||||
ssh -q $router "delete /force $fileto$filename"
|
||||
;;
|
||||
A |M)
|
||||
echo updating and uploading modified file $filename
|
||||
head -2 $filename | while read tag value
|
||||
do
|
||||
case $tag in
|
||||
\*time\*)
|
||||
date +"$tag %h %d %Y %l:%M %p" > .$filename.$$.tmp
|
||||
;;
|
||||
\*version\*)
|
||||
echo $tag $[ $value + 1 ] >> .$filename.$$.tmp
|
||||
;;
|
||||
*)
|
||||
echo "found unknown entry \"$tag $value\", aborting"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
tail +3 $filename >> .$filename.$$.tmp
|
||||
scp -q .$filename.$$.tmp $router:$fileto$filename
|
||||
mv .$filename.$$.tmp $filename
|
||||
git add $filename
|
||||
;;
|
||||
*)
|
||||
echo unsupported git status "$status", aborting
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Restart the DHCP service on the router if any of the dhcp files changed
|
||||
if git status -s "$syncfiles" | egrep -q ^[MAD]; then
|
||||
echo restarting dhcp service
|
||||
cat << EOT | ssh -q $router
|
||||
configure terminal
|
||||
no service dhcp
|
||||
service dhcp
|
||||
exit
|
||||
exit
|
||||
EOT
|
||||
fi
|
||||
|
||||
# Fetch the current start-up configuration and add it to the repository
|
||||
scp -q $router:startup-config .
|
||||
git diff startup-config
|
||||
git add startup-config
|
||||
|
||||
# and commit the changes (or unadd new configuration when commit is aborted)
|
||||
git commit || git reset HEAD startup-config
|
||||
Reference in New Issue
Block a user