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)
实际上我想做的是我需要 运行 一个安装在其他用户中的实用程序,我必须检查从该会话返回的输出并验证它。示例:
- 我将 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
我该怎么做?
不,这也没有任何意义,因为即使在正常 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
是否可以在 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
我该怎么做?
不,这也没有任何意义,因为即使在正常 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