是否有办法(a)接受对类或资源定义的任意参数,然后(b)将这些parameter passing给另一个类或资源定义?
我经常发现我写的是一个本地types或第三方模块的薄包装。 例如:
define myconfigfile { file { "/path/to/$name": owner => lars, group => lars, ... } }
也就是说, myconfigfile
是一组具有已知前缀的文件资源的有效缩写。 我实际上喜欢myconfigfile
接受与file
资源types(如content
, source
等)相同的参数,但我想避免:
define myconfigfile ( $content = undef, $source = undef ) { ... }
当只有一个或两个参数时,这可以正常工作,但如果我试图用大量的参数来包装一个参数化的类,它变得难以pipe理。
一种可能性是使用散列来传递任意参数列表。
另一个也许更好的select是使用Ruby DSL ,它允许你使用Ruby而不是Puppet语言。
还有各种各样的例子 。
本质上,你可以传入散列表,然后使用Ruby的迭代/循环(ruby 散列对象有一个.each方法)从散列中提取键值对。
Ruby DSL在2.6.x中可用。