#!/bin/bash # Program: # Create PXE PV VM # Author: # Jazz, Rock {jazz, rock}@nchc.org.tw # Version: # 1.0 # History: # 2010/08/27 Rock First release (1.0) # [Source] source /opt/drbl-virt/conf/drbl-virt.conf source $Work_Path/functions_drbl_virt #source ./functions_drbl_PXE_PV-VM_create # [Declation] # = 1. Varibales declation = vm_name="" vm_cpu="1" vm_ram="128" #vm_host="" vm_mac="" vm_dir="/home/domains" # = 2. Functions declation = Usage(){ echo "Usage: drbl_PXE_PV-VM_create.sh options" echo "Options: " echo "-v|--vm vm name" echo "-c|--cpu cpu number (default: 1)" echo "-r|--ram ram size(M) (default: 128)" echo "Examples: " echo "drbl_PXE_PV-VM_create.sh options -v drbl131 -c 2 -r 512" } # [Main] check_root # = 1. Parse parameters = if [ $# -eq 0 ]; then Usage && exit fi while [ $# -gt 0 ]; do case "$1" in -v|--vm) shift if [ -z "$(echo $1 |grep ^-.)" ]; then if [ -n "$(echo $1)" ]; then vm_name=$1 else echo "-v vm_name is null" Usage && exit 2 fi shift fi ;; -c|--cpu) shift if [ -z "$(echo $1 |grep ^-.)" ]; then if [ -n "$(echo $1)" ]; then vm_cpu=$1 else echo "-c cpu_value is null" Usage && exit 2 fi shift fi ;; -r|--ram) shift if [ -z "$(echo $1 |grep ^-.)" ]; then if [ -n "$(echo $1)" ]; then vm_ram=$1 else echo "-r ram_value is null" Usage && exit 2 fi shift fi ;; # -h|--host) # shift # if [ -z "$(echo $1 |grep ^-.)" ]; then # if [ -n "$(echo $1)" ]; then # vm_host=$1 # else # echo "-h host_value is null" # Usage && exit 2 # fi # shift # fi # ;; -*) echo "$0 $1 invalid option" >&2 echo "" Usage >&2 exit 2 ;; *) Usage >&2 exit 2 ;; esac done # check null value [ -z $vm_name ] && echo "[Error] no VM name" && Usage && exit 2 # check vm_name exist vm_IP_files=$(ls $Work_Home/etc/IP_VM_eth*) vm_exist_jude="no" for vm_IP_file in $vm_IP_files do if [ -n "$(grep "$vm_name" $vm_IP_file)" ]; then vm_exist_jude="yes" fi done if [ $vm_exist_jude == "no" ]; then echo "[Error] This VM name isn't DRBL PXE VM" exit 2 fi # = 2. Get VM MAC address = #IP_MAC_files=$(ls $Work_Home/etc | grep 'macadr-VM-eth[0-9]*.txt') IP_VM_files=$(ls $Work_Home/etc | grep 'IP_VM_eth[0-9]*') IP_VM_right_file="" IP_VM_right_line="" IP_VM_eth="" for IP_VM_file in $IP_VM_files do IP_VM_line=$(cat -n $Work_Home/etc/$IP_VM_file | grep "$vm_name" | awk '{print $1}') if [ -n $IP_VM_line ]; then IP_VM_right_file=$IP_VM_file IP_VM_right_line=$IP_VM_line fi done # if no value, exit and check IP_VM_ethX if [ -z $IP_VM_right_file ]; then echo "" echo "Error: don't fine ${vm_name}'s IP address" echo "Please check $Wokr_Home/etc/" exit 2 fi # start get mac address IP_VM_eth=$(echo $IP_VM_right_file | sed 's/IP_VM_//g' ) vm_mac=$(cat $Work_Home/etc/macadr-VM-${IP_VM_eth}.txt | sed -n "${IP_VM_right_line}p") # = 3. Generate PXE PV-VM configuration = if [ ! -e $vm_dir ]; then mkdir $vm_dir fi vm_cfg=${vm_dir}/${vm_name}_PXE_PV-VM.cfg if [ -e $vm_cfg ]; then rm $vm_cfg fi # start to generate echo "kernel = '/home/domains/vmlinuz-pxe'" > $vm_cfg echo "ramdisk = '/home/domains/initrd-pxe.img'" >> $vm_cfg echo "memory = '$vm_ram'" >> $vm_cfg echo "name = '$vm_name'" >> $vm_cfg echo "vcpus = '$vm_cpu'" >> $vm_cfg echo "dhcp = 'dhcp'" >> $vm_cfg echo "vif = [ 'mac=$vm_mac']" >> $vm_cfg echo "on_poweroff = 'destroy'" >> $vm_cfg echo "on_reboot = 'restart'" >> $vm_cfg echo "on_crash = 'restart'" >> $vm_cfg echo "vfb = [ 'type=vnc,vnclisten=0.0.0.0,vncunused=1' ]" >> $vm_cfg echo "extra = 'console=hvc0 xencons=tty'" >> $vm_cfg