本文系统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:

puppet之文件管理_第1张图片

client2:

puppet之文件管理_第2张图片

案例二:

将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:

puppet之文件管理_第3张图片

案例三:

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:

puppet之文件管理_第4张图片


案例四:

接上例,如果不想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:

puppet之文件管理_第5张图片

案例五:

我们在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:

puppet之文件管理_第6张图片


案例六:

我们在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,
    }