通过Shell、Python脚本管理KVM虚拟机

字体大小: 中小 标准 ->行高大小: 标准

一个想法:

1 python2.7

2 python的web框架 bottle

3 shell脚本管理kvm

组合在一起就可以了~

这段时间我会用bottle 简单的实现管理kvm 主机,开源出去的~ 性能烂的话,别怪我~

管理kvm主机完全可以在页面上完成,国外有个人用django写了这套程序,感觉还不错,只是稍复杂,bug有点多。。。。  个人觉得 自己开写一套简单的,python本身有kvm的库,大家要是觉得麻烦的话,也可以用os模块,调用virsh的命令来管理kvm主机,这完全是可行的~

https://www.webvirtmgr.net/docs/

上面是安装配置的教程

安装好需要的库之后,直接运行就好了

./manage.py runserver 10.96.60.61:8000

 

 

也可以利用这个小脚本,针对虚拟机开机,关机,重启~

用法:

  1. 查看虚拟机列表~
  2. # kvmctl.sh --list machine1
  3. machine2 machineN 开启虚拟机
  4. # kvmctl.sh machine2 startd Starting up 'machine2' ... (daemon mode) 虚拟机状态
  5. # kvmctl.sh --show MACHINE PID STIME TIME
  6. machine1 4856 Feb11 10:34:59 machine2 11155 Mar12 00:05:45 关闭虚拟机
  7. # kvmctl.sh machine1 stop Shutting down 'machine1' ...

 

Config file example: KVM_M=1G KVM_HDA=$BASEDIR/$MACHINE/root.qcow2 KVM_HDB=$BASEDIR/$MACHINE/swap.qcow2 KVM_HDC=$BASEDIR/.imgs/mysql.raw KVM_HDD=$BASEDIR/.imgs/tmp.qcow2 KVM_NET="nic,macaddr=52:54:00:00:02:52 -net tap" KVM_PIDFILE=/var/run/192.168.0.249.pid KVM_TCP_PORT=10000 KVM_MONITOR="tcp:127.0.0.1:${KVM_TCP_PORT},server,nowait"

