我有一个相当基本的 puppet 模块,用于运行 tomcat 的 web 服务。我想在 Tomcat 的catalina.out
文件上设置 logrotate,我想首先编写一个测试,确认 logrotate 包含在模块中并使用正确的设置进行设置。
这是 my 的精简版webservice.pp
,例如:
class my_module::webservice (
...
){
include ::tomcat_server
...
logrotate::rule { 'tomcat':
path => '/var/log/tomcat/catalina.out',
rotate => 1,
rotate_every => 'day',
copytruncate => true,
missingok => true,
compress => true,
delaycompress => true,
}
}
我已经在我的.fixtures.yml
喜欢中包含了 logrotate forge 模块:
fixtures:
forge_modules:
logrotate:
repo: 'puppet-logrotate'
ref: '3.2.1'
...
但我只能编写一个测试来确认它logrotate
包含在模块中,如下所示:
require 'spec_helper'
describe 'my_module::webservice' do
on_supported_os.each do |os, os_facts|
context "on #{os}" do
let(:facts) { os_facts }
it { is_expected.to compile }
it { is_expected.to contain_class('logrotate') }
end
end
end
这不起作用(如果我从中删除 logrotate 块,init.pp
测试仍然通过):
it { is_expected.to contain_class('logrotate::conf') }
也不要求with
:
it { is_expected.to contain_class('logrotate') \
.with('path' => '/var/log/tomcat/catalina.out',
'rotate' => 1,
'rotate_every' => 'day',
'copytruncate' => true,
'missingok' => true,
'compress' => true,
'delaycompress' => true,
)
}
也没有单独的/嵌套的describe
块:
describe 'logrotate::rule' do
let(:title) { 'tomcat' }
let(:params) do
{
'path' => '/var/log/tomcat/catalina.out',
'rotate' => 1,
'rotate_every' => 'day',
'copytruncate' => true,
'missingok' => true,
'compress' => true,
'delaycompress' => true,
}
end
end
我在 rspec 文档中找不到任何提到除了测试定义的类之外的任何内容。甚至有可能做我想做的事吗?
这是我的目录布局:
puppet
`- modules
`- my_module
|- data
|- manifests
| |- init.pp
| `- webservice.pp
|- spec
| |- classes
| | `- webservice_spec.rb
| `- spec_helper.rb
|- .fixtures.yml
|- Gemfile
|- hiera.yaml
|- metadata.json
`- Rakefile