Вы имеете в виду, как у вас есть пакет, указанный дважды? Основной ответ заключается в том, что require
на одном конце отношения совпадает с before
на другом конце отношения. Это позволяет перемещать спецификацию отношения на элемент, который должен быть внутри условной:
class nginx::package {
case $operatingsystem {
'debian': {
apt::preference { 'nginx':
package => 'nginx nginx-common',
priority => '600',
release => 'a=squeeze-backports',
before => Package['nginx'];
}
}
default: {} # nothing
}
package { 'nginx':
ensure => present,
}
}
Прочитать puppet metaparameter docs для получения дополнительной информации.
Другая альтернатива с более новыми версиями кукольный является использование chaining как:
class nginx::package {
case $operatingsystem {
'debian': {
apt::preference { 'nginx': ...}
Apt::Preference['nginx'] -> Package['nginx']
}
default: {}
}
package { 'nginx': ... }
}
И, наконец, есть Package['nginx'] { require => Apt::Preference['nginx'] }
синтаксис вы можете позвонить, чтобы добавить требование к пакету, но я считаю, что необходимо вы делая это в унаследованном классе, что усложнит ситуацию в вашем примере, и теперь, когда доступ к цепочке ресурсов более полезен для вещей, отличных от до/после/подписаться/уведомлять об изменениях в ресурсах.
class nginx::package::aptpreference inherits nginx::package {
Package['nginx'] { require => Apt::Preference['nginx'] }
}
class nginx::package {
case $operatingsystem {
'debian': {
apt::preference { 'nginx': ...}
include nginx::package::aptpreference
}
default: {}
}
package {...}
}