现有一个配置文件keepalived.conf中包含以{{}}引用的变量需要替换,内容如下:
global_defs {
router_id tryrus
}
virtual_server {{virtual_ipaddress}} {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server {{real_server01}} {
weight 1
HTTP_GET {
url {
path /index.jsp
}
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
}
}
real_server {{real_server02}} {
weight 1
HTTP_GET {
url {
path /index.jsp
}
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
}
}
}
变量的值在param.cfg文件中,如下配置:
# vip
#
virtual_ipaddress=192.168.100.1:8080
# real server
real_server01=192.168.100.2:8080
real_server02=192.168.100.3:8080
可用以下脚本将keepalived.conf中的virtual_ipaddress,real_server01,real_server02三个变量替换成实际的值
#!/bin/bash
current_path=$(cd $(dirname $0) && pwd)
para_file=$current_path/param.cfg
replace_file=$current_path/keepalived.conf
param_list=(`grep -o "{{.*}}" $replace_file | sed 's/}}/\n/g' | grep "{{" | sed 's/.*{{//g' | sort -u`)
for i in ${param_list[@]}
do
param_value=`egrep -v "^[[:space:]]*#" $para_file | grep "$i" | awk -F "=" '{print $2}'`
if [[ -n $param_value ]]
then
sed -i "s/{{$i}}/$param_value/g" $replace_file
else
echo "[ERROR] $(date) $i is not exists in $para_file ! LINE: $LINENO"
exit 1
fi
done
替换后的keepalived.conf配置
global_defs {
router_id tryrus
}
virtual_server 192.168.100.1:8080 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.100.2:8080 {
weight 1
HTTP_GET {
url {
path /index.jsp
}
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.3:8080 {
weight 1
HTTP_GET {
url {
path /index.jsp
}
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
}
}
}