puppet安装与使用--模块结构(iptables与rsync模块)
模块结构
一个模块就是一个/etc/puppet/modules目录下面的一个目录和它的子目录,在puppet的主文件site.pp里面用import modulename可以插入模块。新版本的puppet可以自动插入/etc/puppet/modules目录下的模块。引入模块,可以结构化代码,便于分享和管理。
例如关于apache的所有配置都写到apache模块下面。一个模块目录下面通常包括三个目录:files,manifests,templates。manifests 里面必须要包括一个init.pp的文件,这是该模块的初始(入口)文件,导入一个模块的时候,会从init.pp开始执行。可以把所有的代码都写到init.pp里面,也可以分成多个pp文件,init 再去包含其他文件。files目录是该模块的文件发布目录,puppet提供一个文件分发机制,类似rsync的模块。templates 目录包含erb模型文件,这个和file资源的template属性有关。
网上有好多结构图,还不错
结构类似,自己也可以跟着创建相应目录,如下图,我的测试机器上目录结构:
结构与上叙述完全相同,每个模块下manifests下总会有一个init.pp文件,总规是一个套一个
iptalbes模块例子使用
结构与上,在/etc/puppet/modules模块下增加rsync模块
事先要把给客户端定制好的iptables.sh脚本放入files下,编写init.pp
创建一个class 类,在模块modules.pp中调用即可,主入口为site.pp,所以在site.pp要调用modules.pp
上图中难理解的就是source => "puppet://$fileserver/iptables/iptables.sh",这个是puppet代码中就写好的,每个模块files下面的文件,都可以写成 puppet://$fileserver/模块名/files文件下的文件名" 来调用 notify指定了顺序,在执行exec前执行file,因为puppet程序里面定义的资源是同时执行的,不分先后,所以控制先后顺序必须的利用某个参数
模块写好后,看/etc/puppet下文件 内容,如下:
在modules.pp中 import "模块名”,在site.pp里面 import modules.pp
还有个节点pp,可义为nodes.pp,在init.pp里也有import,nodes.pp里面可以这样写
node default {
include 'iptables'}
对默认节点使用iptables,要结某个节点使用iptables,可以node '节点名' {}
验证测试
rsync模块例子使用
Puppet结合rsync同步文件是参考网上一篇文章,模块是由别人写的,可以下载自由使用,但测试后,发现rsync客户端同步还是有问题,所以自己在里面填了部分client,可以实现文件同步
参考文章网址:http://www.mysqlops.com/2012/02/20/puppet-rsync.html#comment-1564
当然,同步文件也可以使用puppet文件服务器,要用到fileserver.conf文件 ,同步小文件可以,但考虑到要同步大文件还是考虑用rsyncx效率要高点
根据文章中,先下载两个模块到modules
cd /etc/puppet/modules/
git clone https://github.com/onyxpoint/pupmod-concat && mv pupmod-concat concat
git clone https://github.com/onyxpoint/pupmod-rsync && mv pupmod-rsync rsync
Git如果没有装的话,yum下,git好象类似svn(有待研究),git时可能会报个错,如下解决即可
Cloning into cancan…
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while
。。。。。
解决办法:
git config --global http.sslVerify false
下载后,就该配rsync服务了,我选择puppet1(server)作为rsync-server,在node.pp里面如下配置
在puppet1运行 puppetd --test --server puppet1 ,即可生成rsyncd.conf文件,启动rsync服务
(注意:防火墙中要过滤873服务端口)
rsyncd的配置文件 应该大家不默认,不多说了
服务端配置好后,需要配置客户端了,但按上面那个链接来做,我没有成功,可能跟版本有关,大家可以尝试下他的做法,我现在共享下我的做法
cd /etc/puppet/modules/rsync/manifests/
进到下载的模块后,有init.pp server server.pp 3个文件,观察里面内容,可自己编写
client.pp client/rs.pp
回到note.pp 对节点puppet2做下面配置,
注:上面rsync在服务端配置两模块,default和test,对应路径都为puppet1下/usr/local/src
在note.pp对节点2中,我写的是定义的模块名,所以意思就是把puppet1/usr/local/src下的文件同步到puppet2下的/tmp/test /tmp/test1
验证测试:
在puppet1上,有两文件
在puppet2上
同步成功
Puppet 功能非常强大,自身包括了很多的资源,根据自己的爱好和自己工作实际所需,可以有选择有研究,还有cron也是很好用的,并且配置也是比较简单的,有兴趣的可以一起研究
转载于:https://blog.51cto.com/wanglq/830513