在编写模块的过程中,我发现我有一个巨大的可配置部件的数量。为了更好地组织模块(为了可读性和可维护性),我选择了拆分模板文件由于这些模板部分/片段已经总结了可配置变量组,我认为使用表示模板内容的哈希可能会很方便碎片
(hash) $db -> template( config.db.erb )
(hash) $*** -> template( config.***.erb )
由于某种原因,我设置的 Puppet/Ruby foo 出现问题,因为只有输入的哈希值被使用,其余的保留undef
。
# Calling the module
class { 'wppuppet':
location => '/var/www/wp',
db => {
prefix => 'foo',
user => 'usr',
pass => '^[:D',
},
}
实际的 init 类继承自 params defaults 类
# init.pp
class wppuppet(
$location = $wppuppet::params::location,
$db = $wppuppet::params::db
) inherits wppuppet::params {
validate_hash( $db )
validate_string( $db['name'] )
# ...
validate_bool( str2bool( $db['repair'] ) )
class { 'wppuppet::config':
db => {
prefix => $db['prefix'],
name => $db['name'],
user => $db['user'],
pass => $db['pass'],
host => $db['host'],
repair => $db['repair'],
}
}
# The params.pp defaults class
class wppuppet::params {
$db = {
prefix => 'wp',
name => 'wordpress',
user => 'root',
pass => 'root',
host => 'localhost',
charset => 'utf8',
repair => true,
}
}
然后有一个config.pp
文件,其中包含wppuppet::config
从连接模板生成文件的类。
# The actual config.php file
file { "${location}/config.php":
ensure => file,
content => template(
'wppuppet/config.db.erb',
'wppuppet/config.debug.erb'
# ...
),
}
最后是config.database.erb
文件
define( 'DB_NAME', '<%= @db['name'] %>' );
define( 'DB_USER', '<%= @db['user'] %>' );
define( 'DB_PASSWORD', '<%= @db['pass'] %>' );
define( 'DB_HOST', '<%= @db['host'] %>' );
编辑有人能解释一下我在哪里丢失了线索以及为什么我无法获取默认值吗?当我放置notice('params loaded')
或简单地转储$db
哈希时,我可以看到它在 CLI 上的每个类中设置,但不在config.pp
文件/配置类中设置。