是否可以在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 -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
我该怎么做?
答案 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选项。我不确定您为什么要检查文件是否作为特定用户存在,但不支持。