一、类的使用

类是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使用概述2(入门篇2)_puppet

定义并声明类:

#声明类也可以使用: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

Puppet使用概述2(入门篇2)_运维自动化_02

至此,类ntp就定义好了,赶紧在客户端测试下:

Slave执行:

puppet agent --no-daemonize --verbose --test --server=master.test.com

Puppet使用概述2(入门篇2)_puppet_03

可以看到,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

Puppet使用概述2(入门篇2)_运维自动化_04

#建议使用默认的/etc/puppet/modules路径作为模块路径,否则需要修改puppet.conf文件(自定义modulepath)或者引用模块的时候加入绝对路径

模块示例如下:(建立一个ntp模块,结构如下图)

Puppet使用概述2(入门篇2)_puppet_05

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'],
      }
}

Puppet使用概述2(入门篇2)_puppet_06

e.客户端测试

Puppet使用概述2(入门篇2)_运维自动化_07

可以看到,客户端已经自动安装好ntp并将其服务设置为running状态。