我们如何编写一个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)
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"标签(类名,模块名称等)触发与任何资源相关的电子邮件.