puppet安装与使用--配置文件及常用资源

安装完puppet后,然后需要了解下puppet 配置文件和一些常用资源的使用
 1、默认情况下,配置文件位于/etc/puppet目录下

moudulesnamsapceauth.confyum安装后没有,可自行创建

  1).auth.confnamespaceauth.conf应该是一些认证,里面配置有先生顺序
  2).modules目录,里面存放一些自定义的模块,在manifests中调用,在modules某模块结构如下:
             manifests  #存放代码,另外init.pp必须存在
             files       #存放用于同步到客户端的文件
             templates  #存放模板
  3).manifests目录,里面存放site.pp 程序主入口
  4).fileserver.conf,文件服务配置文件,格式如下:
    [tools]
    path /etc/puppet/modules/
    allow 
  5). puppet.conf,服务启动主配置文件
    配置文件命名空间 
    main 通用配置选项
    puppetd 客户端配置选项
    puppetmasterd 服务端配置选项

    main命名空间选项
    confdir 配置文件目录,默认在/etc/puppet
    vardir 动态数据目录,默认在/var/puppet
    logdir 日志目录,默认在$vardir/log
    rundir puppet PID目录,默认在$vardir/run
    statedir state目录,默认在$vardir/state
    statefile state文件,默认在$statedir/state.yaml
    ssldir SSL证书目录,默认在$confdir/ssl
    trace 发生错误时显示跟踪信息,默认false
    filetimeout 检测配置文件状态改变的时间周期,单位秒,默认15
    syslogfacility 指定syslog功能为user级,默认为daemon

    puppetmasterd命名空间选项
    user 后台进程执行的用户
    group 后台进程执行的组
    mainfestdir mainfests文件存储目录,默认为$confdir/mainfests
    mainfest mainfest站点文件的名字,默认为site.pp
    bindaddress 后台进程绑定的网卡地址接口
    masterport 后台进程执行的端口,默认为8140

    puppet命名空间选项
    server puppet puppet服务器,默认为puppet
    runinterval seconds puppet应用配置的时间间隔,默认1800秒(0.5小时)
    puppetport port 后台进程执行的端口,默认8139

  6).autosign.conf,自动答名,格式如下:
     *                       表示所有
    puppet*                  puppet头的所有
    192.168.140.0/24    网段
    事先要在puppet.conf[puppetmaster]下填加
    autosign=true   
    autosing=/etc/puppet/autosign.conf 这两行

2Puppet能管理的资源有很多,常见的也是常用的,有file,exec,package,service,cron(各个资源参数可以用法使用下面命令可以查到,简单说下常用的参数)

     Puppet describe  --list      查询所支持的资源
     Puppet describe  file       查看该资源的用法
  1).puppet file资源管理
   【puppet file 参数介绍】   

     backup

决定文件的内容在被修改前是否进行备份利用filebucket对文件进行备份,按文件的md5sum进行归类,便于恢复文件的时候找到文件.可以把文件备份到 puppet 客户端,也可以通过设置backpup => bucket_name 把文件备份到网络上的其他机器如果backup的值是一个点号”.”开头的字符串,puppet会把文件备份在同一目录下,备份文件的扩展名就是 bakcup里面的那个字符串.如果设置 backup => false , 该文件不做备份.

     checksum
   怎样检查文件是否被修改,这个状态用来在复制文件的时候使用这里有几种检测方式,包括md5 ,mtime,time,timestamp.
   默认的检测是用md5
 
     content
   把文件的内容设置为content 参数后面的字符串新行,tab,空格可用 escaped syntax 表示

     ensure
   如果文件本来不存在是否要新建文件,可以设置的值是 absentpresent,filedirectory. 如果指定 present,就会检查该文件是否存在,如果不存在就新建该文件,如果指定是 absent, 就会删除该文件(如果recurse => true ,就会删除目录).

    force
    force 当前的唯一作用是用在把一个目录变成一个链接,可用的值是turefalse

    group
   指定那个该文件的用户组,值可以是gid或者组名

    ignore
   当用recursion 方法复制一个目录的时候,可以用ignore来设定过滤条件,符合过滤条件的文件不被复制使用ruby自带的匹配法则.因此shell级别的过滤表达式完全支持,例如[a-g]*
  
   links
   定义操作符合链接文件可以设置的值是followmanage; 文件拷贝的时候,设置follow,会拷贝文件的内容,而不是只拷贝符合链接本身,如果设置成manage ,会拷贝符合链接本身.
   
   Mode
   mode用于设置文件的权限
   
   owner
   设置文件的属主
   
   path
   指定要管理文件的路径,必须用引号引起来这也是一个资源的 namevar ,通常path 等于资源的title
   
   recurse
   设置是否以及如何进行递归操作可以设置的值是 false,true ,inf ,remote
   
   source
    拷贝一个文件覆盖当前文件,checksum来判断是否有必要进行复制,可以设置的值是一个引用的完整的文件路径,或者是URI,当前支持的URI只有puppetfile ; 这是一个对文件常用的操作,可以让puppet修改系统的配置文件.
    target
   是为创建链接的。可以设置的值为notlink.
   type 
   检查文件是否只读

 2).puppet exec资源管理
  puppet exec 参数介绍】

    command:将会被执行的命令,必须为被执行命令的绝对路径,或者得提供该命令的搜索路径。如果命令被成功执行,所有的输出会被记录在实例的正常(normal)日志里,但是如果命令执行失败(既返回值与我们所指定的不同),那么所有的输出会在错误(err)日志中被记录。
这个是exec资源类型的名变量(namevar)。

    creates:
  指定命令所生成的文件。如果提供了这个参数,那么命令只会在所指定的文件不存在的情况的被执行: 
    cwd:
  指定命令执行的目录。如果目录不存在,则命令执行失败。
    Group
   定义运行命令的用户组。在不同的平台下的运行的结果无法确定,由于不同用户运行命令的时候,变量是不变的,所以这是平台的问题,而不是RubyPuppet的问题。

   logoutput

   是否记录输出。默认会根据exec资源的日志等级(loglevel) 来记录输出。若定义为on_failure,则仅在命令返回错误的时候记录输出。可取的值为:truefalse和其他合法的日志等级。
 

    Onlyif

    如果这个参数被设定了,则exec只会在onlyif设定的命令返回0时才执行。例如:

    exec { "logrotate": path => "/usr/bin:/usr/sbin:/bin", onlyif => "test `du /var/log/messages | cut -f1` -gt 100000" }

    只有在test返回true的时候logrotate才会被运行。
     需要注意的是onlyif定义的命令跟主命令遵循同样的规则,也就是说如果path没有被设置的话,需要使用绝对路径。

    除此之外,onlyif还可以接受数组做为其值,例如:

    onlyif => ["test -f /tmp/file1", "test -f /tmp/file2"]

   上面的代码限定了只有在所有数组中的条件返回trueexec才会被执行。

    path

命令执行的搜索路径。如果path没有被定义,命令需要使用绝对路径。路径可以以数    组或以冒号分隔的形式来定义。

    refresh

    定义如何更新命令。当exec收到一个来自其他资源的事件时,默认只会重新执行一次   命令。不过这个参数允许你定义更新时执行不同的命令。

    refreshonly

  该属性可以使命令变成仅刷新触发的,也就是说只有在一个依赖的对象被改变时,命令才会被执行。仅当命令与其他对象有依赖关系时,这个参数才有意义。当你要触发某个行为时,会显得很有用:

# Pull down the main aliases file file { "/etc/aliases": source => "puppet://server/module/aliases" } # Rebuild the database, but only when the file changes exec { newaliases: path => ["/usr/bin", "/usr/sbin"], subscribe => File["/etc/aliases"], refreshonly => true }

要注意的是只有subscribenotify可以促发行为,而不是require,所以在使用refreshonly时,只有同时使用subscribenotify才有意义。有效的值为true, false

