引入模块,结构化代码,便于分享和管理。在管理大量服务器中,起到巨大的作用,模块文件会在site.pp都引用。
模块目录/etc/puppet/modules需要手动创建,modules目录下就是每个模块的目录
[root@master modules]# pwd
/etc/puppet/modules
[root@master modules]# ls
nginx test
一个模块目录结构,通常包括以下目录:
[root@server modules]# ls
files manifests templates
manifests里面必须要包括一个模块初始文件init.pp,导入一个模块的时候,会从init.pp开始执行。可以把所有的代码都写在init.pp里面,也可以分成多个pp文件,init再去包含其他文件。
files模块的文件发布目录。
templates目录包含erb模型文件,这个和file资源的template属性有关。
简单的模块
a.建立目录结构
[root@server ~]# mkdir -p /etc/puppet/modules/test/{manifests,files,templates}
b.建立init.pp文件
cd /etc/puppet/modules/test/
[root@server test]# vim manifests/init.pp
class test::test1 {
file { "/tmp/0802.txt":
content => "0802\n",
ensure => present,
owner => "root",
group => "root",
mode => 644,
}
}
###此处在test模块内定义了一个test1类
d.在/etc/puppet/manifests中配置site.pp
[root@server manifests]# vim site.pp
node "default" {
include test::test1
}
或者
##当然了,也可以这样,在site.pp里添加 import “nodes.pp”,然后在nodes.pp里添加
node "default" {
include test::test1
}
同时模块下的init.pp里内容也应该不变,class test::test1,而不能为class test
更建议这样操作
【客户端测试】
【多个模块】
[root@master modules]# ls
nginx test
[root@master manifests]# cat /etc/puppet/modules/nginx/manifests/init.pp
class nginx::test {
file { "/tmp/nginx.txt":
content => "nginx \n",
ensure => present,
owner => "root",
group => "root",
mode => 644,
}
}
接着修改服务器上的site.pp和nodes.pp,此时在修改下test模块内容,客户端同步的时候,看看会不会2个模块同时同步
【客户端测试】
【同步某个模块】
让客户端只同步某一个模块,而不是服务端的所有模块
修改/etc/puppet/manifests/nodes.pp
node default {
include nginx::ssh
}
只写一行,那么客户端只会去同步nginx下的ssh类了
【不同主机同步不同内容】
[root@master manifests]# pwd
/etc/puppet/manifests
[root@master manifests]# ls
69.pp 9.pp site.pp
[root@master manifests]# cat site.pp
import "9.pp"
import "69.pp"
[root@master manifests]# ls /etc/puppet/files
11.sh 1.sh 2.sh 3.sh 4.sh sysctl.conf
[root@master manifests]# cat 69.pp
node slave69 {
file {"/home/1.sh":
source=>"puppet:///share/1.sh",
mode=>755,
}
其中node 后的slave69为其中一台客户端的主机名字,这个pp就是相当于只更新slave69这台机器,其余的客户端都不更新
[root@master manifests]# cat 9.pp
node slave9 {
file {"/home/1.sh":
source=>"puppet:///share/1.sh",
mode=>755,
}
如果node后面跟的不是客户端的主机名,则会报错
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find default node or by name with
说找不到节点