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

Марионетка: добавление требуемых параметров постфактум

Я хочу иметь возможность добавлять некоторые требования к настраиваемому файлу:

define daemontools::service(
  $ensure = 'running',
  $source
){
  case $ensure {
    'running': { $real_ensure = $source }
    'stopped': { $real_ensure = 'absent' }
    default: { fail("no such ensure for daemontools::service") }
  }

  file{"/etc/service/${name}":
    ensure => $real_ensure,
    require=> Package['daemontools']
  }

  # This is the part that gets confusing
  if $require {
    File["/etc/service/${name}"]{ require +> $require }
  }
}

# in some other class somewhere

daemontools::service{"tinydns": 
  source=>'/var/tinydns', 
  require => [Package['djbdns'],Exec['tinydns_setup']]
}

В LanguageTutorial кажется, что это сработает, но это приводит только к сообщению об ошибке: Parameter 'require' is already set on File[/etc/service/tinydns] by daemontools::service

Избавьтесь от if $require - это совершенно не нужно. Метапараметры, такие как require, применяются к определенным типам так же хорошо, как и к собственным типам, поэтому ничего в вашем daemontools::service ресурс будет работать до тех пор, пока требования к нему не будут успешно выполнены.