Auto Migrate Tool

最近需要测试NFV某个node的性能,所以需要Node ei-0单独在一个computer上,所以写了一个脚本:

function echo__blue()      { echo -e "\e[0;34;1m$1\e[0m";}
function echo__red()       { echo -e "\e[0;31;1m$1\e[0m";}
function echo__green()     { echo -e "\e[0;32;1m$1\e[0m";}
function echo__yellow()    { echo -e "\e[0;33;1m$1\e[0m";}

COMPUTER_LIST=`nova hypervisor-list | awk '{print $4}' | awk 'NR>2'`
UE_NODE_NAME=`nova list | grep ei-0 | awk '{print $4}'`
OPTIMAL_COMPUTER=''
INIT_USED=8.0
for COMPUTER in $COMPUTER_LIST
    do
        CPUS_USED=`nova hypervisor-show $COMPUTER | grep -i "vcpus_used" | awk '{print $4}' | head -1`
        echo__blue "$COMPUTER node's vcpus_used is :  $CPUS_USED"
        if [[ $(echo "$CPUS_USED == 0.0"|bc) = 1 ]];then
            echo__blue "Greate! $COMPUTER is a optimal computer."
            OPTIMAL_COMPUTER=$COMPUTER
            break
        elif [[ $(echo "$CPUS_USED > 0.0"|bc) = 1 ]] && [[ $(echo "$CPUS_USED < 8.0 "|bc) = 1 ]];then
            echo__green "Maybe $COMPUTER is a selectable computer."
            if [[ $(echo "$CPUS_USED < $INIT_USED"|bc) = 1 ]];then
                INIT_USED=$CPUS_USED
                OPTIMAL_COMPUTER=$COMPUTER
                echo__blue "Now OPTIMAL_COMPUTER is: $COMPUTER."
            fi
        elif [[ $(echo "$CPUS_USED >= 8.0"|bc) = 1 ]] && [[ $(echo "$CPUS_USED <= 13.0 "|bc) = 1 ]];then
            echo__red "Maybe $COMPUTER is not a good choice."
            INSTANCE_NUMBER=`nova hypervisor-servers compute-159 | awk '{print $4}' | awk 'NR>2' | awk '{if(length!=0) print $0}' | wc -l`
            USED_RATE=$(echo "$CPUS_USED / $INSTANCE_NUMBER" | bc)
            echo "===========USED_RATE: $USED_RATE============="
            if [[ $(echo "$USED_RATE < $INIT_USED"|bc) = 1 ]];then
                INIT_USED=$USED_RATE
                echo "===========INIT_USED: $INIT_USED============="
                OPTIMAL_COMPUTER=$COMPUTER
                echo__blue "Now OPTIMAL_COMPUTER is: $COMPUTER."
            else
                continue
            fi
        else
            echo__red "This computer node is full."
        fi
    done
echo "===========Finally the chosen computer is $OPTIMAL_COMPUTER.=============="
echo__green "==============Begin to migrate UE node to $OPTIMAL_COMPUTER.====================="
nova live-migration $UE_NODE_NAME $OPTIMAL_COMPUTER
UE_NODE_STATE=`nova list | grep ei-0 | awk '{print $10}'`
if [ "Running" != "$UE_NODE_STATE" ];then
    echo "Still migrating, please wait..."
    sleep 5
fi
echo__green "Live migration is successfully."  

shell不是经常使用,所以编写过程中才发现浮点数不能判断以及计算的问题,因此记录下,遇到问题可以这么写:

  • 通过bc

    bc是一种任意精度的计算语言,注意是一种语言,它提供了一些语法结构,比如条件判断、循环等,可以说是很强大的,其中一个用途就是用来进行运算以及进制转换。我们经常使用的expr只支持整数运算,对于浮点运算就无能为力了,而且expr不能进行指数运算,而都有bc这些都不再话下。

    $(echo "$CPUS_USED > 0.0"|bc) = 1
    
  • 通过dc
    可能你曾经知道有此命令,也可能你还不知道。dc相比与bc要复杂,但是简单操作还是比较简单。简单的说dc是一直压栈操作,和bc一样,它也可以交互使用,或者与echo一起配合使用,它也支持浮点运算。dc后续再作研究。

  • expr
    expr竟然也可以?先保存下来,下次再试试:

    if [ `expr $a \> $b` -eq 0 ];then
    echo $b is bigger
    else
    echo $a is bigger
    fi
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值