5.5.5 如何根据节点机器名选择性地执行Shell程序

如果客户端机器nginx.cn7788.com 没有安装Nagios客户端程序,想要通过Puppet-Server推送Shell脚本自动安装,其他节点机器暂时不安装这个程序,又该如何实现呢?

与上一节一样,主要还是通过模块的方法来实现这个需求,先建立一个名为nagioscli的模块,命令如下所示:

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

mkdir -p /etc/puppet/modules/nagiosins/{manifests,files,templates}

在/etc/puppet/modules/nagioscli/files目录下安装Nagios客户端名为nagiosclil.sh的Shell程序,内容如下:

#!/bin/bash

useradd nagios

cd /usr/local/src

wget wget http://syslab.comsenz.com/downloads/linux/nagios-plugins-1.4.13.tar.gz

wget http://syslab.comsenz.com/downloads/linux/nrpe-2.12.tar.gz

tar zxvf nagios-plugins-1.4.13.tar.gz

cd nagios-plugins-1.4.13

./configure

make

make install

chown nagios:nagios /usr/local/nagios

chown -R nagios:nagios /usr/local/nagios/libexec

cd ../

tar zxvf nrpe-2.12.tar.gz

cd nrpe-2.12

./configure

make all

make install-plugin

make install-daemon

make install-daemon-config

sed -i 's@allowed_hosts=127.0.0.1@allowed_hosts=114.112.11.11@'/usr/local/nagios/etc/nrpe.cfg

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >> /etc/rc.local

node.pp的文件内容如下:

node 'nginx.cn7788.com'{

file

{"/usr/local/src/nagiosins.sh":

source => "puppet://server.cn7788.com/modules/nagiosins/nagiosins.sh",

group => root,

owner => root,

mode => 755,

}

exec {

"auto install naigios client":

command =>"sh /usr/local/src/nagiosins.sh",

user =>"root",

path => ["/usr/bin","/usr/sbin","/bin","/bin/sh">,

}

}

node 'client.cn7788.com'{

file

{"/usr/local/src/nagiosins.sh":

source => "puppet://server.cn7788.com/modules/nagiosins/nagiosins.sh",

group => root,

owner => root,

mode => 755,

}

exec {

"auto install naigios client":

command =>"sh /usr/local/src/nagiosins.sh",

user =>"root",

path => ["/usr/bin","/usr/sbin","/bin","/bin/sh">,

}

}

node 'fabric.cn7788.com'{

}

若节点机器client和fabric机器后面什么都没有,则表示在此节点机器上没有进行任何操作,因为client和fabric节点机器也在此Puppet环境里,并配置成了自动连接,如此配置,是为了防止自动连接时Puppet-Server频繁报错。

这里以client.cn7788.com 为例进行说明,在其主机上输入如下命令:

puppet agent --test --server server.cn7788.com

命令显示结果如下所示:

Info: Retrieving pluginfacts

Info: Retrieving plugin

Info: Caching catalog for client.cn7788.com

Info: Applying configuration version '1446693418'

Notice: /Stage[main]/Main/Node[client.cn7788.com]/Exec[auto install naigios client]/returns: executed successfully

Notice: Finished catalog run in 165.27 seconds

可以看到,执行时间比较长,总共耗时165.27秒,因此要检查下client.cn7788.com 的节点机器上是否开启了nrpe进程,输入如下命令:

ps aux | grep nrpe | grep –

v grep

命令显示结果如下所示:

nagios 22331 0.0 0.1 5108 924 ? Ss 22:35 0:00 /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

下面检查/etc/rc.local,看看此命令有没有添加进去,命令如下所示:

grep -v "^#" /etc/rc.local

命令执行结果显示如下:

touch /var/lock/subsys/local

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

检查结果说明Puppet-Master的nagioscli模块是正常的,在nginx.cn7788.com 上检测的结果类似,这里就不再贴出了。