clean_host.sh 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/bash
  2. set -e
  3. HOST=$1
  4. if [ -z "$HOST" ]; then
  5. echo "Usage: $0 <host_id_or_name>"
  6. exit 1
  7. fi
  8. error_exit() {
  9. echo "Error: $1"
  10. exit 1
  11. }
  12. HOSTID=$(climc host-show $HOST | grep -w " id " | awk '{print $4}')
  13. HOSTNAME=$(climc host-show $HOST | grep -w " name " | awk '{print $4}')
  14. if [ -z "$HOSTNAME" ]; then
  15. error_exit "Cannot find host $HOST"
  16. fi
  17. if [ -z "$HOSTID" ]; then
  18. error_exit "Cannot find host $HOST"
  19. fi
  20. echo "Ready to purge host $HOSTNAME($HOSTID)..."
  21. echo "1. Disable $HOSTNAME($HOSTID)"
  22. if ! climc host-disable $HOSTID > /dev/null; then
  23. error_exit "Fail to disable $HOST"
  24. fi
  25. echo "2. Clean servers on $HOSTNAME($HOSTID)"
  26. for i in $(climc server-list --host $HOSTID --admin --limit 2048 --system | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' | awk '{print $2}')
  27. do
  28. climc server-update --delete enable $i > /dev/null
  29. climc server-purge $i > /dev/null
  30. done
  31. for i in $(climc server-list --host $HOSTID --admin --limit 2048 --pending-delete --system | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' | awk '{print $2}')
  32. do
  33. climc server-purge $i > /dev/null
  34. done
  35. for i in $(climc server-list --admin --limit 2048 --system --filter "backup_host_id.equals($HOSTID)" | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' | awk '{print $2}')
  36. do
  37. climc server-delete-backup $i > /dev/null
  38. done
  39. echo "3. Clean disks on $HOSTNAME($HOSTID)"
  40. for storageid in $(climc host-storage-list --host $HOSTID --show-emulated | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' | awk '{print $4}')
  41. do
  42. STORAGENAME=$(climc storage-show $storageid | grep -w " name " | awk '{print $4}')
  43. STORAGE_TYPE=$(climc storage-show $storageid | grep -w " storage_type " | awk '{print $4}')
  44. if [ "$STORAGE_TYPE" == "local" ]; then
  45. for diskid in $(climc disk-list --admin --system --details --search $storageid --limit 2048 | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' | awk '{print $2}')
  46. do
  47. climc disk-purge $diskid > /dev/null
  48. done
  49. for diskid in $(climc disk-list --admin --system --details --search $storageid --pending-delete --limit 2048 | egrep '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' | awk '{print $2}')
  50. do
  51. climc disk-purge $diskid > /dev/null
  52. done
  53. fi
  54. done
  55. echo "4. Remove host $HOSTNAME($HOSTID)"
  56. BAREMETAL=$(climc host-show $HOSTID | grep -w " is_baremetal " | awk '{print $4}')
  57. HOSTTYPE=$(climc host-show $HOSTID | grep -w " host_type " | awk '{print $4}')
  58. if [ "$BAREMETAL" == "true" ] && [ "$HOSTTYPE" != "baremetal" ]; then
  59. climc host-update --host-type baremetal $HOSTID > /dev/null
  60. fi
  61. climc host-delete $HOSTID > /dev/null
  62. echo "DONE."