本文系统Centos6.0 puppet 2.6.18
先看下file资源的部分属性:
file {“absolute path”: ensure=> present/absent/file/directory/link, #定义absolute path的是否存在在及它应该是什么角色 user=>"username", group=>"groupname", mode=>0777, path=>"absolute path", source=>"puppet:///URL", #指定到master上文件的路径或者agent上本地文件路径 content=>"content", #描述文件内容的字符串,也可以是模版或者输出内容的函数,模版常用 target=> #link文件源 recurse=> #递归处理 purge=> #清理文件及目录 force=> #必须使用此选项,否则不能清理 ignore => #不清理的文件 backup => 决定文件的内容在被修改前是否进行备份. 利用filebucket对文件进行备份,按文件的md5sum进行归类,便于恢复文件的时候找到文件.可以把文件备份到 puppet 客户端,也可以通过设置backpup => bucket_name 把文件备份到网络上的其他机器. 如果backup的值是一个点号”.”开头的字符串,puppet会把文件备份在同一目录下,备份文件的扩展名就是 bakcup里面的那个字符串.如果设置 backup => false , 该文件不做备份. checksum => 怎样检查文件是否被修改,这个状态用来在复制文件的时候使用, 这里有几种检测方式,包括md5 ,mtime,time,timestamp等. 默认的检测是用md5 }
主机信息:
master:master.lansgg.com 192.168.182.143
client1 :client1.lansgg.com 192.168.182.142
client2: client2.lansgg.com 192.168.182.149
相关安装请看http://lansgg.blog.51cto.com/5675165/1299604
案例一:
目的:在client1上/tmp/下创建文件lansgg.txt
在client2上/root/下创建目录testdir
master:
[root@master ~]# cat /etc/puppet/manifests/site.pp import "node1.pp" [root@master ~]# cat /etc/puppet/manifests/node1.pp node 'client1.lansgg.com'{ file {"/tmp/lansgg.txt": ensure => present, owner => root, group => root, mode => 0644, content => " # path /path/to/resource\n # [environment envlist]\n # [method methodlist]\n # [auth[enthicated] {yes|no|on|off|any}]\n # allow [host|ip|*]\n # deny [host|ip]\n"; } } node 'client2.lansgg.com'{ file { "/root/testdir": ensure => directory, owner => nobody, group => nobody, mode => 0755, } }
client1:
client2:
案例二:
将master的sshd_config文件映射到client1上;
master:
[root@master manifests]# vim node1.pp file {"/etc/ssh/sshd_config": ensure => present, owner => root, group => root, mode => 0400, }
client1:
案例三:
client2上/root/testdir目录下有多余文件及目录,我们进行清理;
master:
[root@master ~]# vim /etc/puppet/manifests/node1.pp file { "/root/testdir": ensure => directory, owner => root, group => root, mode => 0755, recurse => true, purge => true, force => true, }
client2:
案例四:
接上例,如果不想test.file文件删掉,其他都删掉呢?
master:
[root@master ~]# vim /etc/puppet/manifests/node1.pp file { "/root/testdir": ensure => directory, owner => root, group => root, mode => 0755, recurse => true, purge => true, force => true, ignore => 'test.file', }
client2:
案例五:
我们在client2上的/root/testdir/link.f创建为链接文件:
master:
[root@master manifests]# vim node1.pp file {"/root/testdir/link.f": ensure => link, target => '/etc/puppet/puppet.conf', }
client2:
案例六:
我们在client端创建个目录树,类似mkdir -p 的效果。比如我要在/tmp/目录创建,/tmp/1,/tmp/1/2,/tmp/1/2,/tmp/1/2/3文件夹。
代码示例:
file { [ "/tmp/1", "/tmp/1/2", "/tmp/1/2/3" ]: ensure => "directory", }
案例七:
管理目录,不覆盖/覆盖已经存在的文件。
file { "/tmp/test": replace => "true", #不覆盖的话为false ensure => "present", content => template("/etc/smartd.conf"), #此为引用本地的文件 owner => 'zhangsan', mode => 644, }
案例八:
将client端需要跟新的文件先备份,然后将文件更新
file { "/tmp/ntp.conf": backup => ".zzq20131101", #先将文件备份ntp.conf.zzq.20131101 # backup => "false", #此为不备份,默认是不备份的 ensure => present, owner => zhangsan, content => template("/etc/ntp.conf"), mode => 644, }