混动工程自动化脚本

举报
brucexiaogui 发表于 2021/11/25 23:16:50 2021/11/25
【摘要】 #!/bin/bash #************输出可执行任务选项************************echo -e "\033[31m\033[1m"echo ""echo "ScriptName:ChaosBlade"echo "ScriptVersion: V1.0"echo ""echo -e "\033[31m\...

      #!/bin/bash
      #************输出可执行任务选项************************
      echo -e "\033[31m\033[1m"
      echo ""
      echo "ScriptName:ChaosBlade"
      echo "ScriptVersion: V1.0"
      echo ""
      echo -e "\033[31m\033[0m"
      # 开启选项高亮显示
      echo -e "\033[40;32m\033[1m"
      echo " *** 请输入要执行任务的代号 ***"
      echo " *** 0.退出程序 ***"
      echo " *** 1.安装chaosblade ***"
      echo " *** 2.模拟CPU负载 ***"
      echo " *** 3.模拟IO负载 ***"
      echo " *** 4.模拟端口不通 ***"
      echo " *** 5.模拟丢包 ***"
      echo " *** 6.模拟网络延时 ***"
      echo " *** 22.恢复CPU负载 ***"
      echo " *** 33.恢复IO负载 ***"
      echo " *** 44.恢复端口 ***"
      echo " *** 55.恢复丢包 ***"
      echo " *** 66.恢复网络延时 ***"
      echo " *** 99.查看任务代号 ***"
      echo -e "\033[40;32m\033[0m"
      out=99
      while ((out != 0))
      do
      #*************Model层***************************
      #开启高亮显示
      echo -e "\033[40;35m\033[1m"
      read -p "Please select the task execution code:" id
      function action()
      {
        isNumber $id
        number=$?
       if [ $number -eq 1 ];then
          task_id $id
         echo "Successful submission code is $id"
       else
         echo -e "\033[31m\033[1m"
         echo "ERROR:请输入正确的任务代号!!"
         echo -e "\033[31m\033[0m"
       fi
      }
      #关闭高亮显示
      echo -e "\033[40;35m\033[0m"
      SOURCE=$(cd $(dirname $0); pwd)
      TARADDRESS=/usr/local/src/
      SRCADDRESS=/usr/local/chaosblade
      EXECUTEADDRESS=/usr/local/chaosblade/chaosblade-0.2.0
      # 校验用户输入的ID是否正确
      function task_id()
      {
      case $1 in
         0)  echo '您选择了退出程序-->程序已正常退出-->期待您的下次使用☺'
              out=$id
              exitcb $id
          ;;
         1)  echo '您选择了安装chaosblade'
             install
          ;;
         2)  echo '您选择了模拟CPU负载'
             cpu
          ;;
         3)  echo '您选择了模拟IO负载'
            read -p "请输入模拟IO的size、count、timeout数值[多参数用空格隔开]:" size count timeout
             io $size $count $timeout
          ;;
         4)  echo '您选择了模拟端口不通'
            read -p "请输入需要模拟的端口号:" ports
             port $ports
          ;;
         5)  echo '您选择了模拟模拟丢包'
            read -p "请输入模拟的网卡名称interface、丢包percent数值[多参数用空格隔开]:" network lostpk
             lostpackage $network $lostpk
          ;;
         6)  echo '您选择了模拟网络延时'
            read -p "请输入网卡名称interface、网络延时时间time(ms)[多参数用空格隔开]:" network delay
             netWorkDelay $network $delay
          ;;
         22)  echo '您选择了恢复CPU负载'
             cpuRecovery
          ;;
         33)  echo '您选择了恢复IO负载'
             ioRecovery
          ;;
         44)  echo '您选择了恢复端口不通'
             portRecovery
          ;;
         55)  echo '您选择了恢复模拟丢包'
             lostpackageRecovery
          ;;
         66)  echo '您选择了恢复网络延时'
             netWorkDelayRecovery
          ;;
         99)  echo '您选择了查看任务代号'
              taskOption
          ;;
         *)  echo 'erro:请输入任务代号1~7'
          ;;
      esac
      }
      #*************Control层***************************
      # 安装chaosblade 函数
      function install()
      {
        chaosPath
        existTarFile
        existTarfilecode=$?
        executionFile
        executefilecode=$?
       if [ $existTarfilecode -eq 1 ]; then
           echoGreen
          echo "successful:服务已存在无需构建,可以直接使用哦"
           echoDess
       else
       #TODO 将这个下载文件改成本地移动文件到目标位置,与下载文件相比速度更快更稳定。
          cp $SOURCE/source/chaosblade-0.2.0.linux-amd64.tar.gz $TARADDRESS
           echoGreen
          echo "-------------------------------------------"
          echo "服务构建中时间可能较长您可以稍作休息啦^_^"
           state
          echo ""
          echo "-------------------------------------------"
          echo "服务构建成功,正在启动中>--<"
           echoDess
       fi
       if [ $executefilecode -eq 1 ]; then
           echoGreen
          echo "-------------------------------------------"
          echo "File Ready Go of Chaosblade 服务启动成功!!"
           echoDess
       else
          cd $TARADDRESS
          cp chaosblade-0.2.0.linux-amd64.tar.gz ../chaosblade/
          cd $SRCADDRESS
           tar zxvf chaosblade-0.2.0.linux-amd64.tar.gz
          rm -rf chaosblade-0.2.0.linux-amd64.tar.gz
           echoGreen
          echo ""
          echo "------------------------------------------"
          echo "File Ready Go of Chaosblade 服务启动成功!!"
           echoGreen
       fi
      }
      #------------------------------
      # 模拟CPU负载函数
      function cpu()
      {
       cd $EXECUTEADDRESS
        json=`./blade  create cpu fullload`
        awkjson $json
      }
      # 恢复CPU负载函数
      function cpuRecovery()
      {
       cd $EXECUTEADDRESS
        ./blade destroy $recoverycode
      }
      #------------------------------
      # 模拟IO负载函数
      function io()
      {
       cd $EXECUTEADDRESS
      #TODO 执行命令的参数改为接收用户输入的参数
        json=`./blade create disk burn --write --read  --size $1 --count $2  --timeout $3`
        awkjson $json
      }
      # 恢复IO负载函数
      function ioRecovery()
      {
       cd $EXECUTEADDRESS
        ./blade destroy $recoverycode
      }
      #------------------------------
      #模拟端口不通
      function port()
      {
       cd $EXECUTEADDRESS
        json=`./blade create network drop --local-port $1`
        awkjson $json
      }
      #恢复端口不通
      function portRecovery()
      {
       cd $EXECUTEADDRESS
        ./blade destroy $recoverycode
      }
      #------------------------------
      #模拟丢包
      function lostpackage()
      {
       cd $EXECUTEADDRESS
        json=`./blade create network loss --interface $1 --percent $2`
        awkjson $json
      }
      #恢复丢包
      function lostpackageRecovery()
      {
       cd $EXECUTEADDRESS
        ./blade destroy $recoverycode
      }
      #------------------------------
      #模拟网络延迟
      function netWorkDelay()
      {
       cd $EXECUTEADDRESS
        json=`./blade create network delay --interface $1 --time $2`
        awkjson $json
      }
      #恢复网络延时
      function netWorkDelayRecovery()
      {
       cd $EXECUTEADDRESS
        ./blade destroy $recoverycode
      }
      #*************工具类util***********************************
      #判断本地src目录是否存在ChaoBlade的tar包
      function existTarFile()
      {
        file="chaosblade-0.2.0.linux-amd64.tar.gz"
       cd $TARADDRESS
       # -f 参数判断 $file 是否存在
       if [ -f "$file" ]; then
         return 1
       else
         return 0
       fi
      }
      #判断本地chaosblade目录下是否存在ChaoBlade可执行文件
      function executionFile()
      {
        file="chaosblade-0.2.0"
       cd $SRCADDRESS
       if [ -d "$file" ]; then
          return 1
       else
          return 0
       fi
      }
      #判断本笃local目录下chaosblade文件夹是否存在
      function chaosPath()
      {
       cd  /usr/local
        chaofolder="chaosblade"
       if [ ! -d "$chaofolder" ]; then
       mkdir "$chaofolder"
      fi
      }
      #echo输出添加效果
      function echoGreen()
      {
       echo -e "\033[40;32m\033[1m"
      }
      #echo去掉效果
      function echoDess()
      {
       echo -e "\033[40;32m\033[0m"
      }
      #时间计时器工具实现等待安装程序进度效果
      function state()
      {
      #TODO 这个循环没有起作用
       for i in {1..100}
      do
         sleep 0.1s
         echo -ne "当前安装进度######################——> $i \r"
      done
      }
      #awk处理json数据获取指定的数据
      function awkjson()
      {
       #需要处理的数据
        jsoncode=$1
       echo $jsoncode
        recoverycode=`echo $jsoncode | awk -F'"' '{print $(NF-1)}'|awk -F "}" '{print $1}'`
      }
      #退出程序
      function exitcb()
      {
      if [ $1 -eq 0 ]; then
       break
      fi
      }
      #任务列表项显示
      function taskOption()
      {
          # 开启选项高亮显示
      echo -e "\033[40;32m\033[1m"
      echo " *** 请输入要执行任务的代号 ***"
      echo " *** 0.退出程序 ***"
      echo " *** 1.安装chaosblade ***"
      echo " *** 2.模拟CPU负载 ***"
      echo " *** 3.模拟IO负载 ***"
      echo " *** 4.模拟端口不通 ***"
      echo " *** 5.模拟丢包 ***"
      echo " *** 6.模拟网络延时 ***"
      echo " *** 22.恢复CPU负载 ***"
      echo " *** 33.恢复IO负载 ***"
      echo " *** 44.恢复端口 ***"
      echo " *** 55.恢复丢包 ***"
      echo " *** 66.恢复网络延时 ***"
      echo " *** 99.查看任务代号 ***"
      }
      #判断输入的是否为纯数字
      function isNumber()
      {
       if [ -n "$(echo $1| sed -n "/^[0-9]\+$/p")" ];then
       return 1
      else
       return 0
      fi
      }
      #*************init层*********************************
      action
      done
  
 

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/100083126

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。