パッケージが2回リストされている方法を意味しますか? 基本的な答えは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,
}
}
詳細については、パペット メタパラメータ ドキュメントを参照してください。
パペットの新しいバージョンでの別の代替手段は、次のような連鎖を使用することです。
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 {...}
}