以ssh_authorized_key为例,
define sshauthkeys::helper ($user,$ensure='present') { ssh_authorized_key { "puppet: ${name2} ${user}": ensure => $ensure, type => $ssh_keys["${name2}"]["type"], key => $ssh_keys["${name2}"]["key"], user => "${user}" } }
假设我想引入对该资源types的“target”参数的支持,我会做如下的操作:
define sshauthkeys::helper ($user,$ensure='present', $target='') {
问题是,如果我想使用来自$ user的homedir派生的傀儡的合理默认值,并在边缘情况下覆盖它,我将失去在所有其他情况下设置默认值的工作的好处。
有没有办法可以覆盖的价值而不必写两个函数?
更好地描述问题:
定义sshauthkeys :: helper($ user,$ ensure ='present',$ target =''){
ssh_authorized_key { "puppet: ${name2} ${user}": // etc etc... target = $target // ^--- Here, I'm forcing it to '' - how do I use the puppet // built-in derivation, and only override optionally? }
}
在这种情况下,设置target => undef与完全没有指定它是一回事,所以你可以像这样编写你的包装:
define sshauthkeys::helper ($user, $ensure='present', $target=undef ) { ssh_authorized_key { "puppet: ${name2} ${user}": ensure => $ensure, target => $target, type => $ssh_keys["${name2}"]["type"], key => $ssh_keys["${name2}"]["key"], user => "${user}" } }