Instantly share code, notes, and snippets.

What would you like to do?
Split monolithic HAProxy configuration
#Requirements: etckeeper, diffcolor
#This script concatenates multiple files of haproxy configuration into
#one file, and than checks if monolithic config contains errors. If everything is
#OK with new config script will write new config to $CURRENTCFG and reload haproxy
#Also, script will commit changes to etckeeper, if you don't use etckeeper you
#should start using it.
#Script assumes following directory structure:
#├── 00-global.cfg
#├── 15-lazic.cfg
#├── 16-togs.cfg
#├── 17-svartberg.cfg
#├── 18-home1.cfg.disabled
#└── 99-globalend.cfg
#Every site has it's own file, so you can disable site by changing
#it's file extension, or appending .disabled, like I do.
echo "Compiling *.cfg files from $CONFIGDIR"
ls $CONFIGDIR/*.cfg
cat $CONFIGDIR/*.cfg > $NEWCFG
echo "Differences between current and new config"
diff -s -U 3 $CURRENTCFG $NEWCFG | colordiff
if [ $? -ne 0 ]; then
echo "You should make some changes first :)"
exit 1 #Exit if old and new configuration are the same
echo -e "Checking if new config is valid..."
haproxy -c -f $NEWCFG
if [ $? -eq 0 ]; then
echo "Check if there are some warnings in new configuration."
read -p "Should I copy new configuration to $CURRENTCFG and reload haproxy? [y/N]" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]
echo " "
echo "Working..."
cat /etc/haproxy/conf.d/*.cfg > $CURRENTCFG
etckeeper commit -m "Updating haproxy configuration"
echo "Reloading haproxy..."
service haproxy reload
echo "There are errors in new configuration, please fix them and try again."
exit 1

This comment has been minimized.

aristipp commented Sep 29, 2015

Thanks a lot, works great,


This comment has been minimized.

zx1986 commented Mar 15, 2016

Thank you so much!


This comment has been minimized.

jazzl0ver commented Jul 12, 2016

Thanks for the script! Line 29 has a mistake since "$?" refers to the exit code of colordiff rather than the diff itself. The fix is to change it to:
colordiff -s -U 3 $CURRENTCFG $NEWCFG

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment