您的位置:首页 > 其它

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

2012-03-29 11:09 477 查看
puppet安装与使用--配置文件及常用资源

安装完puppet后,然后需要了解下puppet 配置文件和一些常用资源的使用

1、默认情况下,配置文件位于/etc/puppet目录下




moudules和namsapceauth.conf在yum安装后没有,可自行创建
1).auth.conf和namespaceauth.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 这两行

2、Puppet能管理的资源有很多,常见的也是常用的,有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

如果文件本来不存在是否要新建文件,可以设置的值是 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.

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 wangliqiang@kingsoft.com\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 wangliqiang@kingsoft.com,属主为root,属性744,并在每天7点59分执行此脚本,测试exec资源,在/tmp/test下用命令建立test文件,内容为test,使smb,nfs服务处于停止状态,安装screen包

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





本文出自 “理想CTO” 博客,请务必保留此出处http://wanglq.blog.51cto.com/783560/820262
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: