浅析测试环境远端Agent工作模式(下)

一、概述

转转服务器侧的环境维护程序,简单可以理解为agent+cmd工作模式。Agent承上的任务是完成与平台远程命令和调度的交互,启下的任务是完成参数处理和对注册的命令执行具体的维护脚本。Cmd是完成在服务器上具体的操作,并对执行的过程、结果进行控制、标记。

CMD = script+module+config+util+console 五个主要的模块组成。每个模块具体功能介绍如下:

1、script模块是环境操作的核心部分,包括同步、部署、初试化、回收、授权、监控、删除、调度和依赖更新等脚本,目前有18个。

2、module模块是环境操作的通用性的功能插件,包括替换、检查、callback等。

3、config模块是基础配置、常量模块。

4、util工具模块,包括shell、ftp、falcon、nginx、http、mail等功能和模块操作的封装。

5、console模块是python版的linux环境的工程命令菜单工具。

整体模块目录树和其他模块说明

二、script设计

传统的环境维护脚本存在一些常见的问题:

多用shell/bash编写,初期方便,但是后期维护成本高,代码不易读。

随着业务变化和增长,逻辑条件越来越复杂,修改成本变大不友好。

问题定位困难,不太方便添加执行记录日志,调试模式简陋。

变更修改难度大,上下游逻辑和变量难以控制,耦合严重。

从语言选型上,果断放弃之前的shell选用python。

代码量行数变少,更直观。

更新和维护速度变快。

执行速度变快,过程可以追溯和记录。

重点介绍一下环境维护脚本做的几处优化设计:

1、执行列表拼装

线性脚本最大的问题是,流程一旦固化,执行的逻辑和顺序改动起来就有具体的成本。为了解决这个问题,设计将script执行的步骤列表化,在列表中可以随时删除、添加或者改变执行顺序。不需要强行加入逻辑或者注释、删除代码。

执行步骤列表

在todolist中具有明显界限的逻辑步骤被分割开,函数化,然后根据需要随时可以进行拼装、拆卸。在CMD基类中对执行方法使用了Python反射机制,对列表步骤进行执行。

反射执行列表

2、终止回调

脚本的执行经常会出现一个比较大的问题,异常中断。由已知或者未知的情况都可能导致。而异常中断会造成问题定位困难,下游操作无法执行,状态夯死。

比如举个例子,一个集群名称的不规范(意向不到),导致代码没考虑到这种情况,直接报出语言的exception,程序异常中断。但是这种异常中断是非预期的,导致后续必要的操作没有执行,比如标记结果,比如输出执行日志等。

(1)、通过try去捕获代码块异常。范围有限。

(2)、使用python的atexit库,实现结束回调,不管是正常亦是不正常的结束,都必须要需要做某些事情,执行更为优雅。

完成回调的注册

三、module设计

在环境维护的脚本中,会遇到很多的公共和通用化的服务组件,本身和维护脚本逻辑不耦合,只是完成特定的功能。

这类功能又区别于简单工具类,因为会随着实际业务的需要不断的进行扩展。想到就是插件化实现。目前应用到三个地方:

1、用户身份检测策略

2、替换策略

3、检查策略

每个都实现了单独的插件类。

(1)、插件引用的地方:

构造插件对象

(2)、配置项的策略级别

通过不同的策略级别保证,一旦命中策略,后续采取的处理结果是什么样的

(3)、具体的替换策略

根据目录递归文件,名中策略逐行替换

四、util设计

常用服务和工具的命令操作我们统一放在util模块中实现。

比如nginx服务的操作,会对nginx的安装、配置文件替换、服务状态检测、进程获取、启动、停止、重启、授权等操作进行封装。方便在维护脚本中调用。

这里给大家举两个当时util工具设计的例子。

1、工具安装的交互操作问题实现,通过except脚本辅助完成。

不是所有事情python都能搞掂,但是python可以和其他脚本语言做很好的粘合。

2、实时日志的实现

通过日志偏移量实现

获取日志文件的当前目录,轮询日志的偏移量,tail

偏移量日志,获取增量的日志文件内容。

五、console设计

集成式的服务端侧可视化的命令菜单工具,Shell终端简化版的类PC页面工具。PS:研发同学非常喜欢

1、不脱离服务器完成环境操作,效率很高

2、交互式的操作方式,执行更友好

3、支持翻页查询等功能,可以随意在各种操作中进行切换。

比如在环境中执行【zz】命令,就换唤起控制台完成执行的操作。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180418G0IAKJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券