rspec/serverspec服务测试总是失败

问题描述:

我相信这个问题可能是serverspec service test returns incorrect failure的重复,但是我包含了更多关于执行环境的信息。rspec/serverspec服务测试总是失败

我有一堆成功的针对AWS上的RHEL6 VM执行的serverspec测试。

然而,任何“服务”测试似乎失败,匹配器be_enabled和be_running。

我已经在我的spec_helper.rb如下:

set :os, :family => 'redhat', :release => '6', :arch => 'x86_64' 

我都尝试serverspec和RSpec语法测试,并为它们运行相同的命令都失败:

describe service('ntpd') do 
    it { should be_enabled } 
    it { should be_running } 
end 

it "is running ntpd" do 
    expect(service("ntpd")).to be_enabled 
    expect(service("ntpd")).to be_running 
end 


Failure/Error: it { should be_enabled } 
    expected Service "ntpd" to be enabled 
    sudo -p 'Password: ' /bin/sh -c chkconfig\ --list\ ntpd\ \|\ grep\ 3:on 

Failure/Error: it { should be_running } 
    expected Service "ntpd" to be running 
    sudo -p 'Password: ' /bin/sh -c service\ ntpd\ status 

然而,在服务器上本地运行它们将成功:

$ sudo -p 'Password: ' /bin/sh -c chkconfig\ --list\ ntpd\ \|\ grep\ 3:on 
ntpd   0:off 1:off 2:on 3:on 4:on 5:on 6:off 
$ echo $? 
0 

$ sudo -p 'Password: ' /bin/sh -c service\ ntpd\ status 
ntpd (pid 1101) is running... 
$ echo $? 
0 

我试图调查设置一些调试与pry-byebug一起玩,但看起来并不那么简单,所以我现在就放弃了这一点。

我运行红宝石2.0,serverspec 2.24,RSpec的3.3

谁能帮我指出了正确的方向?

我需要指定运行级别来检查,然后工作。我认为这是RHEL6/7和systemV/systemD之间的一些向后兼容性问题,因为文档指出上述测试应该可行。

describe service('ntpd') do 
    it { should be_enabled.with_level(2) } 
    it { should be_enabled.with_level(3) } 
    it { should be_enabled.with_level(4) } 
    it { should be_enabled.with_level(5) } 
    it { should be_running } 
end 
+0

此解决方案对我无效。任何替代品? – fiunchinho

如果用级解决方案没有帮助,我也发现,你需要设置在spec_helper.rb文件中的PATH变量包括/ sbin目录和/ usr/sbin目录。这对我个人来说是个窍门。