Skip to content

Instantly share code, notes, and snippets.

@okkyhtf
Forked from jlazic/haconfig.sh
Last active June 15, 2016 05:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save okkyhtf/6a4038fee1fd8f76647297d0891ea33f to your computer and use it in GitHub Desktop.
Save okkyhtf/6a4038fee1fd8f76647297d0891ea33f to your computer and use it in GitHub Desktop.
Split monolithic HAProxy configuration
#!/bin/bash
#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:
#/etc/haproxy/conf.d/
#├── 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.
CURRENTCFG=/etc/haproxy/haproxy.cfg
NEWCFG=/tmp/haproxy.cfg.tmp
CONFIGDIR=/etc/haproxy/conf.d
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
fi
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]$ ]]
then
echo " "
echo "Working..."
cat /etc/haproxy/conf.d/*.cfg > $CURRENTCFG
# etckeeper commit -m "Updating haproxy configuration"
echo "Reloading haproxy..."
# service haproxy reload
systemctl reload haproxy
fi
else
echo "There are errors in new configuration, please fix them and try again."
exit 1
fi
@okkyhtf
Copy link
Author

okkyhtf commented Jun 15, 2016

Removed dependency with etckeeper, and used systemd init for reloading HAProxy instance instead of upstart.

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