v-sync-dns-cluster 4.2 KB

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