Вы имеете в виду, как у вас есть пакет, указанный в два раза? Основной ответ заключается в том, что 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 - использовать цепочка , например:
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 {...}
}