Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

109 líneas
2.7 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. HOSTNAME=$OPTARG
  15. ;;
  16. *)
  17. usage
  18. ;;
  19. esac
  20. done
  21. shift $((OPTIND-1))
  22. if [ -z "${UUID}" ] || [ -h "${HOSTNAME}" ]; 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. snapshot()
  39. {
  40. zfs snapshot $1@`date +%Y%m%d`
  41. zfs send $1@`date +%Y%m%d` | $SSH $HOSTNAME zfs receive $1
  42. zfs snapshot $1@`date +%Y%m%d`.incremental
  43. zfs send -i $1@`date +%Y%m%d` $1@`date +%Y%m%d`.incremental | $SSH $HOSTNAME zfs receive $1
  44. }
  45. # capturamos el alias que vmadm usa en base64 y que da problemas con el mitico zonecfg
  46. ALIAS=`vmadm get ${UUID} | json alias | tr -d '\n'`
  47. zonecfg -z ${UUID} "select attr name=alias; set value=temporal; end"
  48. # creamos snapshot, lo enviamos, creamos incremental y la enviamos
  49. snapshot ${ZONEPATH}
  50. # verificamos si estamos tratando con una kvm y si es asi la respaldamos
  51. echo "verificamos filesystems (kvm) adicionales..."
  52. if [ $BRAND = "kvm" ] || [ $BRAND = "bhyve" ] ; then
  53. FILESYSTEM=`vmadm get ${UUID} | json disks.0.zfs_filesystem | tr -d '\n'`
  54. snapshot ${FILESYSTEM}
  55. fi
  56. # verificamos si tenemos datasets adicionales y los enviamos
  57. echo "verificamos datasets adicionales..."
  58. DATASET=`vmadm get ${UUID} | json datasets.0 | tr -d '\n'`
  59. if [ -n "${DATASET}" ]; then
  60. snapshot ${DATASET}
  61. fi
  62. # exportamos configuracion
  63. echo "exportamos configuracion..."
  64. zonecfg -z ${UUID} export > $CFG/${UUID}.cfg
  65. $SCP $CFG/${UUID}.cfg $HOSTNAME:$CFG/${UUID}.cfg
  66. # destino
  67. echo "enviamos config a destino..."
  68. $SSH $HOSTNAME zonecfg -z ${UUID} < $CFG/${UUID}.cfg
  69. $SSH $HOSTNAME zoneadm -z ${UUID} attach
  70. $SSH $HOSTNAME zoneadm -z ${UUID} halt
  71. # reestablecemos el alias que usa vmadm
  72. $SSH $HOSTNAME vmadm update ${UUID} alias=${ALIAS}
  73. vmadm update ${UUID} alias=${ALIAS}
  74. # detenemos la zona en local
  75. zoneadm -z ${UUID} halt
  76. # iniciamos la zona en remoto
  77. $SSH $HOSTNAME zoneadm -z ${UUID} boot
  78. # TODO:
  79. # - puede haber mas de un FILESYSTEM en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno de ellos
  80. # - puede haber mas de un DATASET en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno