Scripts to automating daily tasks http://gitea.open6hosting.com/Open6Hosting/smartos-bin
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

91 rinda
2.5 KiB

  1. #!/usr/bin/bash
  2. if [ "$#" -ne 2 ]; then
  3. echo "Illegal number of parameters"
  4. echo "Usage: $0 {UUID} {DESTINYNODE}"
  5. exit 1
  6. fi
  7. UUID=$1
  8. NODODESTINO=$2
  9. KEYFILE="/usbkey/ssh/id_rsa"
  10. DESTINYPORT="2221"
  11. SSH="ssh -i $KEYFILE -p $DESTINYPORT"
  12. SCP="scp -P $DESTINYPORT -i $KEYFILE"
  13. CFG="/zones/tools/cfg"
  14. BRAND=`/usr/sbin/vmadm get ${UUID} | json brand | tr -d '\n'`
  15. ZONEPATH=`vmadm get ${UUID} | json zonepath | tr -d '\n' | sed 's/\///'`
  16. # chequeamos la existencia del archivo llave
  17. if [ ! -f $KEYFILE ]; then
  18. echo "ssh $KEYFILE inexistent!"
  19. echo "Create it please"
  20. exit 1
  21. fi
  22. snapshot()
  23. {
  24. zfs snapshot $1@`date +%Y%m%d`
  25. zfs send $1@`date +%Y%m%d` | $SSH $NODODESTINO zfs receive $1
  26. zfs snapshot $1@`date +%Y%m%d`.incremental
  27. zfs send -i $1@`date +%Y%m%d` $1@`date +%Y%m%d`.incremental | $SSH $NODODESTINO zfs receive $1
  28. }
  29. # capturamos el alias que vmadm usa en base64 y que da problemas con el mitico zonecfg
  30. ALIAS=`vmadm get ${UUID} | json alias | tr -d '\n'`
  31. zonecfg -z ${UUID} "select attr name=alias; set value=temporal; end"
  32. # creamos snapshot, lo enviamos, creamos incremental y la enviamos
  33. snapshot ${ZONEPATH}
  34. # verificamos si estamos tratando con una kvm y si es asi la respaldamos
  35. echo "verificamos filesystems (kvm) adicionales..."
  36. if [ $BRAND = "kvm" ] || [ $BRAND = "bhyve" ] ; then
  37. FILESYSTEM=`vmadm get ${UUID} | json disks.0.zfs_filesystem | tr -d '\n'`
  38. snapshot ${FILESYSTEM}
  39. fi
  40. # verificamos si tenemos datasets adicionales y los enviamos
  41. echo "verificamos datasets adicionales..."
  42. DATASET=`vmadm get ${UUID} | json datasets.0 | tr -d '\n'`
  43. if [ -n "${DATASET}" ]; then
  44. snapshot ${DATASET}
  45. fi
  46. # exportamos configuracion
  47. echo "exportamos configuracion..."
  48. zonecfg -z ${UUID} export > $CFG/${UUID}.cfg
  49. $SCP $CFG/${UUID}.cfg $NODODESTINO:$CFG/${UUID}.cfg
  50. # destino
  51. echo "enviamos config a destino..."
  52. $SSH $NODODESTINO zonecfg -z ${UUID} < $CFG/${UUID}.cfg
  53. $SSH $NODODESTINO zoneadm -z ${UUID} attach
  54. $SSH $NODODESTINO zoneadm -z ${UUID} halt
  55. # reestablecemos el alias que usa vmadm
  56. $SSH $NODODESTINO vmadm update ${UUID} alias=${ALIAS}
  57. vmadm update ${UUID} alias=${ALIAS}
  58. # detenemos la zona en local
  59. zoneadm -z ${UUID} halt
  60. # iniciamos la zona en remoto
  61. $SSH $NODODESTINO zoneadm -z ${UUID} boot
  62. # TODO:
  63. # - puede haber mas de un FILESYSTEM en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno de ellos
  64. # - puede haber mas de un DATASET en la zona, necesitamos iterar por el array y lanzar la funcion snapshot sobre cada uno