2012-04-03 04:50:05 -07:00

147 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2012 Citrix Systems, Inc. Licensed under the
# Apache License, Version 2.0 (the "License"); you may not use this
# file except in compliance with the License. Citrix Systems, Inc.
# reserves all rights not expressly granted by the License.
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Automatically generated by addcopyright.py at 04/03/2012
# $Id: rundomrpre.sh 10427 2010-07-09 03:30:48Z edison $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/vm/hypervisor/kvm/rundomrpre.sh $
set -x
pubKey="/root/.ssh/id_rsa.pub.cloud"
mntpath() {
local vmname=$1
if [ ! -d /mnt/$vmname ]
then
mkdir -p /mnt/$vmname
fi
echo "/mnt/$vmname"
}
mount_raw_disk() {
local vmname=$1
local datadisk=$2
local path=$(mntpath $vmname)
if [ ! -f $datadisk -a ! -b $datadisk ]
then
printf "$datadisk doesn't exist" >&2
return 2
fi
retry=10
while [ $retry -gt 0 ]
do
if [ -b $datadisk ]; then
mount $datadisk $path &>/dev/null
ret=$?
else
mount $datadisk $path -o loop &>/dev/null
ret=$?
fi
sleep 10
if [ $ret -gt 0 ]
then
sleep 5
else
break
fi
retry=$(($retry-1))
done
return 0
}
umount_raw_disk() {
local vmname=$1
local datadisk=$2
local path=$(mntpath $vmname)
retry=10
sync
while [ $retry -gt 0 ]
do
umount $path &>/dev/null
if [ $? -gt 0 ]
then
sleep 5
else
rm -rf $path
break
fi
retry=$(($retry-1))
done
return $?
}
patch_all() {
local vmname=$1
local cmdline=$2
local datadisk=$3
local path=$(mntpath $vmname)
if [ -f $pubKey ]
then
cp $pubKey $path/authorized_keys
fi
echo $cmdline > $path/cmdline
sed -i "s/%/\ /g" $path/cmdline
return 0
}
lflag=
dflag=
while getopts 't:v:i:m:e:E:a:A:g:l:n:d:b:B:p:I:N:Mx:X:' OPTION
do
case $OPTION in
l) lflag=1
vmname="$OPTARG"
;;
t) tflag=1
vmtype="$OPTARG"
;;
d) dflag=1
rootdisk="$OPTARG"
;;
p) pflag=1
cmdline="$OPTARG"
;;
*) ;;
esac
done
if [ "$lflag$tflag$dflag" != "111" ]
then
printf "Error: No enough parameter\n" >&2
exit 1
fi
if [ "$vmtype" = "all" ]
then
mount_raw_disk $vmname $rootdisk
if [ $? -gt 0 ]
then
printf "Failed to mount $rootdisk"
exit $?
fi
patch_all $vmname $cmdline $rootdisk
umount_raw_disk $vmname $rootdisk
exit $?
fi
exit $?