混动工程自动化脚本

举报
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\...

  
  1. #!/bin/bash
  2. #************输出可执行任务选项************************
  3. echo -e "\033[31m\033[1m"
  4. echo ""
  5. echo "ScriptName:ChaosBlade"
  6. echo "ScriptVersion: V1.0"
  7. echo ""
  8. echo -e "\033[31m\033[0m"
  9. # 开启选项高亮显示
  10. echo -e "\033[40;32m\033[1m"
  11. echo " *** 请输入要执行任务的代号 ***"
  12. echo " *** 0.退出程序 ***"
  13. echo " *** 1.安装chaosblade ***"
  14. echo " *** 2.模拟CPU负载 ***"
  15. echo " *** 3.模拟IO负载 ***"
  16. echo " *** 4.模拟端口不通 ***"
  17. echo " *** 5.模拟丢包 ***"
  18. echo " *** 6.模拟网络延时 ***"
  19. echo " *** 22.恢复CPU负载 ***"
  20. echo " *** 33.恢复IO负载 ***"
  21. echo " *** 44.恢复端口 ***"
  22. echo " *** 55.恢复丢包 ***"
  23. echo " *** 66.恢复网络延时 ***"
  24. echo " *** 99.查看任务代号 ***"
  25. echo -e "\033[40;32m\033[0m"
  26. out=99
  27. while ((out != 0))
  28. do
  29. #*************Model层***************************
  30. #开启高亮显示
  31. echo -e "\033[40;35m\033[1m"
  32. read -p "Please select the task execution code:" id
  33. function action()
  34. {
  35. isNumber $id
  36. number=$?
  37. if [ $number -eq 1 ];then
  38. task_id $id
  39. echo "Successful submission code is $id"
  40. else
  41. echo -e "\033[31m\033[1m"
  42. echo "ERROR:请输入正确的任务代号!!"
  43. echo -e "\033[31m\033[0m"
  44. fi
  45. }
  46. #关闭高亮显示
  47. echo -e "\033[40;35m\033[0m"
  48. SOURCE=$(cd $(dirname $0); pwd)
  49. TARADDRESS=/usr/local/src/
  50. SRCADDRESS=/usr/local/chaosblade
  51. EXECUTEADDRESS=/usr/local/chaosblade/chaosblade-0.2.0
  52. # 校验用户输入的ID是否正确
  53. function task_id()
  54. {
  55. case $1 in
  56. 0) echo '您选择了退出程序-->程序已正常退出-->期待您的下次使用☺'
  57. out=$id
  58. exitcb $id
  59. ;;
  60. 1) echo '您选择了安装chaosblade'
  61. install
  62. ;;
  63. 2) echo '您选择了模拟CPU负载'
  64. cpu
  65. ;;
  66. 3) echo '您选择了模拟IO负载'
  67. read -p "请输入模拟IO的size、count、timeout数值[多参数用空格隔开]:" size count timeout
  68. io $size $count $timeout
  69. ;;
  70. 4) echo '您选择了模拟端口不通'
  71. read -p "请输入需要模拟的端口号:" ports
  72. port $ports
  73. ;;
  74. 5) echo '您选择了模拟模拟丢包'
  75. read -p "请输入模拟的网卡名称interface、丢包percent数值[多参数用空格隔开]:" network lostpk
  76. lostpackage $network $lostpk
  77. ;;
  78. 6) echo '您选择了模拟网络延时'
  79. read -p "请输入网卡名称interface、网络延时时间time(ms)[多参数用空格隔开]:" network delay
  80. netWorkDelay $network $delay
  81. ;;
  82. 22) echo '您选择了恢复CPU负载'
  83. cpuRecovery
  84. ;;
  85. 33) echo '您选择了恢复IO负载'
  86. ioRecovery
  87. ;;
  88. 44) echo '您选择了恢复端口不通'
  89. portRecovery
  90. ;;
  91. 55) echo '您选择了恢复模拟丢包'
  92. lostpackageRecovery
  93. ;;
  94. 66) echo '您选择了恢复网络延时'
  95. netWorkDelayRecovery
  96. ;;
  97. 99) echo '您选择了查看任务代号'
  98. taskOption
  99. ;;
  100. *) echo 'erro:请输入任务代号1~7'
  101. ;;
  102. esac
  103. }
  104. #*************Control层***************************
  105. # 安装chaosblade 函数
  106. function install()
  107. {
  108. chaosPath
  109. existTarFile
  110. existTarfilecode=$?
  111. executionFile
  112. executefilecode=$?
  113. if [ $existTarfilecode -eq 1 ]; then
  114. echoGreen
  115. echo "successful:服务已存在无需构建,可以直接使用哦"
  116. echoDess
  117. else
  118. #TODO 将这个下载文件改成本地移动文件到目标位置,与下载文件相比速度更快更稳定。
  119. cp $SOURCE/source/chaosblade-0.2.0.linux-amd64.tar.gz $TARADDRESS
  120. echoGreen
  121. echo "-------------------------------------------"
  122. echo "服务构建中时间可能较长您可以稍作休息啦^_^"
  123. state
  124. echo ""
  125. echo "-------------------------------------------"
  126. echo "服务构建成功,正在启动中>--<"
  127. echoDess
  128. fi
  129. if [ $executefilecode -eq 1 ]; then
  130. echoGreen
  131. echo "-------------------------------------------"
  132. echo "File Ready Go of Chaosblade 服务启动成功!!"
  133. echoDess
  134. else
  135. cd $TARADDRESS
  136. cp chaosblade-0.2.0.linux-amd64.tar.gz ../chaosblade/
  137. cd $SRCADDRESS
  138. tar zxvf chaosblade-0.2.0.linux-amd64.tar.gz
  139. rm -rf chaosblade-0.2.0.linux-amd64.tar.gz
  140. echoGreen
  141. echo ""
  142. echo "------------------------------------------"
  143. echo "File Ready Go of Chaosblade 服务启动成功!!"
  144. echoGreen
  145. fi
  146. }
  147. #------------------------------
  148. # 模拟CPU负载函数
  149. function cpu()
  150. {
  151. cd $EXECUTEADDRESS
  152. json=`./blade create cpu fullload`
  153. awkjson $json
  154. }
  155. # 恢复CPU负载函数
  156. function cpuRecovery()
  157. {
  158. cd $EXECUTEADDRESS
  159. ./blade destroy $recoverycode
  160. }
  161. #------------------------------
  162. # 模拟IO负载函数
  163. function io()
  164. {
  165. cd $EXECUTEADDRESS
  166. #TODO 执行命令的参数改为接收用户输入的参数
  167. json=`./blade create disk burn --write --read --size $1 --count $2 --timeout $3`
  168. awkjson $json
  169. }
  170. # 恢复IO负载函数
  171. function ioRecovery()
  172. {
  173. cd $EXECUTEADDRESS
  174. ./blade destroy $recoverycode
  175. }
  176. #------------------------------
  177. #模拟端口不通
  178. function port()
  179. {
  180. cd $EXECUTEADDRESS
  181. json=`./blade create network drop --local-port $1`
  182. awkjson $json
  183. }
  184. #恢复端口不通
  185. function portRecovery()
  186. {
  187. cd $EXECUTEADDRESS
  188. ./blade destroy $recoverycode
  189. }
  190. #------------------------------
  191. #模拟丢包
  192. function lostpackage()
  193. {
  194. cd $EXECUTEADDRESS
  195. json=`./blade create network loss --interface $1 --percent $2`
  196. awkjson $json
  197. }
  198. #恢复丢包
  199. function lostpackageRecovery()
  200. {
  201. cd $EXECUTEADDRESS
  202. ./blade destroy $recoverycode
  203. }
  204. #------------------------------
  205. #模拟网络延迟
  206. function netWorkDelay()
  207. {
  208. cd $EXECUTEADDRESS
  209. json=`./blade create network delay --interface $1 --time $2`
  210. awkjson $json
  211. }
  212. #恢复网络延时
  213. function netWorkDelayRecovery()
  214. {
  215. cd $EXECUTEADDRESS
  216. ./blade destroy $recoverycode
  217. }
  218. #*************工具类util***********************************
  219. #判断本地src目录是否存在ChaoBlade的tar包
  220. function existTarFile()
  221. {
  222. file="chaosblade-0.2.0.linux-amd64.tar.gz"
  223. cd $TARADDRESS
  224. # -f 参数判断 $file 是否存在
  225. if [ -f "$file" ]; then
  226. return 1
  227. else
  228. return 0
  229. fi
  230. }
  231. #判断本地chaosblade目录下是否存在ChaoBlade可执行文件
  232. function executionFile()
  233. {
  234. file="chaosblade-0.2.0"
  235. cd $SRCADDRESS
  236. if [ -d "$file" ]; then
  237. return 1
  238. else
  239. return 0
  240. fi
  241. }
  242. #判断本笃local目录下chaosblade文件夹是否存在
  243. function chaosPath()
  244. {
  245. cd /usr/local
  246. chaofolder="chaosblade"
  247. if [ ! -d "$chaofolder" ]; then
  248. mkdir "$chaofolder"
  249. fi
  250. }
  251. #echo输出添加效果
  252. function echoGreen()
  253. {
  254. echo -e "\033[40;32m\033[1m"
  255. }
  256. #echo去掉效果
  257. function echoDess()
  258. {
  259. echo -e "\033[40;32m\033[0m"
  260. }
  261. #时间计时器工具实现等待安装程序进度效果
  262. function state()
  263. {
  264. #TODO 这个循环没有起作用
  265. for i in {1..100}
  266. do
  267. sleep 0.1s
  268. echo -ne "当前安装进度######################——> $i \r"
  269. done
  270. }
  271. #awk处理json数据获取指定的数据
  272. function awkjson()
  273. {
  274. #需要处理的数据
  275. jsoncode=$1
  276. echo $jsoncode
  277. recoverycode=`echo $jsoncode | awk -F'"' '{print $(NF-1)}'|awk -F "}" '{print $1}'`
  278. }
  279. #退出程序
  280. function exitcb()
  281. {
  282. if [ $1 -eq 0 ]; then
  283. break
  284. fi
  285. }
  286. #任务列表项显示
  287. function taskOption()
  288. {
  289. # 开启选项高亮显示
  290. echo -e "\033[40;32m\033[1m"
  291. echo " *** 请输入要执行任务的代号 ***"
  292. echo " *** 0.退出程序 ***"
  293. echo " *** 1.安装chaosblade ***"
  294. echo " *** 2.模拟CPU负载 ***"
  295. echo " *** 3.模拟IO负载 ***"
  296. echo " *** 4.模拟端口不通 ***"
  297. echo " *** 5.模拟丢包 ***"
  298. echo " *** 6.模拟网络延时 ***"
  299. echo " *** 22.恢复CPU负载 ***"
  300. echo " *** 33.恢复IO负载 ***"
  301. echo " *** 44.恢复端口 ***"
  302. echo " *** 55.恢复丢包 ***"
  303. echo " *** 66.恢复网络延时 ***"
  304. echo " *** 99.查看任务代号 ***"
  305. }
  306. #判断输入的是否为纯数字
  307. function isNumber()
  308. {
  309. if [ -n "$(echo $1| sed -n "/^[0-9]\+$/p")" ];then
  310. return 1
  311. else
  312. return 0
  313. fi
  314. }
  315. #*************init层*********************************
  316. action
  317. 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个月内不可修改。

举报
请填写举报理由
0/200