mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
This reverts commit 6946f41784423788e71441255e67c2b9b1c3633d because it adds regression to deployment and testing. Testing against VMware, KVM and XenServer confirm failure to deploy an environment where systemvms don't come online.
301 lines
9.9 KiB
Bash
Executable File
301 lines
9.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# $Id: installrtng.sh 11251 2010-07-23 23:40:44Z abhishek $ $HeadURL: svn://svn.lab.vmops.com/repos/vmdev/java/scripts/storage/secondary/installrtng.sh $
|
|
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with 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.
|
|
|
|
|
|
usage() {
|
|
printf "Usage: %s: -m <secondary storage mount point> -f <system vm template file> [-h <hypervisor name: kvm|vmware|xenserver|hyperv|ovm3> ] [ -s <mgmt server secret key, if you specified any when running cloudstack-setup-database, default is password>][-u <Url to system vm template>] [-F <clean up system templates of specified hypervisor>] [-e <Template suffix, e.g vhd, ova, qcow2>] [-o <Database server hostname or ip, e.g localhost>] [-r <Database user name, e.g root>] [-p <mysql database port>] [-d <Database password. Fllowed by nothing if the password is empty>]\n" $(basename $0) >&2
|
|
printf "or\n" >&2
|
|
printf "%s: -m <secondary storage mount point> -u <http url for system vm template> [-h <hypervisor name: kvm|vmware|xenserver|hyperv|ovm3> ] [ -s <mgmt server secret key>]\n" $(basename $0) >&2
|
|
}
|
|
|
|
failed() {
|
|
echo "Installation failed"
|
|
exit $1
|
|
}
|
|
#set -x
|
|
mflag=
|
|
fflag=
|
|
ext="vhd"
|
|
templateId=
|
|
hyper=
|
|
msKey=password
|
|
DISKSPACE=2120000 #free disk space required in kilobytes
|
|
dbHost="localhost"
|
|
dbUser="root"
|
|
dbPassword=
|
|
dbPort=3306
|
|
jasypt='/usr/share/cloudstack-common/lib/jasypt-1.9.2.jar'
|
|
while getopts 'm:h:f:u:Ft:e:s:o:r:d:p:'# OPTION
|
|
do
|
|
case $OPTION in
|
|
m) mflag=1
|
|
mntpoint="$OPTARG"
|
|
;;
|
|
f) fflag=1
|
|
tmpltimg="$OPTARG"
|
|
;;
|
|
u) uflag=1
|
|
url="$OPTARG"
|
|
;;
|
|
F) Fflag=1
|
|
;;
|
|
t) templateId="$OPTARG"
|
|
;;
|
|
e) ext="$OPTARG"
|
|
;;
|
|
h) hyper="$OPTARG"
|
|
;;
|
|
s) sflag=1
|
|
msKey="$OPTARG"
|
|
;;
|
|
o) oflag=1
|
|
dbHost="$OPTARG"
|
|
;;
|
|
r) rflag=1
|
|
dbUser="$OPTARG"
|
|
;;
|
|
d) dflag=1
|
|
dbPassword="$OPTARG"
|
|
;;
|
|
p) pflag=1
|
|
dbPort="$OPTARG"
|
|
;;
|
|
?) usage
|
|
failed 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ "$mflag$fflag" != "11" && "$mflag$uflag" != "11" ]]
|
|
then
|
|
usage
|
|
failed 2
|
|
fi
|
|
|
|
if [ -z "$hyper" ]
|
|
then
|
|
usage
|
|
failed 2
|
|
fi
|
|
|
|
if [ ! -d $mntpoint ]
|
|
then
|
|
echo "mount point $mntpoint doesn't exist\n"
|
|
failed 4
|
|
fi
|
|
|
|
if [[ "$fflag" == "1" && ! -f $tmpltimg ]]
|
|
then
|
|
echo "template image file $tmpltimg doesn't exist"
|
|
failed 3
|
|
fi
|
|
|
|
if [ -f /etc/cloudstack/management/db.properties ]
|
|
then
|
|
if [ "$pflag" != 1 ]
|
|
then
|
|
dbPort=$(sed '/^\#/d' /etc/cloudstack/management/db.properties | grep 'db.cloud.port' | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
fi
|
|
|
|
if [ "$oflag" != 1 ]
|
|
then
|
|
dbHost=$(sed '/^\#/d' /etc/cloudstack/management/db.properties | grep 'db.cloud.host' | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
fi
|
|
|
|
if [ "$rflag" != 1 ]
|
|
then
|
|
dbUser=$(sed '/^\#/d' /etc/cloudstack/management/db.properties | grep 'db.cloud.username' | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
fi
|
|
|
|
encType=$(sed '/^\#/d' /etc/cloudstack/management/db.properties | grep 'db.cloud.encryption.type' | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
if [ "$encType" == "file" ]
|
|
then
|
|
msKey=$(cat /etc/cloudstack/management/key)
|
|
elif [ "$encType" == "web" ]
|
|
then
|
|
if [ ! "$sflag" == "1" ]
|
|
then
|
|
echo "Encryption type web requires mgmt secret key using -s option"
|
|
failed 9
|
|
fi
|
|
fi
|
|
|
|
if [[ "$encType" == "file" || "$encType" == "web" ]]
|
|
then
|
|
encPassword=$(sed '/^\#/d' /etc/cloudstack/management/db.properties | grep 'db.cloud.password' | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'i | sed 's/^ENC(\(.*\))/\1/')
|
|
if [ ! $encPassword == "" ]
|
|
then
|
|
dbPassword=(`java -classpath $jasypt org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI decrypt.sh input=$encPassword password=$msKey verbose=false`)
|
|
if [ ! $dbPassword ]
|
|
then
|
|
echo "Failed to decrypt DB password from db.properties"
|
|
failed 9
|
|
fi
|
|
fi
|
|
else
|
|
if [ "$dflag" != 1 ]
|
|
then
|
|
dbPassword=$(sed '/^\#/d' /etc/cloudstack/management/db.properties | grep 'db.cloud.password' | tail -n 1 | cut -d "=" -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'i )
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ "$templateId" == "" ]
|
|
then
|
|
if [ "$hyper" == "kvm" ]
|
|
then
|
|
ext="qcow2"
|
|
templateId=(`mysql -P $dbPort -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"KVM\" and removed is null"`)
|
|
elif [ "$hyper" == "xenserver" ]
|
|
then
|
|
ext="vhd"
|
|
templateId=(`mysql -P $dbPort -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"XenServer\" and removed is null"`)
|
|
elif [ "$hyper" == "vmware" ]
|
|
then
|
|
ext="ova"
|
|
templateId=(`mysql -P $dbPort -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"VMware\" and removed is null"`)
|
|
elif [ "$hyper" == "lxc" ]
|
|
then
|
|
ext="qcow2"
|
|
templateId=(`mysql -P $dbPort -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"LXC\" and removed is null"`)
|
|
elif [ "$hyper" == "hyperv" ]
|
|
then
|
|
ext="vhd"
|
|
templateId=(`mysql -P $dbPort -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"Hyperv\" and removed is null"`)
|
|
elif [ "$hyper" == "ovm3" ]
|
|
then
|
|
ext="raw"
|
|
templateId=(`mysql -P $dbPort -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "select max(id) from cloud.vm_template where type = \"SYSTEM\" and hypervisor_type = \"Ovm3\" and removed is null"`)
|
|
else
|
|
usage
|
|
failed 2
|
|
fi
|
|
fi
|
|
|
|
if [ ! $templateId ]
|
|
then
|
|
echo "Unable to get template Id from database"
|
|
failed 8
|
|
fi
|
|
|
|
_uuid=$(uuidgen)
|
|
localfile=$_uuid.$ext
|
|
|
|
_res=(`mysql -P $dbPort -h $dbHost --user=$dbUser --password=$dbPassword --skip-column-names -U cloud -e "update cloud.vm_template set uuid=\"$_uuid\", url=\"$url\" where id=\"$templateId\""`)
|
|
|
|
mntpoint=`echo "$mntpoint" | sed 's|/*$||'`
|
|
|
|
destdir=$mntpoint/template/tmpl/1/$templateId/
|
|
|
|
mkdir -p $destdir
|
|
if [ $? -ne 0 ]
|
|
then
|
|
printf "Failed to write to mount point $mntpoint -- is it mounted?\n"
|
|
failed 3
|
|
fi
|
|
|
|
if [ "$Fflag" == "1" ]
|
|
then
|
|
rm -rf $destdir/*
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "Failed to clean up template directory $destdir -- check permissions?"
|
|
failed 2
|
|
fi
|
|
fi
|
|
|
|
if [ -f $destdir/template.properties ]
|
|
then
|
|
echo "Data already exists at destination $destdir -- use -F to force cleanup of old template"
|
|
echo "IF YOU ARE ATTEMPTING AN UPGRADE, YOU MAY NEED TO SPECIFY A TEMPLATE ID USING THE -t FLAG"
|
|
failed 4
|
|
fi
|
|
|
|
destvhdfiles=$(find $destdir -name \*.$ext)
|
|
if [ "$destvhdfiles" != "" ]
|
|
then
|
|
echo "Data already exists at destination $destdir -- use -F to force cleanup of old template"
|
|
failed 5
|
|
fi
|
|
|
|
tmpfile=$(dirname $0)/$localfile
|
|
|
|
touch $tmpfile
|
|
if [ $? -ne 0 ]
|
|
then
|
|
printf "Failed to create temporary file in directory $(dirname $0) -- is it read-only or full?\n"
|
|
failed 4
|
|
fi
|
|
|
|
destcap=$(df -P $destdir | awk '{print $4}' | tail -1 )
|
|
[ $destcap -lt $DISKSPACE ] && echo "Insufficient free disk space for target folder $destdir: avail=${destcap}k req=${DISKSPACE}k" && failed 4
|
|
|
|
localcap=$(df -P $(dirname $0) | awk '{print $4}' | tail -1 )
|
|
[ $localcap -lt $DISKSPACE ] && echo "Insufficient free disk space for local temporary folder $(dirname $0): avail=${localcap}k req=${DISKSPACE}k" && failed 4
|
|
|
|
if [ "$uflag" == "1" ]
|
|
then
|
|
wget -O $tmpfile $url
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "Failed to fetch system vm template from $url"
|
|
failed 5
|
|
fi
|
|
fi
|
|
|
|
|
|
if [ "$fflag" == "1" ]
|
|
then
|
|
cp $tmpltimg $tmpfile
|
|
if [ $? -ne 0 ]
|
|
then
|
|
printf "Failed to create temporary file in directory $(dirname $0) -- is it read-only or full?\n"
|
|
failed 6
|
|
fi
|
|
fi
|
|
|
|
|
|
installrslt=$($(dirname $0)/createtmplt.sh -s 2 -d 'SystemVM Template' -n $localfile -t $destdir/ -f $tmpfile -u -v)
|
|
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "Failed to install system vm template $tmpltimg to $destdir: $installrslt"
|
|
failed 7
|
|
fi
|
|
|
|
if [ "$ext" == "ova" ]
|
|
then
|
|
tar xvf $destdir/$localfile -C $destdir &> /dev/null
|
|
fi
|
|
|
|
tmpltfile=$destdir/$localfile
|
|
tmpltsize=$(ls -l $tmpltfile| awk -F" " '{print $5}')
|
|
|
|
echo "$ext=true" >> $destdir/template.properties
|
|
echo "id=$templateId" >> $destdir/template.properties
|
|
echo "public=true" >> $destdir/template.properties
|
|
echo "$ext.filename=$localfile" >> $destdir/template.properties
|
|
echo "uniquename=routing-$templateId" >> $destdir/template.properties
|
|
echo "$ext.virtualsize=$tmpltsize" >> $destdir/template.properties
|
|
echo "virtualsize=$tmpltsize" >> $destdir/template.properties
|
|
echo "$ext.size=$tmpltsize" >> $destdir/template.properties
|
|
|
|
echo "Successfully installed system VM template $tmpltimg to $destdir"
|