Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

128 строки
2.2 KiB

  1. #!/bin/bash
  2. usage()
  3. {
  4. echo "Usage: $0 [ -n NODE ] [ -z UUID ] [ -h hostname ] [ -p port ] [ -k KEY ] [ -d dir ] [ -u user ]" >&2
  5. exit 1
  6. }
  7. while getopts "n:z:h:p:k:d:u:" opt;
  8. do
  9. case "$opt" in
  10. n)
  11. NODE=$OPTARG
  12. ;;
  13. z)
  14. UUID=$OPTARG
  15. ;;
  16. h)
  17. HOSTNAME=$OPTARG
  18. ;;
  19. p)
  20. PORT=$OPTARG
  21. ;;
  22. k)
  23. KEY=$OPTARG
  24. ;;
  25. d)
  26. DIR=$OPTARG
  27. ;;
  28. u)
  29. USER=$OPTARG
  30. ;;
  31. \?)
  32. echo "Error: Invalid Option: -${OPTARG}" >&2
  33. usage
  34. ;;
  35. :)
  36. echo "Error: -${OPTARG} requires an argument."
  37. usage
  38. ;;
  39. *)
  40. usage
  41. ;;
  42. esac
  43. done
  44. shift $((OPTIND-1))
  45. if [ -z "${UUID}" ] || [ -z "${NODE}" ] || [ -z ${HOSTNAME} ] || [ -z ${PORT} ] || [ -z ${KEY} ] || [ -z "${DIR}" ] || [ -z "${USER}" ]; then
  46. usage
  47. fi
  48. SSH="ssh -i $KEY -p ${PORT} -l ${USER} -o StrictHostKeyChecking=no"
  49. SCP="scp -q -i $KEY -P ${PORT} -o StrictHostKeyChecking=no"
  50. DSTDIR="${DIR}/${UUID}"
  51. #################
  52. # functions
  53. #################
  54. check_err()
  55. {
  56. STATUS=$?
  57. if [ ${STATUS} -ne 0 ]; then
  58. echo "Unexpected error: ${STATUS}"
  59. exit ${STATUS}
  60. fi
  61. }
  62. remove_vps()
  63. {
  64. VPS=$1
  65. echo "Deleteing VPS ${VPS}..."
  66. vmadm destroy ${VPS}
  67. check_err
  68. echo "...done."
  69. }
  70. recover_dataset()
  71. {
  72. VPS=$1
  73. echo "Recovering VPS ${VPS}..."
  74. ${SSH} ${HOSTNAME} "dd if=${DIR}/${NODE}/${VPS}/${VPS}.zfs bs=4M" | /usr/sbin/zfs receive zones/${VPS}
  75. check_err
  76. echo "...done."
  77. }
  78. recover_config()
  79. {
  80. VPS=$1
  81. echo "Recovering config from backup..."
  82. ${SCP} ${USER}@${HOSTNAME}:${DIR}/${NODE}/${VPS}/${VPS}.cfg /zones/tools/descargas/
  83. cat /zones/tools/descargas/${VPS}.cfg | zonecfg -z ${VPS}
  84. check_err
  85. echo "...done."
  86. }
  87. final_steps()
  88. {
  89. VPS=$1
  90. echo "Attaching dataset..."
  91. zoneadm -z ${VPS} attach
  92. check_err
  93. echo "...done."
  94. echo "Booting VPS..."
  95. zoneadm -z ${VPS} boot
  96. check_err
  97. echo "...done."
  98. }
  99. #################
  100. # main
  101. #################
  102. echo "---
  103. BACKUP_SERVER: ${HOSTNAME}
  104. UUID to restore: ${UUID}
  105. ---"
  106. remove_vps ${UUID}
  107. recover_config ${UUID}
  108. recover_dataset ${UUID}
  109. final_steps ${UUID}