Skip to content

Commit bdc8111

Browse files
committed
Fix SERIAL sync in DNS cluster
1 parent 7b08240 commit bdc8111

14 files changed

+296
-668
lines changed

bin/v-add-dns-domain

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: add dns domain
3-
# options: USER DOMAIN IP [NS1] [NS2] [NS3] [NS4] [RESTART]
3+
# options: USER DOMAIN IP [NS1] [NS2] [NS3] [..] [NS8] [RESTART]
44
#
55
# The function adds DNS zone with records defined in the template. If the exp
66
# argument isn't stated, the expiration date value will be set to next year.
@@ -24,7 +24,11 @@ ns1=$4
2424
ns2=$5
2525
ns3=$6
2626
ns4=$7
27-
restart=$8
27+
ns5=$8
28+
ns6=$9
29+
ns7=${10}
30+
ns8=${11}
31+
restart=${12}
2832

2933
# Includes
3034
source $VESTA/func/main.sh
@@ -36,14 +40,13 @@ source $VESTA/conf/vesta.conf
3640
# Verifications #
3741
#----------------------------------------------------------#
3842

39-
check_args '3' "$#" 'USER DOMAIN IP [NS1] [NS2] [NS3] [NS4]'
43+
check_args '3' "$#" 'USER DOMAIN IP [NS1] [NS2] [NS3] [..] [NS8] [RESTART]'
4044
validate_format 'user' 'domain' 'ip'
4145
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM'
4246
is_object_valid 'user' 'USER' "$user"
4347
is_object_unsuspended 'user' 'USER' "$user"
4448
is_domain_new 'dns'
4549
is_package_full 'DNS_DOMAINS'
46-
4750
template=$(get_user_value '$DNS_TEMPLATE')
4851
is_dns_template_valid
4952

@@ -64,6 +67,23 @@ if [ ! -z "$ns4" ]; then
6467
ns4=$(echo $7 | sed -e 's/\.*$//g' -e 's/^\.*//g')
6568
validate_format 'ns4'
6669
fi
70+
if [ ! -z "$ns5" ]; then
71+
ns5=$(echo $8 | sed -e 's/\.*$//g' -e 's/^\.*//g')
72+
validate_format 'ns5'
73+
fi
74+
if [ ! -z "$ns6" ]; then
75+
ns6=$(echo $9 | sed -e 's/\.*$//g' -e 's/^\.*//g')
76+
validate_format 'ns6'
77+
fi
78+
if [ ! -z "$ns7" ]; then
79+
ns7=$(echo ${10} | sed -e 's/\.*$//g' -e 's/^\.*//g')
80+
validate_format 'ns7'
81+
fi
82+
83+
if [ ! -z "$ns8" ]; then
84+
ns8=$(echo ${11} | sed -e 's/\.*$//g' -e 's/^\.*//g')
85+
validate_format 'ns8'
86+
fi
6787

6888

6989
#----------------------------------------------------------#
@@ -89,13 +109,25 @@ template_data=$(cat $DNSTPL/$template.tpl)
89109

90110
# Deleting unused nameservers
91111
if [ -z "$ns3" ]; then
92-
template_data=$(echo "$template_data" | grep -v %ns3%)
112+
template_data=$(echo "$template_data" |grep -v %ns3%)
93113
fi
94114
if [ -z "$ns4" ]; then
95-
template_data=$(echo "$template_data" | grep -v %ns4%)
115+
template_data=$(echo "$template_data" |grep -v %ns4%)
116+
fi
117+
if [ -z "$ns5" ]; then
118+
template_data=$(echo "$template_data" |grep -v %ns5%)
119+
fi
120+
if [ -z "$ns6" ]; then
121+
template_data=$(echo "$template_data" |grep -v %ns6%)
122+
fi
123+
if [ -z "$ns7" ]; then
124+
template_data=$(echo "$template_data" |grep -v %ns7%)
125+
fi
126+
if [ -z "$ns8" ]; then
127+
template_data=$(echo "$template_data" |grep -v %ns8%)
96128
fi
97129

98-
# Add dns zone to the user config
130+
# Adding dns zone to the user config
99131
echo "$template_data" |\
100132
sed -e "s/%ip%/$ip/g" \
101133
-e "s/%domain_idn%/$domain_idn/g" \
@@ -104,6 +136,10 @@ echo "$template_data" |\
104136
-e "s/%ns2%/$ns2/g" \
105137
-e "s/%ns3%/$ns3/g" \
106138
-e "s/%ns4%/$ns4/g" \
139+
-e "s/%ns5%/$ns5/g" \
140+
-e "s/%ns6%/$ns6/g" \
141+
-e "s/%ns7%/$ns7/g" \
142+
-e "s/%ns8%/$ns8/g" \
107143
-e "s/%time%/$TIME/g" \
108144
-e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf
109145

@@ -118,7 +154,7 @@ dns_rec="$dns_rec SUSPENDED='no' TIME='$TIME' DATE='$DATE'"
118154
echo "$dns_rec" >> $USER_DATA/dns.conf
119155
chmod 660 $USER_DATA/dns.conf
120156

