我们有一组手工编写的Python脚本,用于验证生产环境/配置中的各种内容。
其中许多都是简单的XML检查(即验证此XML标记的值在此处等于该文件中的值)。其他可能是检查主机是否已启动,或者此应用程序的crontab启动时间是否在X的20分钟内,或者服务器上的日志文件是否包含某一行。
在每次生产推送之前自动执行检查。
脚本是强制性的。 E.g:
我想看看编写一个框架来以稍微更具声明性的方式进行这些验证 - 即不是定义服务器应该如何检查某些内容,而是应该能够说出<tag>value</tag> should equal foobar
- 并让框架处理如何。
我以为我们可以安排检查并将作业推到像Celery这样的队列上。
阻止我重新发明轮子 - 是否有任何现有项目已经做过这样的事情?
或者这里有人做过类似的事,或者能提出任何建议吗?
(我知道像Puppet或Chef这样的东西 - 甚至是盐栈 - 然而,这些是用于管理部署或实际推出配置。这些验证脚本更多是为了确保手动完成的配置更改是理智的,或者不要违反某些基本规则。)
干杯, 维克多
答案 0 :(得分:0)
在过去,我使用了类似于我建议的方法,以声明方式将补丁应用于数据。
每个声明性验证文件都是一个python-snippet,使用预定义的函数,变量等。每个检查都是一个python函数。运行验证是使用驱动程序脚本完成的,该脚本包含execfile
调用以运行检查文件。
E.g。你可以有一个验证文件,如:
tag_equals('value', 'foobar')
attribute_exists('value', 'value_attr')
你的驱动程序脚本基本上是:
def main():
for filename in sys.argv[1:]:
run_validation(filename)
def run_validation(filename):
# import all "built-in" names for validations
from mychecks import tag_equals, etc
execfile(filename, locals())
if __name__ == '__main__':
main()
优点:
execfile
xpath_equals
函数)for i in range(10):
tag_equals('address%d' % i, 'N/A')
为防止意外execfile
任意python文件,您应该添加一个检查,以便只运行execfile
文件中的行等于某些预定义的标题。