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 文档:
我正在尝试将 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 文档: