RSS

puppet配置文件及常用资源

在使用 puppet 之前,先认识下 puppet 配置文件和一些常用资源的使用

img

一、默认情况下,配置文件

默认的配置文件在/etc/puppet/下
1.auth.conf 为认证配置文件
2.modules 目录,里面存放一些自定义的模块,在 manifests 中调用,在 modules 某模块结构如下
manifests  #存放代码,另外 init.pp 必须存在
files       #存放用于同步到客户端的文件
templates  #存放模板
3.manifests 目录,里面存放 site.pp 程序主入口
4.fileserver.conf,文件服务配置文件,格式如下:
[tools]
path /etc/puppet/modules/
allow

  1. puppet.conf,服务启动主配置文件
    配置文件命名空间
    main 通用配置选项
    puppetd 客户端配置选项
    puppetmasterd 服务端配置选项

main 命名空间选项
confdir 配置文件目录,默认在/etc/puppet
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 这两行

二、Puppet 管理的资源

可以用以下命令查看资源

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
如果文件本来不存在是否要新建文件,可以设置的值是 absent 和 present,file 和 directory. 如果指定 present,就会检查该文件是否存在,如果不存在就新建该文件,如果指定是 absent, 就会删除该文件(如果 recurse => true ,就会删除目录).

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

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

ignore
当用 recursion 方法复制一个目录的时候,可以用 ignore 来设定过滤条件,符合过滤条件的文件不被复制. 使用 ruby 自带的匹配法则.因此 shell 级别的过滤表达式完全支持,例如[a-g]*

links
定义操作符合链接文件. 可以设置的值是 follow 和 manage; 文件拷贝的时候,设置 follow,会拷贝文件的内容,而不是只拷贝符合链接本身,如果设置成 manage ,会拷贝符合链接本身.

Mode
mode 用于设置文件的权限

owner
设置文件的属主

path
指定要管理文件的路径,必须用引号引起来, 这也是一个资源的 namevar ,通常 path 等于资源的 title

recurse
设置是否以及如何进行递归操作, 可以设置的值是 false,true ,inf ,remote

source
拷贝一个文件覆盖当前文件,用 checksum 来判断是否有必要进行复制,可以设置的值是一个引用的完整的文件路径,或者是 URI,当前支持的 URI 只有 puppet 和 file ; 这是一个对文件常用的操作,可以让 puppet 修改系统的配置文件.
target
是为创建链接的。可以设置的值为 notlink.
type
检查文件是否只读

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

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

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

logoutput

是否记录输出。默认会根据 exec 资源的日志等级(loglevel) 来记录输出。若定义为 on_failure,则仅在命令返回错误的时候记录输出。可取的值为:true,false 和其他合法的日志等级。
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”]

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

 

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 }

要注意的是只有 subscribe 和 notify 可以促发行为,而不是 require,所以在使用 refreshonly 时,只有同时使用 subscribe 或 notify 才有意义。有效的值为 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:指定该资源是否启用,可设置成 true 或 false

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.