Любому администратору известно, что намного удобнее работать с конфигами логически разделенными на файлы. Это позволяет облегчить процесс автоматизации, да и найти нужную информацию так легче.
Увы, но с конфигурационным файлом HAProxy так не получится. В нем нет директивы include ни в каком виде.
Можно при запуске или перезагрузке указывать несколько конфигурационных файлов:
haproxy -c /path/to/file1.cfg -c /path/to/file2.cfg
и т. д.
Однако в инитскриптах указан только один кофиг, из чего вытекает, что при запуске системы или любом управлении haproxy через инит (например, service haproxy reload или systemctl haproxy reload ) будет считан не весь конфиг. Для обхода данного ограничения можно использовать следующий скрипт. Он читает файл /etc/haproxy/haproxy.draft и, там где встерчается фраза INCLUDE /path/to/file.cfg он подставляет содержимое указанного файла:
#!/bin/bash CFG=/etc/haproxy/haproxy.cfg NEWCFG=/tmp/haproxy.cfg.tmp TMPCFG=/tmp/haproxy.cfg.$$ CONFIGDIR=/etc/haproxy/conf.d/ DRAFT=/etc/haproxy/haproxy.draft cp $DRAFT $NEWCFG grep_exit=0 while [ $grep_exit -ne 1 ] do config_line_count=`cat $NEWCFG | wc -l` include_line_number=`grep -nEm1 'INCLUDE [0-9a-zA-Z_-]*\.cfg' $NEWCFG | cut -d':' -f1` include_file=`grep -oEm1 'INCLUDE [0-9a-zA-Z_-]*\.cfg' $NEWCFG | cut -d' ' -f2` let head_line_number=$include_line_number-1 let tail_line_number=$config_line_count-$include_line_number head -$head_line_number $NEWCFG >> $TMPCFG cat $CONFIGDIR/$include_file >> $TMPCFG tail -$tail_line_number $NEWCFG >> $TMPCFG rm $NEWCFG mv $TMPCFG $NEWCFG grep -sqE 'INCLUDE [0-9a-zA-Z_-]*\.cfg' $NEWCFG grep_exit=$? done mv $NEWCFG $CFG exit 0
Данный скрипт не проверяет целостность конфига (но можно добавить, это не сложно) и, пока, не поддерживает маски (например «*»).