在编写模块的任务中,我发现我有大量的可configuration部分。 为了更好地组织模块(为了读和维护),我select了分割模板文件 。 由于这些模板部分/片段已经总结了一组可configuration的variables,我认为使用代表模板片段内容的散列可能会很方便
(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类inheritanceparams的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, } }
然后是包含wppuppet::config类的config.pp文件,它可以从连接的模板中生成文件。
# 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文件/configuration类。
类的默认值可以在整个类中使用,也可以在类的声明中被replace。 木偶无法将哈希合并在一起。
您可能希望切换到基于Hiera的方法。 通过将默认值和特定值放入您的层次结构中,您可以利用Hiera的能力来执行您显然需要的深度合并 。