我是比较新的傀儡,但到目前为止,认识到它是一个非常强大的工具。
对于一个简单的例子,假设我在模块ntp中有一个模块"ntp“,我有三个类:
我不确定如何将ntp类中的服务定义提供给ntp::client和ntp::服务器类。
我用事实来说明不同的操作系统以及包和服务的名称。为了避免混乱,我把它从我的例子中删除了。
而不是在每个类中都有类似于以下内容的内容:
service{ 'ntp':
name => $ntpservice,
ensure => running,
subscribe => File['ntpconf'],
}
package{ 'ntp':
(etc - I think the point has been communicated)我认为在ntp类中定义服务并从类ntp::client和ntp::server调用ntp类中的服务会更干净、更容易。基本上,由于多个平台(基于RHEL和Debian ),包和服务的定义可能略有不同。
我更希望在ntp::client和ntp::server中拥有如下内容:
file{ 'ntpconf':
source => 'puppet:///modules/ntp/ntp.conf',
owner => 'root',
group => 'root',
mode => '0644',
notify => Service[**CALL TO class ntp SERVICE**],
require => Package[**CALL TO class ntp PACKAGE**],
}我似乎记得前些时候在文档中读到,这是可以做到的,但我似乎再也找不到了。在我所标有的所有东西中,我没有给它做书签!
如有任何建议,将不胜感激。提前谢谢。
此外,我正在使用facts和casing来通过操作系统设置包名和服务名称的参数。我没有将这些信息包含在示例代码中,因为它工作得很好,看起来像是不必要的杂乱。
发布于 2012-08-06 14:43:11
我偶然发现了木偶自己认为是正确的解决办法。
我曾经读过应该避免继承,但是有一个例外,就是模块中的类--根据木偶风格-指南-等级继承的文档
由于这些人都是编写软件的人,我认为这是最好的解决方案。
基本上,如果我在类ntp中有上述包和服务定义,当我定义ntp::server类时,我将执行以下操作:
class ntp::server inherits ntp {这将提供我所需要的,并解决问题。
谢谢大家!
发布于 2012-07-31 22:08:58
我就是这样做的。使用ENC或Hiera根据服务器名称或角色进行查找,并决定是否包含ntp::server或诸如此类的内容可能会更加简洁,但这相当简单,不需要额外的软件或设置。
请记住,Puppet的继承模型是不正常的。除非你的使用非常简单,否则你会有麻烦的。我不会在任何模块中继承超过一次。
class ntp {
include ntp::install, ntp::config, ntp::sevice
Class['ntp::install'] -> Class['ntp::config'] ~> Class['ntp::service']
}
class ntp::config {
file { 'ntp.conf':
ensure => present,
content => template('ntp/ntp.erb'),
}
}
class ntp::config::server inherits ntp::config {
File['ntp.conf'] { content => template('ntp/ntp.conf.server.erb'), }
}
node basenode {
include ntp
}
node /^ntp\d+/ inherits basenode {
include ntp::config::server
}https://serverfault.com/questions/412499
复制相似问题