如何使puppet类依赖于它定义的所有资源?

如何使puppet类依赖于它定义的所有资源?,puppet,Puppet,我正在处理一个相当大且复杂的puppet模块,我遇到了一个问题,在这个问题中,声明对类的依赖并不能转化为对该类中定义的类资源的依赖。我创造了一个例子 node default { notify {'This is my notification': require => Class['big_class'], } class {'big_class':} } class big_class { notify {'This is my big class':}

我正在处理一个相当大且复杂的puppet模块,我遇到了一个问题,在这个问题中,声明对类的依赖并不能转化为对该类中定义的类资源的依赖。我创造了一个例子

node default {
  notify {'This is my notification':
    require => Class['big_class'],
  }
  class {'big_class':}
}

class big_class {
  notify {'This is my big class':}
  class {'little_class':}
}

class little_class{
  notify {'This is my little class':}
  class {'smallest_class':}
}

class smallest_class {
  notify {'This is my smallest class':}
}
我期望的行为是在通知之前解决最小、最小和最大的问题。但木偶不是这样工作的。运行结果如下:

Notice: This is my little class
Notice: /Stage[main]/Little_class/Notify[This is my little class]/message: defined 'message' as 'This is my little class'
Notice: This is my big class
Notice: /Stage[main]/Big_class/Notify[This is my big class]/message: defined 'message' as 'This is my big class'
Notice: This is my notification
Notice: /Stage[main]//Node[default]/Notify[This is my notification]/message: defined 'message' as 'This is my notification'
Notice: This is my smallest class
Notice: /Stage[main]/Smallest_class/Notify[This is my smallest class]/message: defined 'message' as 'This is my smallest class'
Notice: Finished catalog run in 0.05 seconds
在“This is my notification”(这是我的通知)之后解析的最小类,即使它是在通知的“要求”中有效定义的。处理此类塞纳里奥事件的最佳做法是什么?如果这是所需的行为,是否有方法声明类中定义的资源是该类的需求?
类class\u name
中的所有资源是否需要在class['class\u name']之前有一个元参数

编辑:以下结果将导致依赖循环

class smallest_class {
  notify {'This is my smallest class':
    before => Class['smallest_class'],
  }
}
因此,在清单上生成一个点,我们可以看到类之间没有实际的依赖关系

有几个选项可以解决这个问题

  • 在notify语句之间的类中创建精确的依赖关系(非理想)
  • 使用
  • 使用puppetlabs stdlib模式
  • 如果运行puppet>=3.4,则它们有一个新函数