KVM_EXTRA=

 

  1. #!/bin/bash BASEDIR="/var/local/kvm"
  2. KVM="/usr/bin/kvm" KVM_CONFIG="settings.cfg"
  3. do_help()
  4. { PROGRAM_NAME=`basename $0`
  5. echo "Usage:" echo "$PROGRAM_NAME machine (start|startd|stop|monitor|status|settings|edit)"
  6. echo "$PROGRAM_NAME (--help|--list|--show)" }
  7. if [ $# -eq 0 ]; then
  8. do_help exit 1
  9. fi
  10. if [ "$1" == "--help" ]; then do_help
  11. exit 0 fi
  12. if [ "$1" == "--list" ]; then
  13. ls -1 $BASEDIR exit 0
  14. fi
  15. if [ "$1" == "--show" ]; then ps -ef | awk -v format="%-19s %-7s %-7s %s\n" '\
  16. BEGIN { \ printf(format,"MACHINE", "PID", "STIME", "TIME") \
  17. } \ /kvm -name/&&!/awk/ { \
  18. printf(format, $10, $2, $5, $7) \ }'
  19. exit 0 fi
  20. MACHINE=$1
  21. MACHINEDIR=$BASEDIR/$MACHINE
  22. if [ ! -d $MACHINEDIR ]; then echo -e "Error. (Machine not found at $BASEDIR/)\n"
  23. do_help exit 1
  24. fi
  25. do_load_settings() {
  26. if [ -f "$MACHINEDIR/$KVM_CONFIG" ]; then source $MACHINEDIR/$KVM_CONFIG
  27. else echo -e "Error. ($MACHINEDIR/$KVM_CONFIG not found)\n"
  28. echo "Example $KVM_CONFIG:"
  29. echo 'KVM_M=512M' echo 'KVM_HDA=$BASEDIR/$MACHINE/root.qcow2'
  30. echo 'KVM_HDB=$BASEDIR/.imgs/swap.qcow2' echo 'KVM_HDC=$BASEDIR/.imgs/home.qcow2'
  31. echo 'KVM_HDD=' echo 'KVM_NET="nic,macaddr=52:54:00:00:02:53 -net tap"'
  32. echo 'KVM_TCP_PORT=10001' echo 'KVM_PIDFILE=/var/run/192.168.0.253.pid'
  33. echo 'KVM_MONITOR="tcp:127.0.0.1:${KVM_TCP_PORT},server,nowait"' echo 'KVM_EXTRA='
  34. exit 1
  35. fi }
  36. do_check_tcp_port()
  37. { if [ -z "$1" ]; then
  38. echo "Error. (KVM_TCP_PORT is not set)" exit 1
  39. fi }
  40. case "$2"in
  41. start|startd)
  42. do_load_settings
  43. PARAMS="-name $MACHINE"
  44. [ "$2" == "startd" ] \
  45. && PARAMS="$PARAMS -vnc none -daemonize" \ && MSG="(daemon mode)"
  46. [ -n "$KVM_M" ] && PARAMS="$PARAMS -m $KVM_M"
  47. [ -n "$KVM_HDA" ] && PARAMS="$PARAMS -hda $KVM_HDA" [ -n "$KVM_HDB" ] && PARAMS="$PARAMS -hdb $KVM_HDB"
  48. [ -n "$KVM_HDC" ] && PARAMS="$PARAMS -hdc $KVM_HDC" [ -n "$KVM_HDD" ] && PARAMS="$PARAMS -hdd $KVM_HDD"
  49. [ -n "$KVM_NET" ] && PARAMS="$PARAMS -net $KVM_NET" [ -n "$KVM_PIDFILE" ] && PARAMS="$PARAMS -pidfile $KVM_PIDFILE"
  50. [ -n "$KVM_MONITOR" ] && PARAMS="$PARAMS -monitor $KVM_MONITOR"
  51. [ -n "$KVM_EXTRA" ] && PARAMS="$PARAMS $KVM_EXTRA"
  52. echo "Starting up '$MACHINE' ... $MSG" $KVM $PARAMS
  53. [ $? -ne 0 ] \
  54. && echo "Error. (Couldn't run KVM)" ;;
  55. stop)
  56. do_load_settings
  57. do_check_tcp_port $KVM_TCP_PORT
  58. echo "Shutting down '$MACHINE' ..." echo "system_powerdown" | nc 127.0.0.1 $KVM_TCP_PORT &>/dev/null
  59. if [ $? -ne 0 ]; then
  60. echo "Error. (Couldn't connect. Is the machine up?)" exit 1
  61. fi
  62. ;;
  63. monitor)
  64. do_load_settings do_check_tcp_port $KVM_TCP_PORT
  65. echo "Starting Monitor for '$MACHINE'... (Ctrl+C to exit)"
  66. nc 127.0.0.1 $KVM_TCP_PORT
  67. ;;
  68. status)
  69. do_load_settings do_check_tcp_port $KVM_TCP_PORT
  70. INFO="info status\ninfo kvm\ninfo network"
  71. echo -e $INFO | nc -w 1127.0.0.1 $KVM_TCP_PORT \
  72. && echo ""
  73. if [ $? -ne 0 ]; then echo "Error. (Couldn't connect. Is the machine up?)"
  74. exit 1 fi
  75. ;;
  76. settings)
  77. do_load_settings
  78. cat $MACHINEDIR/$KVM_CONFIG
  79. ;;
  80. edit)
  81. if [ -z "$EDITOR" ]; then echo "Error. (EDITOR is not set)"
  82. exit 1 fi
  83. do_load_settings
  84. if [ -n "$KVM_PIDFILE" -a -f "$KVM_PIDFILE" ]; then
  85. echo -n "Warning! '$MACHINE' is running. Continue? (y/N) " read CONTINUE
  86. [ "$CONTINUE" != "y" -a "$CONTINUE" != "Y" ] \
  87. && exit 1
  88. fi
  89. $EDITOR $MACHINEDIR/$KVM_CONFIG
  90. ;;
  91. *) do_help
  92. exit 1 ;;
  93. esac
  94. exit 0

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/64195.html