Chef InSpec中的文件名

时间:2016-08-03 11:01:42

标签: ruby chef inspec

在Ruby中,*用于表示文件的名称。

例如,/home/user/*.rb将返回以.rb结尾的所有文件。我想在Chef InSpec中做类似的事情。

例如:

describe file ('home/user/*') do
  it {should_not exist }
end

它应该给我/home/user目录中的所有文件,并检查该目录中是否存在文件。换句话说,我想在Chef中检查此目录是否为空。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这是测试目录是否存在的另一种方法,如果存在,则使用Ruby来测试其中的文件。它还使用expect语法,该语法允许自定义错误消息。

control 'Test for an empty dir' do
  describe directory('/hey') do
    it 'This directory should exist and be a directory.' do
      expect(subject).to(exist)
      expect(subject).to(be_directory)
    end
  end
  if (File.exist?('/hey'))
    Array(Dir["/hey/*"]).each do |bad_file|
      describe bad_file do
        it 'This file should not be here.' do
          expect(bad_file).to(be_nil)
        end
      end
    end
  end
end

如果存在文件,则产生的错误消息将提供参考:

  ×  Test for an empty dir: Directory /hey (2 failed)
     ✔  Directory /hey This directory should exist and be a directory.
     ×  /hey/test2.png This file should not be here.
     expected: nil
          got: "/hey/test2.png"
     ×  /hey/test.png This file should not be here.
     expected: nil
          got: "/hey/test.png"

答案 1 :(得分:0)

对于globs,

await主要是一个shell功能,正如您所料,*资源不支持它们。请改用file资源:

command