模块内的 Puppet 类依赖关系

模块内的 Puppet 类依赖关系

目前,我正在编写一个 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::commonpackageconfigsensu::commonincludesensu::server::config

您可能希望与包含所需资源的类建立关系;您实际上是在为一个类中的每个资源与另一个类中的每个资源(无论需要其中哪一个,或两者)创建一个需要关系:

Class['sensu::common::package'] -> Class['sensu::server::config']
Class['sensu::common::config'] -> Class['sensu::server::config']

相关内容