【问题标题】:Check content of file with InSpec if it exists使用 InSpec 检查文件内容是否存在
【发布时间】:2017-03-21 03:03:01
【问题描述】:

我正在用 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

【问题讨论】:

    标签: ruby serverspec inspec


    【解决方案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
    

    【讨论】:

    • 感谢您的快速回复!这行得通,但我仍然不确定为什么会这样。最初我希望该 filecheck 变量保存所有确实存在的文件然后检查它们,但这似乎不会在这里发生。 filecheck 现在用这段代码到底在做什么?
    • @Blooze 它保存了所有存在的文件。从功能上讲,它现在实际上并没有做任何有用的事情,可以安全地从代码中删除。 @Casraf 这个问题实际上与 Chef 无关,describe directory 实际上应该是 describe file(尽管它可能仍然与 RSpec 匹配器一样工作,file 是首选的 Serverspec 用法)。
    • @Blooze 我为答案添加了一些清晰性:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2012-07-19
    • 1970-01-01
    • 2022-06-10
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多