Chef InSpec 中的嵌套资源

Nested resources in 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)

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

代码 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

我该怎么做?

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

正如 Noah 所指出的,嵌套的描述块还不受支持。我也认为你不需要那些。

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