首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个类中重新启动服务

在另一个类中重新启动服务
EN

Server Fault用户
提问于 2012-07-30 12:56:46
回答 2查看 7.8K关注 0票数 6

我是比较新的傀儡,但到目前为止,认识到它是一个非常强大的工具。

对于一个简单的例子,假设我在模块ntp中有一个模块"ntp“,我有三个类:

  • 类ntp -从分发包提供程序安装包,设置启动服务的信息,等等
  • 类ntp::client -创建配置文件以使用我的本地ntp服务器,停止ntp,强制ntpupdate,并启动ntp服务。
  • 类ntp::server -创建配置文件以生成本地ntp服务器,停止ntp,强制ntpupdate (在初始配置时),并启动ntp服务。

我不确定如何将ntp类中的服务定义提供给ntp::client和ntp::服务器类。

我用事实来说明不同的操作系统以及包和服务的名称。为了避免混乱,我把它从我的例子中删除了。

而不是在每个类中都有类似于以下内容的内容:

代码语言:javascript
复制
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中拥有如下内容:

代码语言:javascript
复制
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来通过操作系统设置包名和服务名称的参数。我没有将这些信息包含在示例代码中,因为它工作得很好,看起来像是不必要的杂乱。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2012-08-06 14:43:11

我偶然发现了木偶自己认为是正确的解决办法。

我曾经读过应该避免继承,但是有一个例外,就是模块中的类--根据木偶风格-指南-等级继承的文档

由于这些人都是编写软件的人,我认为这是最好的解决方案。

基本上,如果我在类ntp中有上述包和服务定义,当我定义ntp::server类时,我将执行以下操作:

代码语言:javascript
复制
class ntp::server inherits ntp {

这将提供我所需要的,并解决问题。

谢谢大家!

票数 1
EN

Server Fault用户

发布于 2012-07-31 22:08:58

我就是这样做的。使用ENC或Hiera根据服务器名称或角色进行查找,并决定是否包含ntp::server或诸如此类的内容可能会更加简洁,但这相当简单,不需要额外的软件或设置。

请记住,Puppet的继承模型是不正常的。除非你的使用非常简单,否则你会有麻烦的。我不会在任何模块中继承超过一次。

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/412499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档