前言
这些功能函数主要是完成上传、解压、校验、覆盖、备份等功能,代码可能写的不够优雅,但是肯定可用(我们正式环境也一样只是敏感信息剔除替换了)。
更新包上传
zip(文件)更新包上传,实现从本地上传zip包或从ftp服务器上直接拉取zip包的功能。
本地上传zip更新包
1 | #fname是通过html标签<input type="file" name="zipname" />获取的 |
校验文件
校验文件内容
1 | def md5sum(filename): |
校验更新包
zip包解压和校验,大致思路如下:
如果不是回滚包则做解压和校验的操作,如果是回滚包则只做解压的操作,
按照zip包提供的文件逐一对每个文件解压并记录校验值,将校验值存放到列表upmd5list[]
,
读取readme.txt文件中的校验值并将读取到的校验值存放到列表remd5list[]
,
将upmd5list[]
和remd5list[]
排序后比较,来判断实际校验值与提供的校验值是否相等。
zip包的文件采用的是相对全路径
1 | #basedir是所有项目的根目录/opt/git/ |
文件更新和备份
文件替换并将被替换的原文件打包,大体思路如下:
用解压到temp目录的文件替换.work目录中的文件,没有文件就是拷贝了、没有目录就创建,
将被替换的文件按照相对全路径打包成update01.old.zip的zip包,可以回滚到update01更新前的状态,
打包文件存放在.back目录(.back、.work等目录就是将项目代码目录加上的后缀便于识别如:project1.work、project1.server、project.back目录等)
1 | def mkzip(basedir, zipname): |
文件回滚
回滚文件,大体思路如下:
将.back目录中的update.old.zip包中的备份文件替换.work目录中的同名文件或直接拷贝
例如update01.old.zip包只能回滚到update01更新包之前的状态。
1 | def backzip(basedir, zipname): |
更新提交
提交下发更新文件,其中自定义的saltAPI类下篇专门介绍。
1 | #slsfile是salt服务器上的sls文件 |