为什么我们不能只使用Ansible而不是Chef检查?

时间:2019-07-08 07:38:07

标签: testing ansible chef roles inspec

引用:http://scienceofficersblog.blogspot.com/2016/02/testing-ansible-with-inspec.html

有太多帖子提到使用Chef inspec进行Ansible测试。但是他们通常会给出如下示例:

Ansible:

- hosts: all
  user: root
  tasks:
  - debug: msg="debug {{inventory_hostname}}"
  - apt: name=apache2 state=present

厨师检查:

impact 0.7
title "Test some simple resources"
describe package('apache2') do
    it { should be_installed }
end

因此,如果我执行相同的Ansible块,将确保安装了apache2软件包。同样,有很多示例,例如应该打开端口80,因为如果我们在检查模式(空运行)下执行相同的剧本,那么我也将知道端口80是否在监听。

那么,为什么我们不能使用Ansible本身?当我们使用Ansible几乎可以做所有事情时,Chef inspec的确切必要性是什么?

2 个答案:

答案 0 :(得分:1)

我不确定为什么人们似乎认为Inpec主厨对此是必要的。 Ansible拥有一个assert模块,该模块可以确保事物评估为真,这样您就可以有效地注册任务的输出并按期望声明事物。

https://docs.ansible.com/ansible/latest/modules/assert_module.html

实际上,这就是几乎所有Ansible集成测试都是在https://github.com/ansible/ansible/tree/devel/test/integration/targets上游编写的方式

答案 1 :(得分:1)

主要是因为这些示例非常非常简单。

对于同一个ansible块,我假设您希望安装apache,运行并监听端口80,一个更好的inspec示例将是:

impact 0.7
title "Test some simple resources"
describe package('apache2') do
    it { should be_installed }
end
describe service('apache2') do
    it { should be_installed }
    it { should be_enabled }
    it { should be_running }
end
describe port(80) do
  it { should be_listening }
  its('processes') {should include 'apache2'}
end

但是要点是,对所需的配置进行编码以及确保单独计划的测试可以采用TDD方法。

Inspec在格式化程序方面还有一个有趣的地方,它可以返回各种格式的审核信息。

最终,Inspec不需要测试Ansible,这是一种将“测试”和“动作”分开的做法,因此使ansible代码中的错误无法使apache侦听端口800的问题。就像您要它设置的一样(这很正常),将它们分开可以确保测试不是由操作代码派生的。