目前,我正在编写一个 puppet 模块来管理我的 sensu 配置。
将整个内容分成几个类,并将它们放入 sensu“manifests”目录中的相应文件中:
sensu::common (common.pp)
sensu::common::package (common/package.pp)
sensu::common::config (common/config.pp)
sensu::server (server.pp)
sensu::server::config (server/config.pp)
在我的server.pp
,我有以下内容
class sensu::server {
include sensu::common
include sensu::server::config
Class['sensu::common'] -> Class['sensu::server::config']
}
看起来nodes.pp
像这样:
class role_monitoring_server {
$my_role = 'monitoring_server'
...
include sensu::server
}
node my_cool_server {
include role_monitoring_server
}
大多数人可能已经猜到了,我在类依赖性方面遇到了麻烦server.pp
:
Class['sensu::common'] -> Class['sensu::server::config']
根本行不通。该类sensu::server::config
需要将文件放置在目录中,该文件只能由 来创建sensu::common
。问题是, 总是sensu::server::config
会像预期的那样在 之前应用sensu::common
,而不是在 之后应用。
我错过了什么?网上有很多问题,但我就是找不到答案,因为我不知道该寻找什么。
答案1
您正在与类创建依赖关系,但与它的“子级”和之间sensu::common
没有隐式依赖关系。因此,除非您的配置看起来不同(我假设该类只有几行?),否则仍然可以随时针对该类应用这些配置。sensu::common
package
config
sensu::common
include
sensu::server::config
您可能希望与包含所需资源的类建立关系;您实际上是在为一个类中的每个资源与另一个类中的每个资源(无论需要其中哪一个,或两者)创建一个需要关系:
Class['sensu::common::package'] -> Class['sensu::server::config']
Class['sensu::common::config'] -> Class['sensu::server::config']