根据服务状态执行Puppet Code

时间:2011-12-30 15:28:40

标签: puppet

我们如何编写一个puppet清单代码,用于标识服务(httpd)是否在puppet客户端/代理上运行。如果没有,它应该启动该服务并发送电子邮件?

class apache {
    package { mysql-server: ensure => installed }
    if hasstatus == "false" {
        service { "mysql":
            ensure => running,
            require => Package["mysql-server"],
        }
    }
}

node default {
    include apache
}

我知道这不是一个正确的代码。但我想首先检查一下hasstatus,如果服务状态为false,那么我想开始服务并发送一封电子邮件。

由于 Sanket Dangi


我已经在puppet master中配置了tagmail.conf,并且还启用了puppet报告但是无法接收到我的gmail帐户的邮件。我可以在puppet master上看到puppet agent报告,但是没有收到邮件。我需要为此配置邮件服务器吗?

My Tagmail Conf : 
all: xxxxxxx@gmail.com

1 个答案:

答案 0 :(得分:7)

Puppet不是命令式shell脚本,您需要在执行操作Y之前检查X的值,使您进入Z状态。相反,您指定希望状态Z和Puppet检查当前状态并处理转换

这意味着您在决定是否启动服务之前不需要检查服务的状态,而是声明 mysql 服务应该正在运行< / em>和Puppet确保是这种情况。

只需在package行旁边的清单中显示此内容:

service { "mysql":
  ensure  => running,
  enable  => true,
  require => Package["mysql-server"],
}

require行确保在评估或启动服务之前安装软件包。

要发送通知,您可以使用Puppet中的tagmail报告功能。首先在主服务器/etc/puppet/tagmail.conf上设置这样的tagmail文件(reference docs):

mysql, apache: wwwadmins@example.com

在master的puppet.conf中,设置:

[master]
reports = tagmail

确保客户在puppet.conf中启用了报告:

[agent]
report = true

然后应该使用“mysql”或“apache”标签(类名,模块名等)触发与任何资源相关的电子邮件。