如何在Ansible设置中测试配置和配置?


33

正在尝试尝试在我们的Ansible设置中建立一些弹性,以处理配置和配置。

我了解在事物的配置方面进行测试的几种方法,但是我想知道如何最好地在事物的配置方面进行测试,以及是否有任何工具可以帮助实现这种类型的实现。

目前,我们的许多测试是在剧本期间连续进行的,这对于诸如“有服务出现; vip可用;异步任务已完成”之类的事情很有用,但真正令我感到担忧的是我们管理漂移的能力。在应用程序层和供应层进行配置(例如VM配置)。我知道Ansible并不是解决配置漂移的最佳工具,但我很想知道您的意见。

如果您有什么可以使流程完全自动化的更好。(我们有一些丑陋的脚本,它们每天都会以松弛状态返回报告)。

注意:现在,在一些情况下,可能会发生重新配置(例如,从备份进行重建,严重的系统问题),但是通常情况下,它只是循环执行一些烦人的配置任务,因此不再考虑其他事情。



在配置时Ansible是否仅运行一次?如果没有,它运行的频率是多少?在提供解决方案之前,只是试图了解问题。
Woodland Hunter

嗨,@ Naphta,任何答案都解决了您的问题,请考虑通过选中对勾来接受它。这向更广泛的社区表明您已经找到了解决方案,并为答题者和您自己赢得了一定声誉。没有义务这样做。
理查德·斯莱特

I'm aware Ansible isn't the best tool for working with configuration drift 请解释。
030

Answers:


19

一些选择。

测试工具:按github stars排序

  • Serverspec -Ruby,目前最流行的工具,基于ruby的rspec构建
  • Goss -YAML,简单,<10MB的自包含二进制文件,非常快,可以从系统状态生成测试
  • Inspec -Ruby,将其视为由厨师们制作的改进的serverspec(几乎相同的语法)。建立起来比serverspec更容易扩展
  • Testinfra -Python,具有很酷的功能,能够使用Ansible的清单/变量

它们之间的主要区别:

最终,我建议花一天的时间对所有这些人进行试验,以使他们对自己有一种感觉,然后再决定自己。

  • 除了Goss之外,所有框架都可以在远程计算机上运行(例如,通过ssh)。Goss仅在本地或dgoss的docker中运行。
  • 所有框架都可以在服务器上本地运行,但是需要安装或嵌入Python或Ruby。Inspec提供了一个独立的<150MB捆绑包,其中包含嵌入式版本的ruby。Goss是单个<10MB二进制文件,没有外部依赖关系。
  • Goss内置了对nagios / sensu输出的支持,这使得与监视工具的集成更加容易。
  • Goss测试基于YAML,因此往往更简单,但灵活性较差。其他框架允许您利用基本语言Python / Ruby的全部功能来编写测试或扩展工具的功能。(简单性与灵活性)
  • Goss允许您从当前系统状态生成测试
  • 据我所知,Testinfra是唯一内置支持ansible库存和变量的产品
  • Inspec由厨师支持

连续/发散测试:

  • 厨师合规 -与inspec一起持续测试您的服务器和付费产品
  • 高斯 -可以轻松地挂接到Nagios或Sensu。此外,还支持将服务器测试公开为http端点。

测试开发工具:

  • kitchen-测试工具,启动实例,运行配置管理代码,运行测试套件。由厨师们制作
  • 分子 -与测试厨房相似,但专门为Ansible设计

完全披露:我是高斯的作者

更新: InSpec 4.x或更高版本使用混合的商业/开源许可证-请参阅注释。


4
我了解您有点偏见,但Inspec不需要Compliance即可定期运行。而且没有要管理的依赖项,所有必需的库和框架(ruby)都捆绑在软件包中,当通过ssh / winrm运行时,inspec本身就可以安装在每个节点上。您指出的是完全不是外部命令,这是不正确的,许多测试是由内部ruby代码完成的。(我认为值得一提)
Tensibai'3

我已经更新了答案以更正外部命令,并将红宝石捆绑在inspec中。您能否澄清或给我一个链接,说明如何单独使用inspec来检测/报告漂移?
艾哈迈德·埃尔萨巴希

好的,报告部分将在您手边,这确实是合规性目标。但是,您可以在crontab中运行inspec,并且在测试无法提醒您时(例如)仅依靠crontab邮件。
2015年

总而言之,要进行编辑,这听起来对您的工具和其他工具很公平。恐怕这可能很快就会过时,但无论如何,清单和指针还是+1。
Tensibai'3

嗯,是的..所有工具都可以通过这种方式加以利用。我试图提供能够提供更好报告的工具(或与工具的集成)。据我所知,这是合规的,或者以使它们与nagios / sensu /其他监控工具友好的方式包装这些工具。例如:slideshare.net/m_richardson / ... 道歉,如果它起初是有偏见的,那不是故意的。
艾哈迈德·埃尔萨巴希

13

我看到的两个工具是InSpecServerSpec。Serverspec是基于RSpec的基于Ruby的工具。InSpec受到RSpec和ServerSpec的启发。

我用过ServerSpec。很酷,但可能不是100%稳定的。我在Ubuntu上测试特定版本的软件时遇到问题。

我已经阅读了InSpec文档,但没有深入研究。它与Serverspec基本上具有相同的作用。

从Github提交来看,ServerSpec上的工作似乎已经结束了一些,而InSpec才刚刚开始。

更新: InSpec 4.x或更高版本使用混合的商业/开源许可证-请参阅注释。


1
“在Ubuntu上测试特定版本的软件时遇到了问题。” :我对SO注意到一个问题,关于它的后修正了这个stackoverflow.com/questions/42417864/...
马特Schuchard

稍微说明一下,InSpec模拟RSpec,但没有在其上构建。
coderanger

1
@MattSchuchard感谢您的参考!
Dave Swersky

井“不是100%的稳定”的测试工具不健全,任何好
ᴳᵁᴵᴰᴼ

InSpec非常适合作为测试工具,并且可以轻松地在服务器上不安装任何内容,而ServerSpec只能做一些额外的工作。但是,要使InSpec使用Ansible库存还需要做一些工作-如果库存为YAML格式(Ansible 2.4+),可能会更容易。
RichVel

10

使用Ansible等配置管理工具时,该工具本身将负责防止配置漂移。使用Ansible设置特定配置后,Ansible的重复执行将确保您的配置符合您的定义。这还要求您的Ansible代码以幂等的方式编写。

鉴于以上所述,可以通过从某些服务器循环执行Ansible剧本来实现测试配置。例如,一个cron作业或Jenkins可以每30分钟执行一次剧本,并报告任何故障。没有故障意味着您的配置处于检查中,拥有故障意味着使服务器进入所需状态存在问题。

如果您不信任将代码写为幂等的,因此您无法真正在自动服务器的循环中真正真正地重复执行Ansible,则存在解决方法。您可以执行与上述相同的操作(循环运行Ansible),但使用其空运行模式。每当Ansible报告需要进行更改时,Jenkins作业(或cron作业)都可以通知您您的预配置已更改,并且服务器未处于所需状态

为了确保您的Ansible代码确实在按照您认为的方式工作,请使用Dave Swersky提到的解决方案。无论INSPECServerspec是验证的工具,不同的方式,你的剧本其实没有你的意思。在测试环境(甚至是Docker容器)中执行此类工具的一种好方法是使用kitchen.ci,它处理各种基础单元测试工具之间的所有胶水,并执行您的剧本/模块/菜谱。

Kitchen.ci最初用于测试Chef食谱,但是也存在Ansible和其他CM工具的插件


5

Test Kitchen有一个厨房可配置的供应商插件,用于测试Ansible代码。它不像Chef集成那样深入,但是在大多数情况下确实可以完成工作。还有最近的Molecule项目,它是专用的Ansible测试系统。


0

您可以使用Outthentic跟踪配置/基础结构差异/漂移,创建测试套件以“修复”所需状态并在每次需要跟踪不想要的更改时重新运行它很容易。


1
欢迎来到DevOps.se Alexey。尽管在这种情况下您的工具可能会帮助用户,但要在此处得到答案,应该多一些传达它与问题的关系。否则,它看起来像是仅链接的广告。
小鸡

嗨!当然,只是给出了更多细节。
Alexey Melezhik

从我的角度来看,这无非是rundeck所能做的,而且超出了这个问题的范围。特别是因为答案并不能说明它如何解决审计一千台服务器的问题,以及如何通过发出一些可解析的输出来提醒审计人员漂移或向审计师提供易于阅读的报告。从我刚刚阅读的内容来看,它并没有inspec所能做的(例如),并且在大规模使用时提供的可用输出较少,同时需要大量外部工具来完成此工作,因此便携式性较差。
Tensibai

“它如何解决审计一千台服务器的问题”-我可以在问题中找到关于数千台服务器的任何信息
Alexey Melezhik

“并通过给出一些可解析的输出来警告发生漂移或向审核员提供人类可读的报告。” 我都没有在问题中找到这个。漂移的明显警报是测试开始失败的事实……
Alexey Melezhik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.