
它是圣彼得堡Linux用户组 的演示文稿 2018-04-25的文本版本。 配置示例位于https://github.com/ultral/ansible-role-testing
我想您是进行配置管理,而不是bash 。 这意味着您必须对其进行一些测试。 您是否曾经测试过角色? 你如何做?
怎么做?
就我而言,我们有:
- 许多不同的角色。
- Hyper-V充当虚拟机监控程序。
- 具有按需创建VM的可能性有限的私有云。
- 互联网访问的代理。
- 由于角色=整个VM配置,因此无法在docker内部测试ansible角色。
- 决定为具有角色的git仓库实施绿色构建策略。
让我们比较现有的解决方案进行测试。
名称 | 测试厨房 | 分子 | 建立新的 |
---|
语言能力 | 红宝石 | 蟒蛇 | 重击/红宝石 |
观察者 | 132 | 126 | 0 |
星星 | 1413 | 1154 | 1个 |
前叉 | 502 | 174 | 2 |
执照 | 阿帕奇2.0 | 麻省理工学院 | 任何 |
提交 | 1929年 | 1264 | 0 |
发布 | 101 | 121 | 0 |
贡献者 | 109 | 82 | 5 |
我们决定不重新发明轮子 ,而是准备好生产解决方案。 我们的基础架构团队拥有强大的红宝石技能和丰富的红宝石经验,因此我们选择了Test Kitchen & inspec
奇奇

主要思想是创建一个新的VM,扮演一个角色并做一些冒烟测试。
绿色建筑政策

此外,我们实施了绿色建筑政策。 我们对每个提交到master分支的提交都运行了测试,如果可以,则在应用ansible角色时进行测试。
嵌套虚拟化
您还记得,我们有一个私有云,按需创建VM的可能性有限。 我们决定在VM内部创建VM。

首先,我们尝试在不嵌套的情况下运行Virtualbox x32。 由于内核崩溃,这是个坏主意。 同样,我们基础架构中的绝大多数VM都是x86_64,因此我们决定继续进行研究。 结果,我们决定使用嵌套虚拟化。 希望我们的主机服务器支持它。
面临的问题
我正在实施testkitchen,并遇到了一些问题。
将代理设置从主机传递到testkitchen来宾VM
在某些测试服中,我们在testkitchen创建的VM内配置了代理客户端设置。 但是,未在testkitchen主机上配置代理,并且ansible无法使用带有空值的额外变量
解决方案:如果未设置ENV变量,则创建erb模板以设置默认代理
<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %>
通过剧本管理网络设置
一些角色配置网络接口。 测试服看起来像:
解决方案:向虚拟机添加接口
如果诉讼案件名称中包含“-”,则失败
Virtualbox不能在虚拟机名称中使用“ _”
解决方案:将手提箱重命名为“ vm_” =>“ vm-”
没有“。”的Oracle测试失败。 VM名称末尾
我们在生产中使用角色,但是当我们决定对其进行测试时,它就失败了。 我们复制了它。
我想显示线索。
[root@vm-oracle vagrant]# getent ahosts vm-oracle 127.0.0.1 STREAM vm-oracle 127.0.0.1 DGRAM 127.0.0.1 RAW [root@vm-oracle vagrant]# getent ahosts vm-oracle. fe80::a00:27ff:febd:bd6a STREAM vm-oracle fe80::a00:27ff:febd:bd6a DGRAM fe80::a00:27ff:febd:bd6a RAW 10.0.2.15 STREAM 10.0.2.15 DGRAM 10.0.2.15 RAW [root@oracle vagrant]# getent ahosts oracle.example.com. 192.168.128.182 STREAM oracle.example.local 192.168.128.182 DGRAM 192.168.128.182 RAW
您有什么想法吗?
这是一个棘手的错误:
- 我们仅在oracle监听器设置中启用了监听IPv4
- oracle使用FQDN
- linux包含用于解析主机名的特殊数据库“ myhostname”,它在/ etc / hosts和dns解析之后使用
- 游民创建了虚拟机并更新了
/etc/hosts
我想进一步说明一下:
万一vm-oracle发生了什么事?
- 流浪汉创建虚拟机
- 流浪者更新了
/etc/hosts
( vm-oracle x2) - oracle监听器监听了IPv4
- oracle侦听器解决了vm-oracle。 并获得IPv6
- 失败
vm-oracle发生了什么情况。 ?
- 流浪汉创建虚拟机
- 流浪者更新了/ etc / hosts( vm-oracle & vm-oracle。 )
- oracle监听器监听了IPv4
- oracle侦听器解决了vm-oracle。 并获得IPv4
- 好啦
OOM来了
OOM随机杀死了VM。 Testkitchen因奇怪的错误而失败。
解决方案:增加RAM
建造缓慢
工作缓慢
解决方案:
结论
一方面,当前的实现可行,但另一方面,存在一些问题
- 不是用户友好的。
- 我们将红宝石和蟒蛇混合。
- 没有权力检查。
- 它工作缓慢。
- 很难跟踪单个作业的日志。
结果,Molecular&docker可能是非常有趣的解决方案。