Foreman enc で Puppet(v3.6.2) を使用しており、次の図のモジュールに示されているパターンのカスタム モジュールが多数あります。
#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 で機能させることはできませんでした。せいぜい 2 つを含める必要があります。醜いパラメータ化されたモジュールごとのパペットクラス。