v-sync-dns-cluster 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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/conf/vesta.conf
  13. source $VESTA/func/main.sh
  14. source $VESTA/func/remote.sh
  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)
  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. $send_cmd v-delete-dns-domains-src $DNS_USER $HOSTNAME no
  92. if [ $? -ne 0 ]; then
  93. echo "Error: $TYPE connection to $HOST failed (cleanup)"
  94. log_event "$E_CONNECT $EVENT"
  95. exit $E_CONNECT
  96. fi
  97. # Start user loop
  98. for user in $user_list; do
  99. # Sync domain
  100. for str in $(cat $VESTA/data/users/$user/dns.conf); do
  101. eval $str
  102. if [ ! -z "$verbose" ]; then
  103. echo "DOMAIN: $DOMAIN"
  104. fi
  105. $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME
  106. # Sync record
  107. if [ "$TYPE" = 'ssh' ]; then
  108. tmp=$(mktemp -u)
  109. scp_cmd $USER_DATA/$user/dns/$DOMAIN.conf $tmp
  110. $send_cmd v-insert-dns-records $DNS_USER $DOMAIN $tmp
  111. else
  112. for str in $(cat $USER_DATA/$user/dns/$DOMAIN.conf); do
  113. str=$(echo "$str" | sed 's/"/\\"/g')
  114. $send_cmd v-insert-dns-record \
  115. $DNS_USER $DOMAIN "$str"
  116. done
  117. fi
  118. done
  119. done
  120. # Rebuild dns zones
  121. $send_cmd v-rebuild-dns-domains $DNS_USER
  122. if [ $? -ne 0 ]; then
  123. echo "Error: $TYPE connection to $HOST failed (rebuild)"
  124. log_event "$E_CONNECT $EVENT"
  125. exit $E_CONNECT
  126. fi
  127. done
  128. #----------------------------------------------------------#
  129. # Vesta #
  130. #----------------------------------------------------------#
  131. exit