121-
# Create system configs
157+
# Creating system configs
122158
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
123159
if [ -e '/etc/named.conf' ]; then
124160
dns_conf='/etc/named.conf'
@@ -136,9 +172,9 @@ if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
136172
# Updating domain dns zone
137173
update_domain_zone
138174

139-
# Set permissions
140-
chmod 640 $conf
141-
chown root:$dns_group $conf
175+
# Changing permissions
176+
chmod 640 $HOMEDIR/$user/conf/dns/$domain.db
177+
chown root:$dns_group $HOMEDIR/$user/conf/dns/$domain.db
142178
fi
143179

144180
# Updating dns-cluster queue
@@ -159,9 +195,7 @@ increase_user_value "$user" '$U_DNS_RECORDS' "$records"
159195
# Restart named
160196
if [ "$restart" != 'no' ]; then
161197
$BIN/v-restart-dns
162-
if [ $? -ne 0 ]; then
163-
exit $E_RESTART
164-
fi
198+
check_result $? "DNS restart failed"
165199
fi
166200

167201
# Logging

bin/v-add-dns-record

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,7 @@ increase_user_value "$user" '$U_DNS_RECORDS'
109109
# Restart named
110110
if [ "$restart" != 'no' ]; then
111111
$BIN/v-restart-dns
112-
if [ $? -ne 0 ]; then
113-
exit $E_RESTART
114-
fi
112+
check_result $? $E_RESTART 'dns failed to restart'
115113
fi
116114

117115
# Logging

bin/v-add-remote-dns-domain

Lines changed: 33 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -27,110 +27,69 @@ source $VESTA/conf/vesta.conf
2727
check_args '2' "$#" 'USER DOMAIN [FLUSH]'
2828
validate_format 'user' 'domain'
2929
is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER'
30-
3130
if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
32-
echo "Error: dns-cluster.conf doesn't exist"
33-
log_event "$E_NOTEXIST $EVENT"
34-
exit $E_NOTEXIST
31+
check_result $E_NOTEXIST "dns-cluster.conf doesn't exist"
3532
fi
36-
37-
number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l)
38-
if [ "$number_of_proc" -gt 2 ]; then
39-
echo "Error: another sync process already exists"
40-
log_event "$E_EXISTS $EVENT"
41-
exit $E_EXISTS
33+
if [ "$(ps auxf |grep -v grep |grep $BIN/$SCRIPT |wc -l)" -gt 2 ]; then
34+
check_result $E_EXISTS "another sync process already running"
4235
fi
36+
remote_dns_health_check
4337

4438

4539
#----------------------------------------------------------#
4640
# Action #
4741
#----------------------------------------------------------#
4842

49-
# Check domain existance
50-
check_local_domain=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf 2>/dev/null)
51-
if [ -z "$check_local_domain" ]; then
43+
# Parsing domain record
44+
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf 2>/dev/null)
45+
if [ -z "$str" ]; then
5246
pipe="$VESTA/data/queue/dns-cluster.pipe"
53-
str=$(grep -n "$SCRIPT $1 $2$" $pipe | cut -f1 -d: | head -n1)
54-
if [ ! -z "$str" ]; then
55-
sed -i "$str d" $pipe
47+
queue_str=$(grep -n "$SCRIPT $1 $2 no$" $pipe |cut -f1 -d: |head -n1)
48+
if [ ! -z "$queue_str" ]; then
49+
sed -i "$queue_str d" $pipe
5650
fi
5751
exit
5852
fi
5953

60-
old_ifs="$IFS"
6154
IFS=$'\n'
55+
for cluster in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
6256

63-
# Check remote dns nodes
64-
remote_dns_health_check
57+
# Parsing remote dns host parameters
58+
eval $cluster
6559

66-
search_str=$(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf)
67-
for cluster_str in $search_str; do
60+
# Parsing domain parameters
61+
eval $str
6862

69-
# Get host values
70-
eval $cluster_str
63+
# Syncing domain data
64+
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME $flush 'no'
65+
check_result $? "$HOST connection failed" $E_CONNECT
7166

72-
# Check connection type
73-
if [ -z "TYPE" ]; then
74-
TYPE='api'
75-
fi
67+
# Syncing domain records
68+
tmp_file="/tmp/vst-sync.$DOMAIN"
69+
cluster_file $USER_DATA/dns/$DOMAIN.conf $tmp_file
70+
check_result $? "$HOST connection failed" $E_CONNECT
7671

77-
# Check recipient dns user
78-
if [ -z "$DNS_USER" ]; then
79-
DNS_USER='dns-cluster'
80-
fi
81-
82-
# Switch on connection type
83-
case $TYPE in
84-
ssh) send_cmd="send_ssh_cmd" ;;
85-
*) send_cmd="send_api_cmd" ;;
86-
esac
72+
# Inserting synced records
73+
cluster_cmd v-insert-dns-records $DNS_USER $DOMAIN $tmp_file 'no'
74+
check_result $? "$HOST connection failed" $E_CONNECT
8775

88-
# Check dns exceptions
89-
if [ -z "$DNS_CLUSTER_IGNORE" ]; then
90-
DNS_CLUSTER_IGNORE='dns-cluster'
91-
fi
76+
# Rebuilding dns zone
77+
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no'
78+
check_result $? "$HOST connection failed" $E_CONNECT
79+
done
9280

93-
# Check flush parameters
9481

95-
# Sync domain
96-
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
97-
eval $str
9882

99-
$send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME "$flush" 'no'
100-
if [ $? -eq 0 ]; then
101-
# Sync records
102-
if [ "$TYPE" = 'ssh' ]; then
103-
tmp=$(mktemp -u)
104-
scp_cmd $USER_DATA/dns/$DOMAIN.conf $tmp
105-
$send_cmd v-insert-dns-records $DNS_USER $DOMAIN $tmp 'no'
106-
else
107-
for str in $(cat $USER_DATA/dns/$DOMAIN.conf); do
108-
str=$(echo "$str" | sed 's/"/\\"/g')
109-
$send_cmd v-insert-dns-record $DNS_USER $DOMAIN "$str"
110-
done
111-
fi
112-
113-
# Rebuild dns zone
114-
$send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled' 'no'
115-
if [ $? -ne 0 ]; then
116-
echo "Error: $TYPE connection to $HOST failed"
117-
log_event "$E_CONNECT $EVENT"
118-
exit $E_CONNECT
119-
fi
120-
fi
121-
122-
done
83+
#----------------------------------------------------------#
84+
# Vesta #
85+
#----------------------------------------------------------#
12386

124-
# Update pipe
87+
# Updating pipe
12588
rm -f $tmpfile
12689
pipe="$VESTA/data/queue/dns-cluster.pipe"
12790
str=$(grep -n "$SCRIPT $1 $2 " $pipe | cut -f1 -d: | head -n1)
12891
if [ ! -z "$str" ]; then
12992
sed -i "$str d" $pipe
13093
fi
13194

132-
#----------------------------------------------------------#
133-
# Vesta #
134-
#----------------------------------------------------------#
135-
13695
exit

bin/v-add-remote-dns-host

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@
1111

1212
# Argument defenition
1313
host=$1
14+
HOST=$host
1415
port=$2
16+
PORT=$port
1517
user=$3
16-
password=$4
18+
USER=$user
19+
password=$4; HIDE=4
20+
PASSWORD=$password
1721
type=${5-api}
22+
TYPE="$type"
1823
dns_user=${6-dns-cluster}
1924
DNS_USER=$dns_user
2025

@@ -23,10 +28,6 @@ source $VESTA/func/main.sh
2328
source $VESTA/func/remote.sh
2429
source $VESTA/conf/vesta.conf
2530

26-
# Hiding passwords
27-
A4='******'
28-
EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
29-
3031

3132
#----------------------------------------------------------#
3233
# Verifications #
@@ -61,36 +62,26 @@ else
6162
sed -i "s/DNS_CLUSTER=.*/DNS_CLUSTER='yes'/g" $VESTA/conf/vesta.conf
6263
fi
6364

64-
# Enabling restart queue
65-
HOST=$host
66-
PORT=$port
67-
USER=$user
68-
PASSWORD=$password
69-
case $type in
70-
ssh) send_cmd="send_ssh_cmd" ;;
71-
*) send_cmd="send_api_cmd" ;;
72-
esac
73-
$send_cmd v-add-cron-restart-job
65+
# Enabling remote dns-cluster queue
66+
cluster_cmd v-add-cron-restart-job
67+
check_result $? "$HOST connection failed" $E_CONNECT
7468

75-
# Sync current zones
69+
# Syncing all domains
7670
$BIN/v-sync-dns-cluster $host
77-
return_code=$?
78-
if [ "$return_code" -ne 0 ]; then
79-
exit $return_code
80-
fi
71+
check_result $? "$HOST sync failed" $E_CONNECT
8172

82-
# Add dns-cluster cron job
73+
74+
#----------------------------------------------------------#
75+
# Vesta #
76+
#----------------------------------------------------------#
77+
78+
# Adding local dns-cluster cron job
8379
cmd="sudo /usr/local/vesta/bin/v-update-sys-queue dns-cluster"
8480
check_cron=$(grep "$cmd" $VESTA/data/users/admin/cron.conf 2> /dev/null)
8581
if [ -z "$check_cron" ] && [ ! -z "$CRON_SYSTEM" ]; then
8682
$BIN/v-add-cron-job admin '*/5' '*' '*' '*' '*' "$cmd"
8783
fi
8884

89-
90-
#----------------------------------------------------------#
91-
# Vesta #
92-
#----------------------------------------------------------#
93-
9485
# Logging
9586
log_event "$OK" "$EVENT"
9687

0 commit comments

Comments
 (0)