2

是否可以在 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)

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

  • 我以srijava用户身份安装了 java
  • 现在在 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

我怎样才能做到这一点?

4

2 回答 2

1

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

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

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

describe bash('su srijava ; cd /app/java; ./java --version') do
  its('stdout') { should match('1.7') }
end
于 2016-08-29T10:30:49.920 回答
0

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

于 2016-06-30T16:26:00.637 回答