我正在ruby中编写一个Chef InSpec测试来检查'umask 077'文件的内容。问题是我正在检查的数组中的一些文件不存在。我正在尝试排除nil文件并重新推送它们,但它似乎试图检查所有文件。有什么想法吗?
这是我的代码:
control 'auth-default-umask' do
impact 0.5
title 'Default umask'
desc 'DISA RHEL6 STIG (V1R2)'
%w(/etc/profile /etc/bashrc /etc/csh.login /etc/.login).each do |umask_file|
filecheck = []
unless umask_file == nil
filecheck.push(umask_file)
describe directory(filecheck) do
its('content') { should match /umask 077/ }
end
end
end
end
答案 0 :(得分:1)
你正在检查文件名是否为nil,它从来都不是,所以自然它会运行所有这些时间。如果文件不存在,您是否尝试排除该文件?
另外,您可能想要描述目录而不是目录列表,所以请注意我也改变了。
这是最终结果:
control 'auth-default-umask' do
impact 0.5
title 'Default umask'
desc 'DISA RHEL6 STIG (V1R2)'
%w(/etc/profile /etc/bashrc /etc/csh.login /etc/.login).each do |umask_file|
filecheck = []
if File.exists?(umask_file) # check file existence
filecheck.push(umask_file)
describe directory(umask_file) do # describe this directory
its('content') { should match /umask 077/ }
end
end
end
end
你正确使用%w()
创建一个文件名数组,它只是将每个单词放在其中并创建一个字符串数组(您输入的路径)。仅这些没有任何意义,但它们可以与类(例如File
)一起使用,以在文件系统上下文中变得有意义。
File.exists?(filename)
检查文件是否存在。
要阅读文件,您可以使用File.open
:
File.open(filename, 'r') do |file|
until file.eof?
line = file.gets
# do something with line
end
end