Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

125 Zeilen
3.0 KiB

  1. #!/usr/bin/bash
  2. usage()
  3. {
  4. echo "Usage: $0 -z UUID -h hostname" >&2
  5. exit 1
  6. }
  7. while getopts "z:h:" opt;
  8. do
  9. case "$opt" in
  10. z)
  11. UUID=$OPTARG
  12. ;;
  13. h)
  14. SERVER=$OPTARG
  15. ;;
  16. *)
  17. usage
  18. ;;
  19. esac
  20. done
  21. shift $((OPTIND-1))
  22. if [ -z "${UUID}" ] || [ -z "${SERVER}" ]; then
  23. usage
  24. fi
  25. KEYFILE="/usbkey/ssh/id_rsa"
  26. DESTINYPORT="2221"
  27. SSH="ssh -i $KEYFILE -p $DESTINYPORT"
  28. SCP="scp -P $DESTINYPORT -i $KEYFILE"
  29. CFG="/zones/tools/cfg"
  30. BRAND=`/usr/sbin/vmadm get ${UUID} | json brand | tr -d '\n'`
  31. ZONEPATH=`vmadm get ${UUID} | json zonepath | tr -d '\n' | sed 's/\///'`
  32. # chequeamos la existencia del archivo llave
  33. if [ ! -f $KEYFILE ]; then
  34. echo "ssh $KEYFILE inexistent!"
  35. echo "Create it please"
  36. exit 1
  37. fi
  38. check()
  39. {
  40. if [ $1 != 0 ]; then
  41. echo "exiting ... $1"
  42. exit $1
  43. else echo "done."
  44. fi
  45. }
  46. snapshot()
  47. {
  48. echo "creando snapshot de $1 ..."
  49. zfs snapshot $1@`date +%Y%m%d`
  50. check $?
  51. echo "enviando snapshot de $1 a $SERVER ..."
  52. zfs send $1@`date +%Y%m%d` | $SSH $SERVER zfs receive $1
  53. check $?
  54. echo "creando snapshot incremental de $1 ..."
  55. zfs snapshot $1@`date +%Y%m%d`.incremental
  56. check $?
  57. echo "enviando snapshot incremental de $1 a $SERVER ..."
  58. zfs send -i $1@`date +%Y%m%d` $1@`date +%Y%m%d`.incremental | $SSH $SERVER zfs receive $1
  59. check $?
  60. }
  61. # capturamos el alias que vmadm usa en base64 y que da problemas con el mitico zonecfg
  62. ALIAS=`vmadm get ${UUID} | json alias | tr -d '\n'`
  63. zonecfg -z ${UUID} "select attr name=alias; set value=temporal; end"
  64. # creamos snapshot, lo enviamos, creamos incremental y la enviamos
  65. snapshot ${ZONEPATH}
  66. # verificamos si estamos tratando con una bhyve/kvm y si es asi la respaldamos
  67. echo "verificamos filesystems (bhyve|kvm) adicionales..."
  68. if [ $BRAND = "kvm" ] || [ $BRAND = "bhyve" ] ; then
  69. FILESYSTEM=`vmadm get ${UUID} | json disks.0.zfs_filesystem | tr -d '\n'`
  70. snapshot ${FILESYSTEM}
  71. fi
  72. # verificamos si tenemos datasets adicionales y los enviamos
  73. echo "verificamos datasets adicionales..."
  74. DATASET=`vmadm get ${UUID} | json datasets.0 | tr -d '\n'`
  75. if [ -n "${DATASET}" ]; then
  76. snapshot ${DATASET}
  77. fi
  78. # exportamos configuracion
  79. echo "exportamos configuracion..."
  80. zonecfg -z ${UUID} export > $CFG/${UUID}.cfg
  81. $SCP $CFG/${UUID}.cfg $SERVER:$CFG/${UUID}.cfg
  82. # destino
  83. echo "enviamos config a destino..."
  84. $SSH $SERVER zonecfg -z ${UUID} < $CFG/${UUID}.cfg
  85. $SSH $SERVER zoneadm -z ${UUID} attach
  86. $SSH $SERVER zoneadm -z ${UUID} halt
  87. # reestablecemos el alias que usa vmadm
  88. $SSH $SERVER vmadm update ${UUID} alias=${ALIAS}
  89. vmadm update ${UUID} alias=${ALIAS}
  90. # detenemos la zona en local
  91. zoneadm -z ${UUID} halt
  92. # iniciamos la zona en remoto
  93. $SSH $SERVER zoneadm -z ${UUID} boot
  94. # TODO:
  95. # - puede haber mas de un FILESYSTEM en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno de ellos
  96. # - puede haber mas de un DATASET en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno