运维咖啡吧

享受技术带来的乐趣,体验生活给予的感动

从一件小事说起我是如何思考与执行的

团队刚刚接手了另外一个部门的运维工作,与我们所有基础环境上云所不同的是他们还是传统IDC模式,维护了大量的物理服务器,最近新买了一批服务器需要上架,装系统、做RAID、初始化环境,原本是希望机房在装系统的同时就把RAID给搞定的,但机房那边表示他们只负责系统安装,RAID配置不负责,故事由此开始

由于前期跟机房不太顺畅的沟通加上本次机器较多处理起来非常繁琐,所以负责这个事情的小伙伴就跟我吐槽了一下

首先这个吐槽我是能理解的,由于新接手的项目且这个项目有点特殊,还未接入我们已经成熟的自动化的体系,对于这类工作还是需要人肉处理,处理起来不仅繁琐还枯燥无味,所以我想这个任务就别压在一个人的身上了,团队内都分担一下,就让小伙伴整理文档

小伙伴很快整理好了文档,不仅是快而且写的还很清晰,每一步操作都有具体的说明,阶段性的操作还会写成一个小脚本,简单贴一点示例如下

文档非常清晰,操作总共就只有4个步骤,分别是安装MegaCli工具->磁盘做RAID->格式化磁盘->挂载到目录,看到文档我就立刻想到一个脚本全部搞定,便开始准备脚本,解决了几个问题,简单罗列如下

操作第一步是上传MegaCli工具并安装,上传的这个操作就不太好做进脚本里,所以我就把工具包上传到了下载服务器,可以直接通过wget下载,这样脚本处理起来就方便了,但发现这些机器不通外网,只能内网访问,所以就上传到了其中一台机器上,然后临时开个http服务来提供下载,临时开http服务很简单,直接通过python的http模块一个命令就搞定

python 2.x版本开启http服务的命令是:

python -m SimpleHTTPServer

python 3.x版本开启http服务的命令是:

python -m http.server

解决了文件下载的问题,另外一个问题是在执行磁盘格式化命令mkfs.ext4时需要交互输入来确认,这种交互操作在脚本里是不能出现的,人工干预影响效率,这里我们可以通过管道来处理

yes | mkfs.ext4 /dev/sdb

解决了以上两个问题整个脚本就跑通了,但这并不代表结束,一个好的习惯是我们的脚本要能够把结果反馈给我们,能让我们清晰的知道本次执行究竟有没有达到理想的效果,既然这个脚本处理的是磁盘问题,那么我们就要知道这个脚本执行完成后所有的磁盘都是可以正常使用的,所以我在脚本的最后加上了磁盘写文件的测试

echo ops-coffee.cn > /data/test && rm -rf /data/test &&\
echo ok ||
echo fail

脚本写完测试通过,也丢到了临时下载服务器上,一个命令全搞定

wget https://ops-coffee.cn:8000/init.sh && /bin/bash init.sh

后记

刚刚接到伙伴反馈时,我觉得这个任务很简单,写个脚本跑下就完了,但考虑到自己好多年没处理过这个都忘记了,不确定是否真的一个脚本能全部搞定,所以并没有贸然的表达自己的想法,还是让小伙伴整理了文档,自己亲自实践了一下确实可行。我觉得做技术的还是要严谨一点,自己没有试验过不要太过武断,这是对别人也是对自己的尊重

这是一个很小的事情,处理起来并未花费太多的时间,但个人还是想把他给记录下来勉励自己,无论什么时候都要保持独立主动思考的能力。同时我觉得小伙伴没有快速找到高效的方法也不是能力的问题,小伙伴很优秀,很多时候就是没有处理过经验不足,本次解决了也算是经验的积累

最后看到小伙伴已经在主动推进这个项目做自动化的接入了,很欣慰