在Inspec测试中,如何使用ruby解析多行标准输出

时间:2017-07-13 17:49:24

标签: ruby parsing chef inspec

我有一个测试:

control "cis-0-0-7" do
  impact 1.0
  title "verify chkconfig"
  desc "verify chkconfig"
  stdout, stderr, status = Open3.capture3('chkconfig | grep active')
     puts stdout
      #stdout { should match /activemq-instance-EL2-ext/ }
   #end
end

这在stdout上显示以下内容:

$inspec exec cookbooks/activemq7/test/linuxcommon_test.rb
activemq-instance-EL2-ext   0:off   1:off   2:on    3:on    4:on    5:on    6:off
activemq-instance-EL2-int   0:off   1:off   2:on    3:on    4:on    5:on    6:off

如何使用Inspec(如果可能)或使用ruby来解析和验证(断言)这些多行。

正如@coderanger所建议我使用的:

control "cis-0-0-7" do
  impact 1.0
  title "verify chkconfig"
  desc "verify chkconfig"
  #stdout, stderr, status = Open3.capture3('chkconfig | grep active')
  output = command('chkconfig | grep active')
     describe output do
      its('stdout')  { should match /activemq-instance-EL2-ext.*\n/ }
      its('stdout')  { should match /activemq-instance-EL2-int.*\n/ }
   end
end

作品!!感谢

1 个答案:

答案 0 :(得分:1)

您为什么使用Open3?您希望使用command资源,而不是直接使用Ruby命令。也就是说,您只需与其中包含\n的字符串进行比较。