unless

如果这个变量被指定了,那么exec会执行,除非unless所设定的命令返回0?

user

定义运行命令的用户。 注意如果你使用了这个参数,那么任何的错误输出不会在当下被捕捉,这是Ruby的一个bug

 
3).puppet package资源管理
 puppet package 参数介绍】

adminfile 

软件包管理器,通常是为了安装软件包。这个参数只适用于Solarias

allowcdrom
告诉 apt 允许使用cdrom作为软件源可以设置成false或者 true

category
软件包设置的一个只读的属性

configfiles
是否保留或者替换软件的配置文件,大多数软件不支持这个参数,可设置的值是false,true

description
描述软件包,软件包设置的一个只读属性

ensure
设置该软件包应该在什么状态. installed 表示要安装该软件,也可以写成present; absent 表示反安装该软件,pureged 表示干净的移除该软件,latest 表示安装软件包的最新版本.

namevar
该资源的namevar ; 软件包的名字

   

4).puppet service资源管理
  puppet service 参数介绍】
  binary :可执行文件。这个只用在不支持init脚本的情况下。
  control :用来管理服务的,通常是用在hp-unix系统上。
  enable :服务是否随开机而启动,可设置的值为true,false.
  ensure: 服务是否运行,可设置的值为running,stopped,也可以用true,false.
  hasrestart: 服务的init脚本是否支持restart参数,可设置的值为true,false.
  hasstatus :服务的init脚本是否支持status参数,可设置的值为ture,false.
   manifest Specify a command to config a service,or a path to a manifest to do so.配置服务的命令,或者指定路径。
  name: 要运行的服务名字。
  path: 指定查找init 脚本的路径。
  pattern :搜索进程表匹配字符串,用于不支持init的脚本。
  provider The specific backend for provider to use,可设置的值有base, daemontools,init
  restart :重启服务。
  Start: 开启服务
  status :服务运行状态
  stop: 停止服务

5).puppet cron资源管理
  puppet cron 参数】

  command
  crontab要执行的命令环境变量按照系统本地规则进行管理,推荐使用绝对路径.

  ensure:指定该资源是否启用,可设置成truefalse

  environment:在crontab环境里面指定环境变量,例如 PATH=/bin:/usr/bin:/usr/sbin.

  hour 运行crontab的小时,可设置成0-23

  minute:运行crontab的分钟,可设置成0-59
  month 设置crontab运行的月份,1-12
  monthday:一个月份中的日子,1-31

  name
  crontab的名字,这个名字用于管理员区分不同的crontab,以及puppet管理各种资源关系.

  user

  把该crontab加到那个用户的crontab列表,默认是运行puppet的用户

  weekday

  运行crontab的星期数,0-7,周日是为0.


3简单使用例子
  puppet程序的主要入口在/etc/puppet/manifests/note.pp中,修改note.pp,如下配置
 node default {

       file {"/tmp/test":

            ensure => "directory";

            "/tmp/test/test.sh":

            ensure => "present",

            mode => 744,

            owner => root,

            content => "#/bin/bash\necho test | mail -s test [email protected]\n"}

       cron {"crontab":

            command => "/tmp/test/test.sh",

            user => root,

            minute => 59,

            hour => 7}

       exec {"test":

            command => "echo test>/tmp/test/test",

            user => "root",

            path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"}

       service {["smb","nfs"]:

            ensure => "stopped"}

       package {"screen":

            ensure => "installed"}

 }
上面简单例子解释:对于默认节点,在/tmp/下创建test目录,在test目录下再建立文件test.sh,内容为#/bin/bash  echo test | mail -s test [email protected],属主为root,属性744,并在每天759分执行此脚本,测试exec资源,在/tmp/test下用命令建立test文件,内容为test,使smb,nfs服务处于停止状态,安装screen 


验证:在服务端puppet1上执行puppetrn puppet3后,到客户端puppet3上查看

puppet安装与使用--配置文件及常用资源_第1张图片