Skip to content

Commit eda3258

Browse files
authored
Fix/sync issues existing domains (hestiacp#3028)
* Fix sync issues existing domains * Also change v-rebuild-dns-domains * Also update v-sync-dns-cluster * Add debug info 1.7.0.sh step * One time display the message is enough * Quick test * Set to true * Fix bug for real and remove debug info * Disable updating dns records slave as rdnc notifify does it * Limit reload to 1 zone * When slave is set to yes do not sync domain * hestiacp#2649 Add role for DNS cluster that doesn't get synced with v-sync-dns-cluster * Add extra space * $USER_DATA was missing * $USER_DATA is defined everywhere as $HESTIA/data/users/$user Only v-sync-dns-cluster uses it is as $HESTIA/data/users/
1 parent abb202a commit eda3258

File tree

11 files changed

+173
-153
lines changed

11 files changed

+173
-153
lines changed

bin/v-add-remote-dns-domain

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ fi
5959
if [ "$DNS_CLUSTER_SYSTEM" = "zone" ]; then
6060
str=$(echo "$str" | sed "s/SLAVE='no'/SLAVE='yes'/g");
6161
str=$(echo "$str" | sed "s/SLAVE=''/SLAVE='yes'/g");
62-
ip=$($BIN/v-list-sys-ips plain | cut -f1);
62+
ip=$($BIN/v-list-sys-ips plain | cut -f1 | head -n1);
6363
str=$(echo "$str" | sed "s/MASTER=''/MASTER='$ip'/g");
6464
fi
6565

@@ -82,7 +82,6 @@ for cluster in $(grep "SUSPENDED='no'" $HESTIA/conf/dns-cluster.conf); do
8282
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no'
8383
check_result $? "$HOST connection failed" "$E_CONNECT"
8484

85-
rndc notify $domain > /dev/null 2>&1
8685
else
8786
# Syncing domain data
8887
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME $flush 'no'
@@ -103,6 +102,9 @@ for cluster in $(grep "SUSPENDED='no'" $HESTIA/conf/dns-cluster.conf); do
103102
fi
104103
done
105104

105+
if [ "$DNS_CLUSTER_SYSTEM" = "zone" ]; then
106+
rndc notify $domain > /dev/null 2>&1
107+
fi
106108
#----------------------------------------------------------#
107109
# Hestia #
108110
#----------------------------------------------------------#

bin/v-add-remote-dns-record

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -54,38 +54,36 @@ if [ -z "$str" ]; then
5454
fi
5555
exit
5656
fi
57-
58-
IFS=$'\n'
59-
for cluster in $(grep "SUSPENDED='no'" $HESTIA/conf/dns-cluster.conf); do
60-
61-
# Reset user, password and hash vars
62-
clear_dns_cluster_settings
63-
64-
# Parsing remote host parameters
65-
parse_object_kv_list "$cluster"
66-
67-
# Syncing serial
68-
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
69-
# Parsing domain parameters
70-
parse_object_kv_list "$str"
71-
72-
if [ "$DNS_CLUSTER_SYSTEM" != "zone" ]; then
73-
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'domain' 'no'
74-
check_result $? "$HOST connection failed (soa sync)" "$E_CONNECT"
75-
76-
# Syncing record
77-
str=$(grep "ID='$id'" $USER_DATA/dns/$domain.conf | sed 's/"/\\"/g')
78-
cluster_cmd v-insert-dns-record $DNS_USER $domain "$str" 'no'
79-
check_result $? "$HOST connection failed (record sync)" "$E_CONNECT"
80-
81-
# Rebuilding dns zone
82-
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no'
83-
check_result $? "$HOST connection failed (rebuild)" "$E_CONNECT"
84-
fi
85-
done
57+
# $DNS_CLUSTER_SYSTEM = "zone" doesn't need to be uopdated
8658

8759
if [ "$DNS_CLUSTER_SYSTEM" != "zone" ]; then
88-
rndc notify $domain > /dev/null 2>&1
60+
IFS=$'\n'
61+
for cluster in $(grep "SUSPENDED='no'" $HESTIA/conf/dns-cluster.conf); do
62+
63+
# Reset user, password and hash vars
64+
clear_dns_cluster_settings
65+
66+
# Parsing remote host parameters
67+
parse_object_kv_list "$cluster"
68+
69+
# Syncing serial
70+
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
71+
# Parsing domain parameters
72+
parse_object_kv_list "$str"
73+
74+
75+
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'domain' 'no'
76+
check_result $? "$HOST connection failed (soa sync)" "$E_CONNECT"
77+
78+
# Syncing record
79+
str=$(grep "ID='$id'" $USER_DATA/dns/$domain.conf | sed 's/"/\\"/g')
80+
cluster_cmd v-insert-dns-record $DNS_USER $domain "$str" 'no'
81+
check_result $? "$HOST connection failed (record sync)" "$E_CONNECT"
82+
83+
# Rebuilding dns zone
84+
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no'
85+
check_result $? "$HOST connection failed (rebuild)" "$E_CONNECT"
86+
done
8987
fi
9088
#----------------------------------------------------------#
9189
# Hestia #

bin/v-rebuild-dns-domain

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ if [ "$update_serial" != 'no' ]; then
8181
update_domain_serial
8282
fi
8383

84+
syshealth_repair_dns_config
8485
# Rebuiling zone config
8586
rebuild_dns_domain_conf
8687

bin/v-rebuild-dns-domains

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ for domain in $(search_objects 'dns' 'DOMAIN' "*" 'DOMAIN'); do
8282
if [ "$update_serial" != 'no' ]; then
8383
update_domain_serial
8484
fi
85+
syshealth_repair_dns_config
8586
rebuild_dns_domain_conf
8687
done
8788

bin/v-sync-dns-cluster

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ fi
4747

4848
# Starting cluster loop
4949
for cluster in $hosts; do
50-
50+
5151
# Reset user, password and hash vars
52-
clear_dns_cluster_settings
53-
52+
clear_dns_cluster_settings
53+
5454
# Parsing host values
5555
parse_object_kv_list "$cluster"
5656

@@ -61,34 +61,44 @@ for cluster in $hosts; do
6161
# Syncing user domains
6262
user_list=$(ls -d $HESTIA/data/users/*/ | sed "s#$HESTIA/data/users/##" | sed s"/.$//" | grep -v "dns-cluster")
6363
for user in $user_list; do
64-
for str in $(cat $HESTIA/data/users/$user/dns.conf); do
65-
if [ "$DNS_CLUSTER_SYSTEM" != "zone" ]; then
66-
# Syncing domain index
64+
USER_DATA="$HESTIA/data/users/$user"
65+
ROLE=$(get_user_value '$ROLE');
66+
if [ "$ROLE" != "dns-cluster" ]; then
67+
for str in $(cat $HESTIA/data/users/$user/dns.conf); do
68+
unset $SLAVE
6769
parse_object_kv_list "$str"
68-
cluster_cmd v-insert-dns-domain "$DNS_USER" "$str" "$HOSTNAME" ' ' "no"
69-
check_result $? "$HOST connection failed" "$E_CONNECT"
70-
71-
# Syncing domain records
72-
tmp_file="/tmp/vst-sync.$DOMAIN"
73-
cluster_file "$USER_DATA/$user/dns/$DOMAIN.conf" "$tmp_file"
74-
check_result $? "$HOST connection failed" "$E_CONNECT"
75-
76-
cluster_cmd v-insert-dns-records "$DNS_USER" "$DOMAIN" "$tmp_file" 'no'
77-
check_result $? "$HOST connection failed" "$E_CONNECT"
78-
fi
79-
if [ "$DNS_CLUSTER_SYSTEM" = "zone" ]; then
80-
str=$(echo "$str" | sed "s/SLAVE='no'/SLAVE='yes'/g");
81-
ip=$($BIN/v-list-sys-ips plain | cut -f1);
82-
str=$(echo "$str" | sed "s/MASTER='*'/MASTER='$ip'/g");
83-
84-
# Syncing domain data
85-
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME $flush 'no'
86-
check_result $? "$HOST connection failed" "$E_CONNECT"
87-
88-
cluster_cmd v-rebuild-dns-domain "$DNS_USER" "$DOMAIN"
89-
rndc notify $DOMAIN > /dev/null 2>&1
90-
fi
91-
done
70+
if [ "$SLAVE" != "yes" ]; then
71+
if [ "$DNS_CLUSTER_SYSTEM" != "zone" ]; then
72+
# Syncing domain index
73+
74+
cluster_cmd v-insert-dns-domain "$DNS_USER" "$str" "$HOSTNAME" ' ' "no"
75+
check_result $? "$HOST connection failed" "$E_CONNECT"
76+
77+
# Syncing domain records
78+
tmp_file="/tmp/vst-sync.$DOMAIN"
79+
cluster_file "$HESTIA/data/users/$user/dns/$DOMAIN.conf" "$tmp_file"
80+
check_result $? "$HOST connection failed" "$E_CONNECT"
81+
82+
cluster_cmd v-insert-dns-records "$DNS_USER" "$DOMAIN" "$tmp_file" 'no'
83+
check_result $? "$HOST connection failed" "$E_CONNECT"
84+
fi
85+
if [ "$DNS_CLUSTER_SYSTEM" = "zone" ]; then
86+
str=$(echo "$str" | sed "s/SLAVE='no'/SLAVE='yes'/g");
87+
str=$(echo "$str" | sed "s/SLAVE=''/SLAVE='yes'/g");
88+
89+
ip=$($BIN/v-list-sys-ips plain | cut -f1 | head -n1);
90+
str=$(echo "$str" | sed "s/MASTER=''/MASTER='$ip'/g");
91+
92+
# Syncing domain data
93+
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME $flush 'no'
94+
check_result $? "$HOST connection failed" "$E_CONNECT"
95+
96+
cluster_cmd v-rebuild-dns-domain "$DNS_USER" "$DOMAIN"
97+
rndc notify $DOMAIN > /dev/null 2>&1
98+
fi
99+
fi
100+
done
101+
fi
92102
done
93103
if [ "$DNS_CLUSTER_SYSTEM" != "zone" ]; then
94104
# Rebuilding dns zones

func/main.sh

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,7 +1085,7 @@ is_object_format_valid() {
10851085

10861086
# Role validator
10871087
is_role_valid (){
1088-
if ! [[ "$1" =~ ^admin$|^user$ ]]; then
1088+
if ! [[ "$1" =~ ^admin$|^user$|^dns-cluster$ ]]; then
10891089
check_result "$E_INVALID" "invalid $2 format :: $1"
10901090
fi
10911091
}
@@ -1131,7 +1131,7 @@ is_format_valid() {
11311131
action) is_fw_action_format_valid "$arg";;
11321132
active) is_boolean_format_valid "$arg" 'active' ;;
11331133
aliases) is_alias_format_valid "$arg" ;;
1134-
alias) is_alias_format_valid "$arg" ;;
1134+
alias) is_alias_format_valid "$arg" ;;
11351135
antispam) is_boolean_format_valid "$arg" 'antispam' ;;
11361136
antivirus) is_boolean_format_valid "$arg" 'antivirus' ;;
11371137
autoreply) is_autoreply_format_valid "$arg" ;;
@@ -1219,16 +1219,16 @@ is_format_valid() {
12191219
}
12201220

12211221
is_folder_exists () {
1222-
if [ ! -d "$1" ]; then
1222+
if [ ! -d "$1" ]; then
12231223
check_result "$E_NOTEXIST" "folder $1 does not exist"
12241224
fi
12251225
}
12261226

12271227
is_command_valid_format () {
1228-
if [[ ! "$1" =~ ^v-[[:alnum:]][-|\.|_[:alnum:]]{0,64}[[:alnum:]]$ ]]; then
1228+
if [[ ! "$1" =~ ^v-[[:alnum:]][-|\.|_[:alnum:]]{0,64}[[:alnum:]]$ ]]; then
12291229
check_result "$E_INVALID" "Invalid command format"
12301230
fi
1231-
if [[ -n $( echo "$1" | grep -e '\-\-' ) ]]; then
1231+
if [[ -n $( echo "$1" | grep -e '\-\-' ) ]]; then
12321232
check_result "$E_INVALID" "Invalid command format"
12331233
fi
12341234
}
@@ -1304,15 +1304,15 @@ check_access_key_cmd() {
13041304
local access_key_id="$(basename "$1")"
13051305
local cmd=$2
13061306
local -n user_arg_position=$3
1307-
1308-
if [[ "$DEBUG_MODE" = "true" ]]; then
1307+
1308+
if [[ "$DEBUG_MODE" = "true" ]]; then
13091309
new_timestamp
13101310
echo "[$date:$time] $1 $2" >> /var/log/hestia/api.log
13111311
fi
13121312
if [[ -z "$access_key_id" || ! -f "$HESTIA/data/access-keys/${access_key_id}" ]]; then
13131313
check_result "$E_FORBIDEN" "Access key $access_key_id doesn't exist"
13141314
fi
1315-
1315+
13161316
if [[ -z "$cmd" ]]; then
13171317
check_result "$E_FORBIDEN" "Command not provided"
13181318
elif [[ "$cmd" = 'v-make-tmp-file' ]]; then
@@ -1326,11 +1326,11 @@ check_access_key_cmd() {
13261326
fi
13271327
elif [[ -z "$PERMISSIONS" && "$USER" != "admin" ]]; then
13281328
check_result "$E_FORBIDEN" "Key $access_key_id don't have permission to run the command $hst_command"
1329-
fi
1329+
fi
13301330
user_arg_position="0"
13311331
elif [[ ! -e "$BIN/$cmd" ]]; then
13321332
check_result "$E_FORBIDEN" "Command $cmd not found"
1333-
else
1333+
else
13341334
USER="" PERMISSIONS=""
13351335
source_conf "${HESTIA}/data/access-keys/${access_key_id}"
13361336

@@ -1505,8 +1505,8 @@ multiphp_default_version() {
15051505

15061506
is_hestia_package(){
15071507
check=false;
1508-
for pkg in $1; do
1509-
if [ "$pkg" == "$2" ]; then
1508+
for pkg in $1; do
1509+
if [ "$pkg" == "$2" ]; then
15101510
check="true";
15111511
fi
15121512
done

0 commit comments

Comments
 (0)