zoukankan      html  css  js  c++  java
  • CloudStack 注册模板脚本分析

    注册系统虚拟机模板

    /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt

    内容如下:


    usage() {
      printf "or " >&2
    }

    failed() {
      echo "Installation failed"
      exit $1
    }
    #set -x
    mflag=
    fflag=
    ext="vhd"
    templateId=
    hyper=
    msKey=password
    DISKSPACE=5120000  #free disk space required in kilobytes
    dbHost=
    dbUser=
    dbPassword=
    jasypt='/usr/share/cloudstack-common/lib/jasypt-1.9.0.jar'
    while getopts 'm:h:f:u:Ft:e:s:o:r:d' 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"
                    ;;
      ?)    usage
                    failed 2
                    ;;
      esac
    done

      usage
      failed 2
    if [ -z "$hyper" ]
    then
      usage

    if [ ! -d $mntpoint ]
    then
      echo "mount point $mntpoint doesn't exist "
      failed 4
    fi

    if [[ "$fflag" == "1" && ! -f $tmpltimg ]]
    then
      echo "template image file $tmpltimg doesn't exist"
      failed 3
    fi


    if [ "$oflag" != 1 ]; then
    fi
    if [ "$rflag" != 1 ]; then
    fi

    if [ -f /etc/cloudstack/management/db.properties ]; then
        if [ "$encType" == "file" ]
        then
            msKey=$(cat /etc/cloudstack/management/key)
            if [ ! "$sflag" == "1" ]
            then
                echo "Encryption type web requires mgmt secret key using -s option"
                failed 9
            fi
        fi
    fi

            if [ ! $encPassword == "" ]
                    if [ ! $dbPassword ]
                    then
                    fi
            fi
    else
        if [ "$dflag" != 1 ]; then
        fi
    fi

    if [ "$templateId" == "" ]
    then
       if [ "$hyper" == "kvm" ]
       then
          ext="qcow2"
       elif [ "$hyper" == "xenserver" ]
       then
          ext="vhd"
       elif [ "$hyper" == "vmware" ]
       then
          ext="ova"
       else
          usage
          failed 2
       fi
    fi

    if [ ! $templateId ]
    then
            echo "Unable to get template Id from database"
            failed 8
    fi

    localfile=$(uuidgen).$ext

    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? "
      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
    if [ -f $destdir/template.properties ]
    then
      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? "
      failed 4
    fi

    destcap=$(df -P $destdir | awk '{print $4}' | tail -1 )

    localcap=$(df -P $(dirname $0) | awk '{print $4}' | tail -1 )

    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? "
        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"

    执行方式

    Usage: cloud-install-sys-tmplt: -m <secondary storage mount point> -f <system vm template file> [-h <hypervisor name: kvm|vmware|xenserver> ] [ -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>] [-d <Database password. Fllowed by nothing if the password is empty>]
    or
    cloud-install-sys-tmplt: -m <secondary storage mount point> -u <http url for system vm template> [-h <hypervisor name: kvm|vmware|xenserver> ] [ -s <mgmt server secret key>]

    /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /opt/secondary/ -f kvm.qcow2.bz2  -h kvm -s password

  • 相关阅读:
    语文成语的积累
    关于翻译
    关于文常
    语文小说
    语文 散文阅读
    矩佬的博客
    字词
    语文病句
    地理
    寒假某cg的数学卷子....
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3431898.html
Copyright © 2011-2022 走看看