#!/bin/bash # info: add remote dns domain # options: USER DOMAIN [FLUSH] # # The function synchronize dns domain with the remote server. #----------------------------------------------------------# # Variable&Function # #----------------------------------------------------------# # Argument defenition user=$1 domain=$2 flush=$3 # Includes source $VESTA/func/main.sh source $VESTA/func/remote.sh source $VESTA/conf/vesta.conf #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# check_args '2' "$#" 'USER DOMAIN [FLUSH]' validate_format 'user' 'domain' is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER' if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then echo "Error: dns-cluster.conf doesn't exist" log_event "$E_NOTEXIST $EVENT" exit $E_NOTEXIST fi number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l) if [ "$number_of_proc" -gt 2 ]; then echo "Error: another sync process already exists" log_event "$E_EXISTS $EVENT" exit $E_EXISTS fi #----------------------------------------------------------# # Action # #----------------------------------------------------------# # Check domain existance check_local_domain=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf 2>/dev/null) if [ -z "$check_local_domain" ]; then pipe="$VESTA/data/queue/dns-cluster.pipe" str=$(grep -n "$SCRIPT $1 $2$" $pipe | cut -f1 -d: | head -n1) if [ ! -z "$str" ]; then sed -i "$str d" $pipe fi exit fi old_ifs="$IFS" IFS=$'\n' # Check remote dns nodes remote_dns_health_check search_str=$(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf) for cluster_str in $search_str; do # Get host values eval $cluster_str # Check connection type if [ -z "TYPE" ]; then TYPE='api' fi # Check recipient dns user if [ -z "$DNS_USER" ]; then DNS_USER='dns-cluster' fi # Switch on connection type case $TYPE in ssh) send_cmd="send_ssh_cmd" ;; *) send_cmd="send_api_cmd" ;; esac # Check dns exceptions if [ -z "$DNS_CLUSTER_IGNORE" ]; then DNS_CLUSTER_IGNORE='dns-cluster' fi # Check flush parameters # Sync domain str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) eval $str $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME "$flush" 'no' if [ $? -eq 0 ]; then # Sync records if [ "$TYPE" = 'ssh' ]; then tmp=$(mktemp -u) scp_cmd $USER_DATA/dns/$DOMAIN.conf $tmp $send_cmd v-insert-dns-records $DNS_USER $DOMAIN $tmp 'no' else for str in $(cat $USER_DATA/dns/$DOMAIN.conf); do str=$(echo "$str" | sed 's/"/\\"/g') $send_cmd v-insert-dns-record $DNS_USER $DOMAIN "$str" done fi # Rebuild dns zone $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' if [ $? -ne 0 ]; then echo "Error: $TYPE connection to $HOST failed" log_event "$E_CONNECT $EVENT" exit $E_CONNECT fi fi done # Update pipe rm -f $tmpfile pipe="$VESTA/data/queue/dns-cluster.pipe" str=$(grep -n "$SCRIPT $1 $2 " $pipe | cut -f1 -d: | head -n1) if [ ! -z "$str" ]; then sed -i "$str d" $pipe fi #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# exit