v-sync-dns-cluster 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #!/bin/bash
  2. # info: synchronize dns domains
  3. # options: HOST
  4. # The function synchronize all dns domains.
  5. #----------------------------------------------------------#
  6. # Variable&Function #
  7. #----------------------------------------------------------#
  8. # Argument defenition
  9. host=$1
  10. verbose=$2
  11. # Includes
  12. source $VESTA/func/main.sh
  13. source $VESTA/func/remote.sh
  14. source $VESTA/conf/vesta.conf
  15. #----------------------------------------------------------#
  16. # Verifications #
  17. #----------------------------------------------------------#
  18. is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER'
  19. if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
  20. echo "Error: dns-cluster.conf doesn't exist"
  21. log_event "$E_NOTEXIST $EVENT"
  22. exit $E_NOTEXIST
  23. fi
  24. number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l)
  25. if [ "$number_of_proc" -gt 2 ]; then
  26. echo "Error: another sync process already exists"
  27. log_event "$E_EXISTS $EVENT"
  28. exit $E_EXISTS
  29. fi
  30. #----------------------------------------------------------#
  31. # Action #
  32. #----------------------------------------------------------#
  33. old_ifs="$IFS"
  34. IFS=$'\n'
  35. if [ -z $host ]; then
  36. hosts=$(cat $VESTA/conf/dns-cluster.conf | grep "SUSPENDED='no'")
  37. rm -f $VESTA/data/queue/dns-cluster.pipe
  38. touch $VESTA/data/queue/dns-cluster.pipe
  39. chmod 660 $VESTA/data/queue/dns-cluster.pipe
  40. else
  41. hosts=$(grep "HOST='$host'" $VESTA/conf/dns-cluster.conf)
  42. fi
  43. # Starting cluster loop
  44. for cluster_str in $hosts; do
  45. # Get host values
  46. eval $cluster_str
  47. # Check connection type
  48. if [ -z "TYPE" ]; then
  49. TYPE='api'
  50. fi
  51. # Print hostname
  52. if [ ! -z "$verbose" ]; then
  53. echo "HOSTNAME: $HOSTNAME"
  54. echo "TYPE: $TYPE"
  55. fi
  56. # Switch on connection type
  57. case $TYPE in
  58. ssh) send_cmd="send_ssh_cmd" ;;
  59. *) send_cmd="send_api_cmd" ;;
  60. esac
  61. # Check host connection
  62. $send_cmd v-list-sys-config
  63. if [ $? -ne 0 ]; then
  64. echo "Error: $TYPE connection to $HOST failed"
  65. log_event "$E_CONNECT $EVENT"
  66. exit $E_CONNECT
  67. fi
  68. # Check recipient dns user
  69. if [ -z "$DNS_USER" ]; then
  70. DNS_USER='dns-cluster'
  71. fi
  72. if [ ! -z "$verbose" ]; then
  73. echo "DNS_USER: $DNS_USER"
  74. fi
  75. $send_cmd v-list-user $DNS_USER
  76. if [ $? -ne 0 ]; then
  77. echo "Error: dns user $DNS_USER doesn't exist"
  78. log_event "$E_NOTEXIST $EVENT"
  79. exit $E_NOTEXIST
  80. fi
  81. # Check dns exceptions
  82. if [ -z "$DNS_CLUSTER_IGNORE" ]; then
  83. DNS_CLUSTER_IGNORE='dns-cluster'
  84. fi
  85. # Create userlist
  86. user_list=$(ls $VESTA/data/users)
  87. for exception in $(echo -e "${DNS_CLUSTER_IGNORE//,/\n}"); do
  88. user_list=$(echo "$user_list" | grep -v "^$exception$")
  89. done
  90. # Clean source records
  91. if [ ! -z "$verbose" ]; then
  92. echo "STATUS: Wiping dns domains"
  93. fi
  94. $send_cmd v-delete-dns-domains-src $DNS_USER $HOSTNAME no
  95. if [ $? -ne 0 ]; then
  96. echo "Error: $TYPE connection to $HOST failed (cleanup)"
  97. log_event "$E_CONNECT $EVENT"
  98. exit $E_CONNECT
  99. fi
  100. # Start user loop
  101. for user in $user_list; do
  102. # Sync domain
  103. for str in $(cat $VESTA/data/users/$user/dns.conf); do
  104. eval $str
  105. if [ ! -z "$verbose" ]; then
  106. echo "DOMAIN: $DOMAIN index"
  107. fi
  108. $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME
  109. if [ $? -eq 0 ]; then
  110. if [ ! -z "$verbose" ]; then
  111. echo "DOMAIN: $DOMAIN records"
  112. fi
  113. # Sync record
  114. if [ "$TYPE" = 'ssh' ]; then
  115. tmp=$(mktemp -u)
  116. scp_cmd $USER_DATA/$user/dns/$DOMAIN.conf $tmp
  117. $send_cmd v-insert-dns-records $DNS_USER $DOMAIN $tmp
  118. else
  119. for str in $(cat $USER_DATA/$user/dns/$DOMAIN.conf); do
  120. str=$(echo "$str" | sed 's/"/\\"/g')
  121. $send_cmd v-insert-dns-record \
  122. $DNS_USER $DOMAIN "$str"
  123. done
  124. fi
  125. else
  126. if [ ! -z "$verbose" ]; then
  127. echo "DOMAIN: $DOMAIN skiping records (not uniq)"
  128. fi
  129. fi
  130. done
  131. done
  132. # Rebuild dns zones
  133. $send_cmd v-rebuild-dns-domains $DNS_USER
  134. if [ $? -ne 0 ]; then
  135. echo "Error: $TYPE connection to $HOST failed (rebuild)"
  136. log_event "$E_CONNECT $EVENT"
  137. exit $E_CONNECT
  138. fi
  139. done
  140. #----------------------------------------------------------#
  141. # Vesta #
  142. #----------------------------------------------------------#
  143. exit