|
上一节中的模块其实只是同步了一个文件而已,那么要想同步一个目录如何做?我们可以通过实现同步一个目录来做一个包发布系统。 比如在一台机器上编译安装好了apache,那么就可以通过这样的模块把这个apache目录整个分发到其他机器上。
vim /etc/puppet/modules/testm/manifests/init.pp #编辑配置文件
模块配置文件如下:
class testm{
file {"/tmp/2.txt": #送往客户端的文件名,属性和内容来源
owner => "root",
group => "root",
mode => 0400,
source => "puppet://$puppetserver/modules/testm/1.txt"
}
}
#新定义的类
class apache{
file {"/usr/local/apache2": #同步到客户端后的文件路径
owner => "root",
group => "root",
source => "puppet://$puppetserver/modules/testm/apache2",
recurse => true,
purge => true
}}
其中recurse=>true 这个参数很关键,它表示递归的意思,没有这个不能同步目录。purge参数可以保证当服务端删除或修改某个文件,客户端可以跟着删除或修改。
然后在testm目录下,创建apache2目录。在这个目录下,创建conf、bin、logs三个目录。然后创建3个文件touch logs/1.log touch bin/apachectl touch conf/httpd.conf
最后编辑puppet主配置文件,加入新的类
vim /etc/puppet/manifests/site.pp //内容如下
$puppetserver = 'master.wyp.com' #定义模块配置文件中的变量
node 'client.wyp.com'{
include testm
include apache
}
配置完成后,在客户端执行命令:
puppet agent --test --server=master.wyp.com //如果客户端上启动了puppet服务,不用执行这命令,它也会自动同步的
课后答疑:
问:source => "puppet://$puppetserver/modules/testm/apache2",实际文件在testm/files目录下,而配置文件中直接在testm目录下
答:这个就是省略掉files目录的,它的特性。
问:类名至少要有一个与模块名一致吗?实验的时候,不一致就报错:
答:必须要一致。
|
|