Возьмем, к примеру, эту оболочку для 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}"
}
}
Допустим, я хотел ввести поддержку параметра target для этого типа ресурса, я бы сделал что-то вроде:
define sshauthkeys::helper ($user,$ensure='present', $target='') {
Проблема в том, что если я хочу использовать разумное значение по умолчанию из марионетки, полученной из $ user's homedir - и переопределить его в крайних случаях, я теряю преимущество проделанной работы по установке значения по умолчанию во всех других обстоятельствах.
Есть ли способ при желании переопределить значение без написания двух функций?
Лучшее описание проблемы:
define sshauthkeys :: helper ($ user, $ sure = '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}"
}
}