我们将 Puppet(v3.6.2) 与 Foreman enc 一起使用,并且有很多自定义模块,其模式如下图模块所示;
#mkdir/manifests/init.pp
class mkdir ($path, $mode) {
class {'mkdir::file': }
}
#mkdir/manifests/file.pp
class mkdir::file {
file {$mkdir::path:
ensure => 'directory',
mode => $mkdir::mode,
}
}
#mkdir/spec/classes/mkdir_spec.rb
require 'spec_helper'
describe 'mkdir' do
let(:params) {{ :path=>'/foo', :mode=>'777' }}
it { should contain_class( 'mkdir::file' ) }
end
# All good so far, but here's the rub
# mkdir/spec/classes/file_spec.rb
require 'spec_helper'
describe 'mkdir::file' do
# how can I set $mkdir::path and $mkdir::mode???
let(:params) {{ :path=>'/bar', :mode=>'555' }}
it { should contain_file('/bar').with({
mode=>'555' })
}
end
正如代码注释所说,如何在 file_spec 测试中设置模块参数 $mkdir::path 和 $mkdir::mode ?
显然,可以重构模块以将所有需要的参数传递给每个子类,如果这是唯一的方法,我会这样做,但似乎不可能没有办法测试这种模式。
我还看到了很多使用 module::params 模式的示例,这对于使用 hiera 的安装来说无疑是一个干净的模式,但是我无法使该模式适用于 Foreman,而且充其量需要包括两个每个参数化模块的木偶类很难看。