我一直在使用puppet来部署基础架构,而我所做的大部分工作都是针对Web 2.0公司,他们正在为Web应用程序进行大量的testing驱动开发。 有没有人在这里使用testing驱动的方法来开发他们的服务器configuration? 你用什么工具来做到这一点? 你的testing有多深?
我不认为你可以使用testing驱动开发 。 但是你当然可以尝试在新的服务器上进行unit testing 。
基本上,您需要部署服务器,以testing模式启动服务,然后从另一台服务器(或一系列服务器)对服务运行testing。 最后把它们投入生产。
也许使用python脚本连接到数据库,网页和ssh服务。 然后返回一个通过/失败。 对你来说是一个好的开始。
或者,您可以将其推广到一个监控解决scheme,如Zenoss,Nagios或Munin。 然后你可以在部署期间进行testing。 并在生产过程中监控。
我认为约瑟夫·克恩(Joseph Kern)正处于正确的轨道上。 典型的TDD周期是:编写一个失败的新testing,然后更新系统,使所有现有的testing通过。 这将很容易适应Nagios:添加失败的检查,configuration服务器,重新运行所有检查。 想想看,有时候我完成了这个。
如果你想得到真正的核心,你一定要编写脚本来检查服务器configuration的每个相关方面。 像Nagios这样的监控系统可能与其中一些监控系统不相关(例如,您可能不会“监控”您的操作系统版本),但没有理由不能混合匹配。
虽然我还没有用傀儡清单来做TDD,但是我们确实有一个相当不错的循环来防止没有testing的情况下进行生产的变化。 我们有两个傀儡大师,一个是我们的生产傀儡大师,另一个是我们的发展傀儡大师。 我们使用Puppet的“环境”来设置以下内容:
我们的应用程序开发人员在虚拟机上工作,从开发Puppetmaster的“testing”环境中获取Puppetconfiguration。 当我们开发木偶清单时,我们通常在开发过程中build立一个虚拟机作为testing客户端,并将其指向我们的个人开发环境。 一旦我们对清单感到满意,我们就会将它们推送到应用程序开发人员将在其虚拟机上进行更改的testing环境 – 他们通常会在出现问题时大声抱怨:-)
在我们的生产机器的一个有代表性的子集中,还有第二个木偶,以noop模式运行并指向testing环境。 我们用这个方法来捕捉清单上的潜在问题,然后才能投入生产。
一旦变更通过了,也就是说,他们不会破坏应用程序开发人员的机器,并且不会在生产机器的“noop”puppetd进程的日志中产生不合需要的输出,我们会将新的体现推向生产。 我们有一个回滚机制,所以我们可以恢复到早期版本。
我在一个正在迁移到TDD运营模式的环境中工作。 对于监控脚本这样的事情来说,这个工作非常好。 我们使用buildbot来设置testing环境并运行testing。 在这种情况下,您从“遗留代码”的angular度来看待TDD。 在TDD中,“遗留代码”是没有testing的现有代码。 所以第一次testing不会失败,它们定义了正确的(或预期的)操作。
对于许多configuration作业,第一步是testingconfiguration是否可以被服务parsing。 许多服务提供一些设施来做到这一点。 Nagios有预检模式,cfagent没有行为,apache,sudo,bind,还有很多其他的都有类似的function。 这基本上是一个运行的configuration。
一个例子是,如果你使用apache和不同的configuration文件的不同部分,你可以testing的部分,以及使用不同的httpd.conf文件来包装它们在testing机上运行。 然后,您可以testingtesting机器上的networking服务器在那里提供正确的结果。
你沿着每一步都遵循着同样的基本模式。 写一个testing,使testing通过,重构你所做的工作。 如上所述,当遵循该path时,testing可能不会总是以接受的TDD方式失败。
里克
我相信下面的链接可能是有趣的
cucumber-nagios – 这个项目可以让你把你的Cucumber套件变成Nagios插件,并带有SSH,DNS,Ping,AMQP和通用“执行命令”任务types的步骤定义
http://auxesis.github.com/cucumber-nagios/
http://www.slideshare.net/auxesis/behaviour-driven-monitoring-with-cucumbernagios-2444224
http://agilesysadmin.net/cucumber-nagios
在Puppet / Python方面还有一些努力http://www.devco.net/archives/2010/03/27/infrastructure_testing_with_mcollective_and_cucumber.php