Blame view

sync-router 2.89 KB
Frederik Lindenaar authored
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/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"
	;;
Frederik Lindenaar authored
45
    A |M|MM)
Frederik Lindenaar authored
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  	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