以 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}"
}
}
假设我想引入对该资源类型的“目标”参数的支持,我会这样做:
define sshauthkeys::helper ($user,$ensure='present', $target='') {
问题是,如果我想使用来自 $user 的主目录的 puppet 的合理默认值 - 并在边缘情况下覆盖它,那么我将失去在所有其他情况下设置默认值所做的工作的好处。
有没有办法可以选择性地覆盖值而不必编写两个函数?
更好地描述该问题:
定义 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?
}
}
答案1
在这种情况下,设置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}"
}
}