Назад | Перейти на главную страницу

Марионетка - условное переопределение встроенного значения по умолчанию

Возьмем, к примеру, эту оболочку для 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}"
    }
}