为什么模块在puppet中使用类(而不是定义)

str*_*ger 5 puppet

我一直在为木偶创建几个类(在不同的模块中).两者分别需要maven.所以这两个类都有如下内容:

    class { "maven::maven":
        version => "3.0.5"
    }
Run Code Online (Sandbox Code Playgroud)

(使用来自puppet forge 的https://forge.puppetlabs.com/maestrodev/maven模块)

但是,如果我有一个节点同时拥有我的两个类,则puppet会因为类'maven :: maven'被声明两次而抱怨.我觉得我的每个课程都应该可以自由地宣布它需要的所有东西.如果一个节点有多个类都需要maven,那么我没有看到问题.

所以,我的问题是:该maven模块的作者是否使用了一个类错误,他应该使用一个定义吗?(因为你可以多次使用/调用/任何定义).看来,如果他使用了一个定义,我可以随意使用代码块,所以如果他使用一个类是正确的,为什么呢?

谢谢.

Evg*_*kiy 8

我认为这背后的基本原理最好在John Arundel的Puppet 3初学者指南中解释:

因此,如果您想知道使用哪个,请考虑:

  • 您是否需要在同一节点(例如,网站)上拥有多个此实例?如果是这样,请使用定义.
  • 这会导致与此节点上的同一事物的其他实例(例如,Web服务器)发生冲突吗?如果是这样,请使用课程.