一、类的使用
类是puppet中分离代码块的一种方法,它是资源的集合,通过把相关联的资源放置在同一个类中,可以有效的减小puppet结构的复杂性,使得管理、维护更方便,而且类可以被其他地方(比如模块)调用。类的使用包含两部分:类的定义和类的声明。
官网详细介绍:http://docs.puppetlabs.com/learning/modules1.html
Master操作:
mkdir /etc/puppet/files
下载ntp.conf配置文件到/etc/puppet/files
http://docs.puppetlabs.com/learning/files/examples/modules/ntp/files/ntp.conf.el
http://docs.puppetlabs.com/learning/files/examples/modules/ntp/files/ntp.conf.debian
编辑/etc/puppet/fileserver.conf,添加:
[files]
path /etc/puppet/files
allow *
定义并声明类:
#声明类也可以使用:puppet apply /etc/puppet/manifests/site.pp(非自动,不建议),而在类的定义中加入include 类名称 则表示自动声明类
编辑/etc/puppet/manifests/site.pp,添加如下内容:
#/etc/puppet/manifests/site.pp class ntp { case $operatingsystem { centos, redhat: { $service_name = 'ntpd' $conf_file = 'ntp.conf.el' } debian, ubuntu: { $service_name = 'ntp' $conf_file = 'ntp.conf.debian' } } package { 'ntp': ensure => "present", } file { 'ntp.conf': path => '/etc/ntp.conf', ensure => file, require => Package['ntp'], source => "puppet://${puppetmaster}/files/${conf_file}", } service { 'ntp': name => $service_name, ensure => "true", enable => "true", subscribe => File['ntp.conf'], } } include ntp
至此,类ntp就定义好了,赶紧在客户端测试下:
Slave执行:
puppet agent --no-daemonize --verbose --test --server=master.test.com
可以看到,ntpd状态已经由stopped切换到running了。
二、模块
模块则是一个高级的,便于移植的资源容器,包含类、定义及其他一些Puppet支持的配置。可以理解为类的增强版。模块名(以及类名)必须是普通字符(首字母小写),只能包括字母、数字、下划线以及短横线。
Modules主要使用3个目录,manifests,files,templates。其中manifests目录用于存放init.pp文件以及其他配置文件。init.pp文件是模块的核心,每个模块都必须拥有一个init.pp文件。files目录用于存放那些属于模块一部分的文件。templates目录则包含模块可能会用到的任何模板。建议模块所需要的文件全部放在该模块的路径下,这样就可以直接拷贝该模块。Puppet官网已经提供了许多的模块,大家可以根据需要下载并适当修改,如果有需要也可以自己写模块,官方模块下载地址: http://forge.puppetlabs.com/
查看模块引用路径:
puppet agent --configprint modulepath
puppet agent --configprint all|grep module
#建议使用默认的/etc/puppet/modules路径作为模块路径,否则需要修改puppet.conf文件(自定义modulepath)或者引用模块的时候加入绝对路径
模块示例如下:(建立一个ntp模块,结构如下图)
a.建立模块路径:
cd /etc/puppet/modules
mkdir -p ntp/{manifests,files,templates}
b.编辑/etc/puppet/manifests/site.pp,添加
node /\.*\.test\.com/ {include ntp }
c.将ntp.conf.el和ntp.conf.debian拷贝到/etc/puppet/modules/ntp/files
d.编辑/etc/puppet/modules/ntp/manifests/init.pp,添加:
#/etc/puppet/modules/ntp/manifests/init.pp class ntp { case $operatingsystem { centos, redhat: { $service_name = 'ntpd' $conf_file = 'ntp.conf.el' } debian, ubuntu: { $service_name = 'ntp' $conf_file = 'ntp.conf.debian' } } package { 'ntp': ensure => "present", } file { 'ntp.conf': path => '/etc/ntp.conf', ensure => file, require => Package['ntp'], source => "puppet:///modules/ntp/${conf_file}", } service { 'ntp': name => $service_name, ensure => "true", enable => "true", subscribe => File['ntp.conf'], } }
e.客户端测试
可以看到,客户端已经自动安装好ntp并将其服务设置为running状态。