混动工程自动化脚本
【摘要】
#!/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)