根据服务状态执行Puppet Code

San*_*ngi 1 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
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢Sanket Dangi


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

My Tagmail Conf : 
all: xxxxxxx@gmail.com
Run Code Online (Sandbox Code Playgroud)

Dom*_*eal 7

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

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

只需将此清单放在您的清单旁边package:

service { "mysql":
  ensure  => running,
  enable  => true,
  require => Package["mysql-server"],
}
Run Code Online (Sandbox Code Playgroud)

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

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

mysql, apache: wwwadmins@example.com
Run Code Online (Sandbox Code Playgroud)

在master的puppet.conf中,设置:

[master]
reports = tagmail
Run Code Online (Sandbox Code Playgroud)

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

[agent]
report = true
Run Code Online (Sandbox Code Playgroud)

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