Chef - 创建一个 cronjob 并使用 Inspec 对其进行测试

Chef - creating a cronjob and testing it with Inspec

我正在尝试将 cronjob 设置为每天一次 运行 命令(在本例中为 ls)。为此,我使用 cron resource.

问题是我不知道如何用 Inspect 测试它。我尝试使用 crontab 但它不起作用。

代码如下:

// code
cron 'my-ls' do
  minute '1'
  hour '0'
  command 'ls'
end

// test
describe crontab.commands('ls') do
  its('minutes') { should cmp '1' }
  its('hours') { should cmp '0' }
end

失败的说法是:

×  hours should cmp == "0"

     expected: "0"
          got: []

     (compared using `cmp` matcher)

     ×  minutes should cmp == "1"

     expected: "1"
          got: []

     (compared using `cmp` matcher)

PS:我也尝试过 cron_d 使用 cron cookbook

这是让这些测试正常工作的最简单方法:

第 1 步:使用以下数据创建名为 cronls.txt 的文本文件:

1 0 * * * ls -al

第 2 步:使用此命令将其转换为 cron 作业:

crontab -a cronls.txt

第 3 步:在您的 Chef 食谱中,将这些控件添加到您的 default_test.rb:

control 'cron-1' do
  describe crontab do
    its('commands') { should include 'ls -al' }
  end
end

control 'cron-2' do
  describe crontab.commands('ls -al') do
    its('minutes') { should cmp '1' }
    its('hours') { should cmp '0' }
  end
end

第 4 步:执行您的 InSpec 测试:

inspec exec test/integration/default/default_test.rb

结果如你所料:

  ✔  cron-1: crontab for current user
     ✔  crontab for current user commands should include "ls -al"
  ✔  cron-2: crontab for current user with command == "ls -al"
     ✔  crontab for current user with command == "ls -al" minutes should cmp == "1"
     ✔  crontab for current user with command == "ls -al" hours should cmp == "0"

这不是执行此操作的唯一方法(甚至不是最好的方法),但它应该能让您继续前进。有关 crontab 资源的更多选项,请阅读 InSpec 文档:

https://docs.chef.io/resource_cron.html