remote.sh 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #!/bin/bash
  2. # Check if script already running or not
  3. is_procces_running() {
  4. SCRIPT=$(basename $0)
  5. for pid in $(pidof -x $SCRIPT); do
  6. if [ $pid != $$ ]; then
  7. check_result "$E_INUSE" "$SCRIPT is already running"
  8. fi
  9. done
  10. }
  11. send_api_cmd() {
  12. if [ -n "$PASSWORD" ]; then
  13. answer=$(curl -s -k \
  14. --data-urlencode "user=$USER" \
  15. --data-urlencode "password=$PASSWORD" \
  16. --data-urlencode "returncode=yes" \
  17. --data-urlencode "cmd=$1" \
  18. --data-urlencode "arg1=$2" \
  19. --data-urlencode "arg2=$3" \
  20. --data-urlencode "arg3=$4" \
  21. --data-urlencode "arg4=$5" \
  22. --data-urlencode "arg5=$6" \
  23. --data-urlencode "arg6=$7" \
  24. --data-urlencode "arg7=$8" \
  25. --data-urlencode "arg8=$9" \
  26. https://$HOST:$PORT/api/)
  27. else
  28. answer=$(curl -s -k \
  29. --data-urlencode "hash=$HASH" \
  30. --data-urlencode "returncode=yes" \
  31. --data-urlencode "cmd=$1" \
  32. --data-urlencode "arg1=$2" \
  33. --data-urlencode "arg2=$3" \
  34. --data-urlencode "arg3=$4" \
  35. --data-urlencode "arg4=$5" \
  36. --data-urlencode "arg5=$6" \
  37. --data-urlencode "arg6=$7" \
  38. --data-urlencode "arg7=$8" \
  39. --data-urlencode "arg8=$9" \
  40. https://$HOST:$PORT/api/)
  41. fi
  42. return $answer
  43. }
  44. send_api_file() {
  45. if [ -n "$PASSWORD" ]; then
  46. answer=$(curl -s -k \
  47. --data-urlencode "user=$USER" \
  48. --data-urlencode "password=$PASSWORD" \
  49. --data-urlencode "returncode=yes" \
  50. --data-urlencode "cmd=v-make-tmp-file" \
  51. --data-urlencode "arg1=$(cat $1)" \
  52. --data-urlencode "arg2=$2" \
  53. https://$HOST:$PORT/api/)
  54. else
  55. answer=$(curl -s -k \
  56. --data-urlencode "hash=$HASH" \
  57. --data-urlencode "returncode=yes" \
  58. --data-urlencode "cmd=v-make-tmp-file" \
  59. --data-urlencode "arg1=$(cat $1)" \
  60. --data-urlencode "arg2=$2" \
  61. https://$HOST:$PORT/api/)
  62. fi
  63. return $answer
  64. }
  65. send_ssh_cmd() {
  66. if [ -z "$IDENTITY_FILE" ] && [ "$USER" = 'root' ]; then
  67. IDENTITY_FILE="/root/.ssh/id_rsa"
  68. fi
  69. if [ -z "$IDENTITY_FILE" ]; then
  70. IDENTITY_FILE="/home/$USER/.ssh/id_rsa"
  71. fi
  72. if [ "$USER" = 'root' ]; then
  73. args="$HESTIA/bin/$1 \"$2\" \"$3\" \"$4\" \"$5\""
  74. else
  75. args="sudo $HESTIA/bin/$1 \"$2\" \"$3\" \"$4\" \"$5\""
  76. fi
  77. ssh -i $IDENTITY_FILE $USER@$HOST -p $PORT "$args" > /dev/null 2>&1
  78. if [ "$?" -ne '0' ]; then
  79. return 1
  80. else
  81. return 0
  82. fi
  83. }
  84. send_scp_file() {
  85. if [ -z "$IDENTITY_FILE" ]; then
  86. IDENTITY_FILE="/home/admin/.ssh/id_rsa"
  87. fi
  88. scp -P $PORT -i $IDENTITY_FILE $1 $USER@$HOST:$2 > /dev/null 2>&1
  89. if [ "$?" -ne '0' ]; then
  90. return 1
  91. else
  92. return 0
  93. fi
  94. }
  95. is_dnshost_new() {
  96. if [ -e "$HESTIA/conf/dns-cluster.conf" ]; then
  97. check_host=$(grep "HOST='$host'" $HESTIA/conf/dns-cluster.conf)
  98. if [ -n "$check_host" ]; then
  99. check_result $E_EXISTS "remote dns host $host exists"
  100. fi
  101. fi
  102. }
  103. is_dnshost_alive() {
  104. cluster_cmd v-list-sys-config
  105. check_result $? "$type connection to $HOST failed" "$E_CONNECT"
  106. cluster_cmd v-list-user "$DNS_USER"
  107. check_result $? "$DNS_USER doesn't exist" "$E_CONNECT"
  108. }
  109. remote_dns_health_check() {
  110. OLD_IFS="$IFS"
  111. IFS=$'\n'
  112. # Starting health-check
  113. for str in $(grep "SUSPENDED='no'" $HESTIA/conf/dns-cluster.conf); do
  114. parse_object_kv_list "$str"
  115. # Checking host connection
  116. cluster_cmd v-list-user "$DNS_USER"
  117. if [ $? -ne 0 ]; then
  118. # Creating error report
  119. tmpfile=$(mktemp)
  120. echo "$(basename $0) $*" > $tmpfile
  121. echo -e "Error: $TYPE connection to $HOST failed.\n" >> $tmpfile
  122. echo -n "Remote dns host has been suspended." >> $tmpfile
  123. echo -n "After resolving issue run " >> $tmpfile
  124. echo -e "following commands:\n" >> $tmpfile
  125. echo "v-unsuspend-remote-dns-host $HOST" >> $tmpfile
  126. echo "v-sync-dns-cluster $HOST" >> $tmpfile
  127. echo -e "\n\n--\nHestia Control Panel\n$(hostname)" >> $tmpfile
  128. if [ "$1" = 'no_email' ]; then
  129. cat $tmpfile
  130. else
  131. subj="DNS sync failed"
  132. email=$($BIN/v-get-user-value admin CONTACT)
  133. cat $tmpfile |$SENDMAIL -s "$subj" $email
  134. fi
  135. # Deleting tmp file
  136. rm -f $tmpfile
  137. log_event "$E_CONNECT" "$ARGUMENTS"
  138. # Suspending remote host
  139. dconf="../../conf/dns-cluster"
  140. update_object_value "$dconf" 'HOST' "$HOST" '$SUSPENDED' 'yes'
  141. fi
  142. done
  143. IFS="$OLD_IFS"
  144. }
  145. cluster_cmd() {
  146. case $TYPE in
  147. ssh) send_ssh_cmd $* ;;
  148. api) send_api_cmd $* ;;
  149. esac
  150. }
  151. cluster_file() {
  152. case $TYPE in
  153. ssh) send_scp_file $* ;;
  154. api) send_api_file $* ;;
  155. esac
  156. }