一、file资源

练习1:建立文件
1.在服务端建立以下文件
[root@server ~]# cat /etc/puppet/manifests/site.pp
  1. node default { 
  2. file{"/tmp/aa.txt": 
  3. content => "Hello World! \n", 
  4. mode => 644, 
  5. owner => root, 
  6. group => root, 
2.在客户端上进行测试
[root@client ~]# puppetd -t --server server.example.com
info: Caching catalog for client.example.com
info: Applying configuration version '1332578576'
notice: /Stage[main]//Node[default]/File[/tmp/aa.txt]/ensure: defined content as '{md5}396f12fb95b95cd34b119ba330089b08'
notice: Finished catalog run in 0.02 seconds
[root@client ~]# cat /tmp/aa.txt 
Hello,World!
 
在/tmp目录下建立了aa.txt文件,内容由site.pp中content定义的。
 
练习2:传输文件,将服务端/usr/src目录下的文件httpd.tar.gz传输到客户端/root目录下
1.修改/var/pupet/fileserver.conf
[root@server ~]# cat /etc/puppet/fileserver.conf
  1. [files] 
  2. path /usr/src/ 
  3. allow 192.168.209.0/24 

2.修改/etc/puppet/manifests/site.pp
[root@server ~]# vim /etc/puppet/manifests/site.pp 

  1. node 'client.example.com' { 
  2. file{"/root/httpd.tar.gz": 
  3. source => "puppet://${fileserver}/files/httpd.tar.gz", 
3.测试
[root@client ~]# puppetd -t --server server.example.com
info: Caching catalog for client.example.com
info: Applying configuration version '1332580182'
notice: /Stage[main]//File[/root/httpd.tar.gz]/ensure: defined content as '{md5}d77fa5af23df96a8af68ea8114fa6ce1'
notice: Finished catalog run in 25.50 seconds
 
[root@client ~]# ls /root/httpd.tar.gz 
/root/httpd.tar.gz
 
练习3:修改某文件权限属性
1.修改/etc/puppet/manifests/site.pp
[root@server ~]# vim /etc/puppet/manifests/site.pp
  1. file {"/tmp/test.txt": 
  2. ower => "test", 
  3. group => "test", 
  4. mode => 777, 
2.测试
[root@client ~]# ll /tmp/test.txt 
-rw-r--r-- 1 root root 0 Mar 26 09:41 /tmp/test.txt
[root@client ~]# puppetd -t --server server.example.com
info: Caching catalog for client.example.com
info: Applying configuration version '1332726420'
notice: /Stage[main]//File[/tmp/test.txt]/owner: owner changed 'root' to 'test'
notice: /Stage[main]//File[/tmp/test.txt]/group: group changed 'root' to 'test'
notice: /Stage[main]//File[/tmp/test.txt]/mode: mode changed '644' to '777'
notice: Finished catalog run in 4.20 seconds
[root@client ~]# ll /tmp/test.txt 
-rwxrwxrwx 1 test test 0 Mar 26 09:41 /tmp/test.txt
 
file资源常见参数:
content
把文件的内容设置为content参数后面的字符串。
ensure
如果文件本来不存在是否要新建文件,有以下值:present检查该文件是否存在,如果不存在就新建文件。
absent就会删除该文件(如果recurse => true 就会删除目录)
force
force 当前的唯一作用是用在把一个目录变成一个链接,可用的值是ture和false
group
指定那个该文件的用户组,值可以是gid或者组名
owner:设置文件的属主
mode:mode用于设置文件的权限
recurse
设置是否以及如何进行递归操作, 可以设置的值是 false,ture ,inf ,remote
source
拷贝一个文件覆盖当前文件,用checksum来判断是否有必要进行复制,可以设置的值是一个引用的完整的文件路径,或者是URI,当前支持的URI只有puppet和file ;
 
二、service资源
练习:检查服务的启动情况
1.修改/etc/puppet/manifests/site.pp
[root@server ~]# vim /etc/puppet/manifests/site.pp
  1. service { 
  2. "mysqld": 
  3. ensure => running; 
  4. "atd": 
  5. ensure => stopped; 
2.测试
[root@client ~]# /etc/init.d/mysqld status
mysqld is stopped
[root@client ~]# /etc/init.d/atd status
atd (pid  3249) is running...
[root@client ~]# puppetd -t --server server.example.com
info: Caching catalog for client.example.com
info: Applying configuration version '1332729982'
notice: /Stage[main]//Service[mysqld]/ensure: ensure changed 'stopped' to 'running'
notice: /Stage[main]//Service[atd]/ensure: ensure changed 'running' to 'stopped'
notice: Finished catalog run in 5.69 seconds
[root@client ~]# /etc/init.d/mysqld status                
mysqld (pid 20418) is running...
[root@client ~]# /etc/init.d/atd status                
atd is stopped
 
service参数:
binary
运行服务的命令的路径, 只用于不支持init的操作系统, 如果没有指定启动脚本,就用这个命令来启动服务.
enable
服务在开机的时候是否启动,可以设置的值是true和false,需要provider支持enableable
ensure
是否运行服务, running表示运行服务,stopped 表示停止服务
hasrestart
指出管理脚本是否支持restart参数,如果不支持,就用stop和start实现restart效果. 可以设置的值是true 或 false
hasstatus
指出管理脚本是否支持status参数,puppet用status参数来判断服务是否已经在运行了,如果不支持status参数,puppet利用查找运行进程列表里面是否有服务名来判断服务是否在运行. 可以设置的值是true或false
name
该资源的namevar, 服务的名字,通常就是在/etc/init.d/目录下的名字
path
启动脚本的搜索路径,可以用冒号分割多个路径,或者用数组指定.
pattern
设置搜索进程列表的匹配字符串,用于不支持init脚本的系统.当要停止一个服务的时候,通过查看进程运行列表来判断.
provider
puppet提供下面的provider(只列出常见的系统)
debian debian系统的init模式的管理脚本,支持 enableable, refreshable.
freebsd init模式,支持enableable, refreshable.
init 标准的init模式,支持refreshable
redhat redhat的init模式,支持enableable, refreshable.
smf solaris新的服务管理框架,支持enableable, refreshable
restart
指定重启脚本,否则就先停止该服务再启动该服务
start
指定启动服务的命令,通常init模式的管理脚本都支持,不需要手工指定
status
指定status命令,如果不指定,就从进程列表查询该服务
stop
指定停止服务的脚本.
 
三、crontab任务
练习:cron计划任务,建立计划每分钟向执行一次/root/hello.sh脚本
1.修改/etc/puppet/manifests/site.pp
[root@server ~]# vim /etc/puppet/manifests/site.pp
  1. cron { "cron-test": 
  2. command => "sh /root/hello.sh", 
  3. user => root, 
  4. minute => 1, 
2.测试
[root@client ~]# puppetd -t --server server.example.com
info: Caching catalog for client.example.com
info: Applying configuration version '1332730983'
notice: /Stage[main]//Cron[cron-test]/ensure: created
notice: Finished catalog run in 4.36 seconds
[root@client ~]# crontab -l
# HEADER: This file was autogenerated at Mon Mar 26 11:03:02 +0800 2012 by puppet.
# HEADER: While it can still be managed manually, it is definitely not recommended.
# HEADER: Note particularly that the comments starting with 'Puppet Name' should
# HEADER: not be deleted, as doing so could cause duplicate cron jobs.
# Puppet Name: cron-test
1 * * * * sh /root/hello.sh
 
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管理各种资源关系.
provider
指定provider,可用的provider有
crontab 默认的crontab程序
special 特殊的管理程序,只能在freebsd上面用
user
把该crontab加到那个用户的crontab列表,默认是运行puppet的用户
weekday
运行crontab的星期数,0-7
 
四、exec资源
练习:执行SHELL命令或shell脚本,执行/root/下的touch.sh
1.修改/etc/puppet/manifests/site.pp
[root@server ~]# vim /etc/puppet/manifests/site.pp
  1. exec { "exec-shell": 
  2. cwd => "/root", 
  3. command => "sh /root/touch.sh", 
  4. user => "root", 
  5. path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin", 
2.测试
[root@client ~]# cat touch.sh 
#!/bin/bash
touch shell.txt
[root@client ~]# puppetd -t --server server.example.com
info: Caching catalog for client.example.com
info: Applying configuration version '1332731948'
notice: /Stage[main]//Exec[exec-shell]/returns: executed successfully
notice: Finished catalog run in 4.30 seconds
[root@client ~]# ll shell.txt 
-rw-r--r-- 1 root root 0 Mar 26 11:19 shell.txt
 
exec参数:
command
将会被执行的命令,必须为被执行命令的绝对路径,或者得提供该命令的搜索路径。
cwd
指定命令执行的目录。如果目录不存在,则命令执行失败。
path
命令执行的搜索路径。如果path没有被定义,命令需要使用绝对路径。路径可以以数组或以冒号分隔的形式来定义。
user
定义运行命令的用户
timeout
命令运行的最长时间
onlyif
如果这个参数被设定了,则exec只会在onlyif设定的命令返回0时才执行
creates:指定命令所生成的文件。如果提供了这个参数,那么命令只会在所指定的文件不存在的情况的被执行。
unless:unless所设定的命令返回0时才执行。
refreshonly:触发刷新动作。
 
五、package资源
练习:软件包安装
1.修改/etc/puppet/manifests/site.pp
[root@server ~]# vim /etc/puppet/manifests/site.pp
  1. node default{ 
  2. package { 
  3.         "php": 
  4.         ensure => installed; 
2.测试
[root@client ~]# rpm -qa php
[root@client ~]# puppetd -t --server server.example.com
info: Caching catalog for client.example.com
info: Applying configuration version '1332785724'
notice: /Stage[main]//Node[default]/Package[php]/ensure: created
notice: Finished catalog run in 8.76 seconds
[root@client ~]# rpm -qa php
php-5.1.6-27.el5
 
package参数:
allowcdrom
告诉 apt 允许使用cdrom作为软件源, 可以设置成false或者 true
category
软件包设置的一个只读的属性
configfiles
是否保留或者替换软件的配置文件,大多数软件不支持这个参数,可设置的值是false,true
description
描述软件包,软件包设置的一个只读属性
ensure
设置该软件包应该在什么状态. installed 表示要安装该软件,也可以写成present; absent 表示反安装该软件,pureged 表示干净的移除该软件,latest 表示安装软件包的最新版本.
namevar
该资源的namevar ; 软件包的名字
provider
指定使用什么provider来提供软件包管理功能,可用的值是 (只列出常用的部分):
appdmg 支持的特性是: installable
apt 通过 apt-get安装软件, 支持的特性 : installable, purgeable, uninstallable, upgradeable, versionable.
aptitude 通过 apt-get安装软件, 支持的特性 : installable, purgeable, uninstallable, upgradeable, versionable.
aptrpm 通过 apt-get安装软件, 支持的特性 : installable, purgeable, uninstallable, upgradeable, versionable.
yum 通过yum安装软件, 支持的特性: installable, purgeable, uninstallable, upgradeable, versionable.
ports freebsd上面的软件包管理,支持的特性: installable, uninstallable, upgradeable.
responsefile
在debian上面安装软件,一般会回答一些问题,用这个文件来包含问题的预设答案, 用在debian或者 solaris系统上.
source
去那里找软件的安装包,例如rpm的包地址,必须是本地地址或者URL
 
参考:    http://puppet.wikidot.com/
 http://www.mysqlops.com/category/puppet