compass-core/install/install_func.sh
Jerry Zhao 4bb0d0a14c add service status check after openstack cluster is deployed
check service status after openstack cluster deployment is complete
to have a basic peace of mind.
will add tempest tests later.
also update openstack logs archive rule to use latest variable.
fix fastest_url to follow http redirects.
pin python-daemon version to 1.6.1 because 2.0 breaks.

Change-Id: I0830138381f99e128fd4dfc72f146dd16530d72b
Partial-bug: #1393182
2015-01-12 00:43:05 -08:00

272 lines
6.9 KiB
Bash
Executable File

#!/bin/bash
#
fastesturl()
{
shortest=99999
fastest_url=""
good_code=[200,206]
while [ $1 ]; do
url=$1
result=($(curl -L --max-time 20 -o /dev/null --header "Range: bytes=0-20000" -s -w "%{http_code} %{time_total}" $url))
if [[ "$?" == "0" ]]; then
code=${result[0]}
time=${result[1]}
if [[ ${good_code[*]} =~ $code ]]; then
if [ $(echo "$shortest > $time" | bc) -eq 1 ]; then
shortest=$time
fastest_url=$url
fi
fi
else
echo "ignore failed url $url" >&2
fi
shift
done
if [[ -z $fastest_url ]]; then
exit 1
fi
echo "$fastest_url"
}
copy2dir()
{
repo=$1
destdir=$2
git_project=$3
git_branch=master
if [ -n "$4" ]; then
git_branch=$4
fi
echo "copy $repo branch $git_branch to $destdir"
if [[ "$repo" =~ (git|http|https|ftp):// ]]; then
if [[ -d $destdir || -L $destdir ]]; then
cd $destdir
git status &> /dev/null
if [ $? -ne 0 ]; then
echo "$destdir is not git repo"
cd -
rm -rf $destdir
else
echo "$destdir is git repo"
cd -
fi
fi
if [[ -d $destdir || -L $destdir ]]; then
echo "$destdir exists"
cd $destdir
git remote set-url origin $repo
git remote update
if [ $? -ne 0 ]; then
echo "failed to git remote update $repo in $destdir"
cd -
exit 1
else
echo "git remote update $repo in $destdir succeeded"
fi
git reset --hard
git clean -x -f
git checkout $git_branch
git reset --hard remotes/origin/$git_branch
git clean -x -f -d -q
cd -
else
echo "create $destdir"
mkdir -p $destdir
git clone $repo $destdir -b $git_branch
if [ $? -ne 0 ]; then
echo "failed to git clone $repo $destdir"
exit 1
else
echo "git clone $repo $destdir suceeded"
fi
fi
cd $destdir
if [[ -z $ZUUL_PROJECT ]]; then
echo "ZUUL_PROJECT is not set"
elif [[ -z $ZUUL_BRANCH ]]; then
echo "ZUUL_BRANCH is not set"
elif [[ -z $ZUUL_REF ]]; then
echo "ZUUL_REF is not set"
elif [[ "$ZUUL_PROJECT" != "$git_project" ]]; then
echo "ZUUL_PROJECT $ZUUL_PROJECT is not equal to git_project $git_project"
elif [[ "$ZUUL_BRANCH" != "$git_branch" ]]; then
echo "ZUUL_BRANCH $ZUUL_BRANCH is not equal git_branch $git_branch"
else
git_repo=$ZUUL_URL/$ZUUL_PROJECT
git_ref=$ZUUL_REF
git reset --hard remotes/origin/$git_branch
git fetch $git_repo $git_ref
if [ $? -ne 0 ]; then
echo "failed to git fetch $git_repo $git_ref"
cd -
exit 1
fi
git merge FETCH_HEAD
if [ $? -ne 0 ]; then
echo "failed to git merge $git_ref"
cd -
exit 1
fi
git clean -x -f
fi
cd -
else
sudo rm -rf $destdir
sudo cp -rf $repo $destdir
if [ $? -ne 0 ]; then
echo "failed to copy $repo to $destdir"
exit 1
else
echo "copy $repo to $destdir succeeded"
fi
fi
if [[ ! -d $destdir && ! -L $destdir ]]; then
echo "$destdir does not exist"
exit 1
else
echo "$destdir is ready"
fi
}
# TODO(xicheng): Please add comments to ths function. e.g, arg list
download()
{
#download params: <download url> [<package name>] [<action after package downloaded>]
force=0
urls=()
package=""
options=()
echo "download $@"
while [ $# -gt 0 ]; do
case "$1" in
-f | --force)
force=1
shift 1
;;
-u | --url):
url=$2
echo "url: $url"
if [ -z "$url" ]; then
echo "url param is empty: $url"
exit 1
fi
urls=(${urls[@]} $url)
shift 2
;;
-p | --package):
package=$2
echo "package: $package"
if [ -z "$package" ]; then
echo "package param is empty: $package"
exit 1
fi
shift 2
;;
-*)
echo "Unknown options: $1"
shift 1
;;
*)
options+=($1)
shift 1
;;
esac
done
set ${options[@]}
if [ ${#urls[@]} -eq 0 ]; then
urls+=($1)
shift 1
fi
if [ -z "$package" ]; then
url=${urls[0]}
package=${1:-$(basename $url)}
shift 1
fi
echo "download options: $@"
action=${1:-""}
downloaded=0
if [[ "$force" == "0" || "$force" == "false" ]]; then
if [[ -f /tmp/${package} || -L /tmp/${package} ]]; then
echo "$package already exists"
downloaded=1
fi
fi
if [ ${#urls[@]} -eq 1 ]; then
url=${urls[0]}
else
echo "download $package from fastest urls ${url[@]}"
url=`fastesturl ${urls[@]}`
if [[ "$?" != "0" ]]; then
echo "failed to get fastest url from ${urls[@]}"
exit 1
fi
fi
if [[ "$url" =~ (http|https|ftp):// ]]; then
if [[ "$downloaded" == "0" ]]; then
echo "downloading $url to /tmp/${package}"
if [[ -f /tmp/${package} || -L /tmp/${package} ]]; then
curl -f -L -z /tmp/${package} -o /tmp/${package}.tmp $url
else
curl -f -L -o /tmp/${package}.tmp $url
fi
if [[ "$?" != "0" ]]; then
echo "failed to download $package"
exit 1
else
echo "successfully download $package"
if [[ -f /tmp/${package}.tmp || -L /tmp/${package}.tmp ]]; then
mv -f /tmp/${package}.tmp /tmp/${package}
fi
fi
fi
else
echo "copy $url to /tmp/${package}"
cp -rf $url /tmp/${package}
fi
if [[ ! -f /tmp/${package} && ! -L /tmp/${package} ]]; then
echo "/tmp/$package is not created"
exit 1
fi
if [[ -z "$action" ]]; then
echo "download $package is done"
return
else
echo "execute $action after downloading $package"
fi
if [[ "$action" == "install" ]]; then
echo "install /tmp/$package"
sudo rpm -Uvh /tmp/$package
if [[ "$?" != "0" ]]; then
echo "failed to install $package"
exit 1
else
echo "$package is installed"
fi
elif [[ "$action" == "copy" ]]; then
destdir=$2
echo "copy /tmp/$package to $destdir"
sudo cp /tmp/$package $destdir
if [[ "$?" != "0" ]]; then
echo "failed to copy $package to $destdir"
exit 1
else
echo "$package is copied to $destdir"
fi
elif [[ "$action" == "unzip" ]]; then
destdir=$2
echo "unzip /tmp/$package to $destdir"
sudo tar -C $destdir -xzvf /tmp/$package
if [[ "$?" != "0" ]]; then
echo "failed to unzip $package to $destdir"
exit 1
else
echo "$package is unziped to $destdir"
fi
else
echo "unknown action $action"
exit 1
fi
}