您的意思是您如何将包裹列出两次?基本答案是,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 元参数文档以获取更多信息。
较新版本的 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 {...}
}