Chef InSpec中的嵌套资源

时间:2016-06-30 09:41:23

标签: rspec chef inspec

是否可以在Chef InSpec中的其他资源中使用一个资源?

示例:

 describe command('su srijava') do
     describe file ('/app/java/latest') do     
         it{ should exist }
     end
 end

它会抛出一个错误:

`method_missing': undefined method `file' for RSpec::ExampleGroups::CommandSuSriava:Class (NoMethodError)

实际上我想要做的是我需要运行安装在其他用户中的实用程序,我必须检查该会话返回的输出并验证它。示例:

  • 我将java安装为 srijava 用户
  • 现在在Inspec中我编写了测试Java版本的命令(假设java -version仅在该用​​户中运行而不是作为 root )。
  • 如果我使用su srijava,那么我不会将输出返回给 根会话和测试失败
  • 如果我在没有su srijava的情况下运行,那么我的实用程序会抛出一个错误 用户不是 SriJava

代码su

describe command('su srijava ; cd /app/java; ./java --version') do
        its('stdout') { should match('1.7') }
 end

没有su的代码:

describe command('cd /app/java; ./java --version') do
        its('stdout') { should match('1.7') }
 end

我该怎么做?

2 个答案:

答案 0 :(得分:1)

正如诺亚指出的那样,尚不支持嵌套的描述块。我也认为你不需要那些。

result = command('runcommand').stdout
filename = result + '/path'
describe file (filename) do     
  it{ should exist }
end

另一方面,您可以使用bash资源来运行多个命令。 command使用用户的默认shell bash强制执行。这使您能够:

describe bash('su srijava ; cd /app/java; ./java --version') do
  its('stdout') { should match('1.7') }
end

答案 1 :(得分:0)

不,这也没有任何意义,因为即使在正常的RSpec中,这两者也不会合并。如果您的问题是需要以root身份检查文件,则可以使用InSpec的sudo选项。我不确定您为什么要检查文件是否作为特定用户存在,但不支持。