Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
2.9 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 -u $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. # mostramos mac a exporar por VXLAN
  62. echo "mostramos mac e ips a exportar via VXLAN..."
  63. vmadm get ${UUID} | json nics.0.ips nics.0.mac
  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 y enviamos a destino..."
  80. zonecfg -z ${UUID} export | $SSH $SERVER "zonecfg -z ${UUID}"
  81. # montamos el dataset
  82. $SSH $SERVER zfs mount ${ZONEPATH}
  83. # instalamos
  84. $SSH $SERVER zoneadm -z ${UUID} attach
  85. # detenemos la zona en local
  86. zoneadm -z ${UUID} halt
  87. # actualizamos la zona en local para que no inicie
  88. vmadm update ${UUID} autoboot=false
  89. # iniciamos la zona en remoto
  90. $SSH $SERVER zoneadm -z ${UUID} boot
  91. # TODO:
  92. # - puede haber mas de un FILESYSTEM en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno de ellos
  93. # - puede haber mas de un DATASET en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno