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

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

目前,我们的许多测试是在剧本期间串行进行的,这对于诸如“已提供服务; vip可用;此异步任务已完成”之类的事情很有用,但是我真正关心的是我们在应用程序和配置层(例如VM配置)管理配置偏移的能力。我知道Ansible并不是处理配置漂移的最佳工具,但我很想听听您的意见。 (我们有一些丑陋的脚本,它们每天都会以闲置状态报告)。

注意:目前,在一些情况下,可能会发生重新配置(例如,从备份重建,关键系统问题),但通常情况下只是循环执行一些烦人的配置任务,而不再考虑它。

评论

serverspec.org

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

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

我知道Ansible并不是处理配置漂移的最佳工具,请解释。

#1 楼

测试工具:按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输出的支持,这使得与监视工具的集成更加容易。因为它基于YAML。其他框架允许您利用基础语言Python / Ruby的全部功能来编写测试或扩展工具的功能。 (简单性与灵活性)
Goss允许您从当前系统状态生成测试
Testinfra,据我所知,这是唯一内置支持ansible库存和变量的测试
Inspec由Chef

连续/差异测试:




Chef Compliance-与inspec一起连续测试您的服务器,付费产品

高斯-可以轻松地挂接到Nagios或Sensu中。另外,还支持将服务器测试公开为http端点。

测试开发工具:



厨房-测试工具,启动实例,运行配置管理代码,运行测试套件。由厨师们制作的

分子-与测试厨房类似,但专门为ansible编写。 >更新:InSpec 4.x或更高版本使用混合的商业/开源许可证-请参阅注释。

评论


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

–滕西拜
17 Mar 29 '17在14:00

我已经更新了答案以更正外部命令,并将红宝石捆绑在inspec中。您能否澄清或向我发送一个链接,说明如何单独使用inspec来检测/报告漂移?

–艾哈迈德·埃尔萨巴赫(Ahmed Elsabbahy)
17 Mar 29 '17 at 15:10

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

–滕西拜
17 Mar 29 '17 at 15:20

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

–滕西拜
17年3月29日在15:22

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

–艾哈迈德·埃尔萨巴赫(Ahmed Elsabbahy)
17 Mar 29 '17在15:24



#2 楼

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

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

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

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

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

评论


“在Ubuntu上测试特定版本的软件时遇到了问题。”我在SO上注意到有关此问题后解决了此问题:stackoverflow.com/questions/42417864/…

–马特·舒查德(Matt Schuchard)
17-2-28在23:13

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

–coderanger
17 Mar 1 '17 at 0:49

@MattSchuchard感谢您的参考!

–戴夫·斯沃斯基(Dave Swersky)
17年1月1日,3:16

测试工具“不是100%稳定”的声音听起来并不好

–ᴳᵁᴵᴰᴼ
17年8月8日在1:10

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

– RichVel
18年5月6日在5:54

#3 楼

使用Ansible等配置管理工具时,该工具本身将负责防止配置漂移。使用Ansible设置特定配置后,Ansible的重复执行将确保您的配置符合您的定义。这还要求您的Ansible代码以幂等的方式编写。例如,一个cron作业或Jenkins可以每30分钟执行一次剧本,并报告任何故障。没有失败意味着您的配置处于检查状态,拥有失败意味着将服务器置于所需状态是一个问题。因此,您无法真正在自动服务器中的循环中真正重复执行Ansible,因此存在变通方法。您可以执行与上述相同的操作(循环运行Ansible),但使用其空运行模式。每次Ansible报告需要进行更改时,Jenkins作业(或cron作业)都可以通知您您的预配配置已更改,并且服务器未处于所需状态。代码实际上正在执行您认为应该执行的操作,Dave Swersky提到的解决方案适用。 InSpec和Serverspec都是以不同的方式验证您的剧本是否真正发挥了您的意思的工具。在测试环境(甚至是Docker容器)中执行此类工具的一种好方法是使用kitchen.ci,它处理各种基础单元测试工具之间的所有粘合,并执行您的剧本/模块/菜谱。

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

#4 楼

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

#5 楼

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

评论


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

–小鸡
18-10-4在18:12

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

–́Alexey Melezhik
18-10-4在19:57

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

–滕西拜
18-10-4在20:21

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

–́Alexey Melezhik
18-10-4在20:28



“并通过给出一些可解析的输出来警告发生漂移或向审核员提供可读的报告。”我都没有在问题中找到这个。明显的漂移警告是测试开始失败的事实...

–́Alexey Melezhik
18-10-4在20:30