puppet file资源常用的参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
file  {
     path
     ensure
     backup
     checksum
     content
     force
     group
     links
     mode
     owner
     source
     selinux_ignore_default
     selrange
     selrole
     seltype
     seluser
}


path:指定要管理的文件或目录,必须用引号引起来.


ensure:有5个值,分别是absent,present,file,directory,link.设置present值表示【匹配文件,它会检查path值中的路径文件是否存在,如果不存在就会创建;设置absent值,删除已经存在的文件;设置directory表示创建目录,但是要删除目录需增加参数force=>true,设置link时会根据path路径创建软连接文件.


示例:

删除目录

1
2
3
4
5
6
7
8
[root@sh-web1 ~] # ls /tmp/
test
[root@sh-web1 ~] # puppet apply dire.pp 
Notice: Compiled catalog  for  sh-web1.localdomain  in  environment production  in  0.06 seconds
Notice:  /Stage [main] /Main/File [ /tmp/test ] /ensure : removed
Notice: Finished catalog run  in  0.05 seconds
[root@sh-web1 ~] # ls /tmp/
[root@sh-web1 ~] #


backup:文件的内容在修改前是否备份,目前puppet支持两种备份方式,一种是将文件备份在agent上被修改文件的目录中,另一种方式将资源文件通过filebucket备份在远程服务器上。备份在agent上的方式,buckup属性的值如果是以".bak"开头的字符串的话,puppet会将变更文件备份在agent资源文件的同一目录下,备份文件的扩展名就是"."值里面的字符串,另一种远程备份需要借助filebucket资源.


示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
file  { "/tmp/test" :
     ensure => present,
     content=>  "this is file." ,
     backup =>  ".$backup_date.bak" ,
}
file  { "/tmp/test" :
     ensure => present,
     content=>  "this is test." ,
     backup =>  ".$backup_date.bak" ,
}
# puppet apply file2.pp 
Notice: Compiled catalog  for  sh-web1.localdomain  in  environment production  in  0.07 seconds
Notice:  /Stage [main] /Main/File [ /tmp/test ] /content : content changed  '{md5}70b7ea41998bea7dc5be44528ae37ba3'  to  '{md5}480fc0d368462326386da7bb8ed56ad7'
Notice: Finished catalog run  in  0.03 seconds
[root@sh-web1 ~] # ls /tmp/
test   test ..bak
[root@sh-web1 ~] # cat /tmp/test..bak 
this is  file .

注意:agent端主动备份会在file当前目录下备份.


checksum:检查文件内容是否被修改过,通过它可以检查文件的一致性。包括:md5,mtime,ctime默认使用md5.


content:可以向文件中追加内容或者通过调用template函数向erb模板中追加内容.


force:可以将一个目录变成一个连接,可用的值是true、false、yes和no,其中true与yes参数在这里均表示创建目录连接,false与no参数均表示不创建目录连接.


group:可以指定该文件的用户组,值可以使gid或系统组名.


links:定义操作符合连接的文件,可以设置的值是follow和manage.设置follow值文件复制时,会赋值文件的内容,而不是只复制连接本身;如果设置为manage值,则只复制符合连接本身.


mode:用于设置文件的权限.


owner:文件的属主.


source:指定源文件的位置,值可以是指定的远程文件的uris或者本地完整路径.


示例:

通过source同步puppet数组中多个文件.

1
2
3
4
5
6
7
file  {
     source  => [
         "puppet:///modules/nfs/conf.$host" ,
         "puppet:///modules/nfs/conf.$operatingsystem" ,
         "puppet:///modules/nfs/conf" ,
     ]
}


target:指定创建软连接的目标.

1
2
3
4
5
6
7
8
9
10
11
[root@sh-web1 ~] # cat link.pp 
file  { "/tmp/3.pp" :
     ensure=> link,
     target=>  '/root/3.pp' ,
}
[root@sh-web1 ~] # puppet apply link.pp 
Notice: Compiled catalog  for  sh-web1.localdomain  in  environment production  in  0.06 seconds
Notice:  /Stage [main] /Main/File [ /tmp/3 .pp] /ensure : created
Notice: Finished catalog run  in  0.03 seconds
[root@sh-web1 ~] # ls /tmp/
3.pp   test   test ..bak


selinux_ignore_default:selinux系列功能,实现自定义selinux.

selrange:selinux系列功能,定义范围.

selrole:selinux系列功能,定义角色.

seltype:selinux系列功能,定义类型.

seluser:selinux系列功能,定义用户.


filebucket资源示例:

filebucket资源主要用于文件的备份与恢复,通常与file资源配合使用.

1
2
3
4
5
6
filebucket { '' :
     name
     path
     port
     server
}

name:filebucket的名字.

path:服务器备份数据路径.

port:备份服务器的端口.

server:备份服务的域名.


示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
node base {
     include admin
     include  cron
     filebucket { 'main' :
         server =>  'puppet' ,
         path   =>  '/var/lib/puppet/clientbucket' ,
  }
     file  { "/tmp/test" :
         ensure => present,
         content=>  "this is lisi." ,
         backup =>  "main" ,
     }
}
node  /sh- (proxy|web)\d+/  inherits base {
     case  $:: hostname  {
         /sh-proxy \d+/: {
         tag ( "web::proxy" )
              include php
           }
          "sh-web1" : {
             include php
            
         }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# puppet agent -t
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog  for  sh-web1.localdomain
Info: Applying configuration version  '1507549594'
Notice:  /Stage [main] /Admin/Exec [selinux] /returns : executed successfully
Notice:  /Stage [main] /Main/Node [base] /File [ /tmp/test ] /content
---  /tmp/test2017-10-09  19:02:15.527825330 +0800
+++  /tmp/puppet-file20171009-5104-6zk5y1-02017-10-09  19:46:34.951821641 +0800
@@ -1 +1 @@
-this is  test .
\ No newline at end of  file
+this is lisi.
\ No newline at end of  file
Info: Computing checksum on  file  /tmp/test
Info:  /Stage [main] /Main/Node [base] /File [ /tmp/test ]: Filebucketed  /tmp/test  to main with  sum  480fc0d368462326386da7bb8ed56ad7
Notice:  /Stage [main] /Main/Node [base] /File [ /tmp/test ] /content : content changed  '{md5}480fc0d368462326386da7bb8ed56ad7'  to  '{md5}b58ff837e1152bf6d13212d1860c1219'
Notice: Finished catalog run  in  0.39 seconds

注意:当资源改变时agent更新就会提示备份.


puppet 3.8的版本发现个问题:

master端并未备份到puppet 代码指定的位置:

1
2
3
4
5
6
7
8
9
10
11
12
[root@puppet e] # tree 
.
└── 8
     └── d
         └── 6
             └── 1
                 └── 0
                     └── f
                         └── 1e8d610ffbe27bf880c7d734386dbde1
                             ├── contents
                             └── paths
7 directories, 2 files
1
2
[root@puppet e] # pwd
/var/lib/puppet/bucket/1/e

客户端备份到了path的路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@sh-web1 1] # tree
.
└── 8
     └── 6
         └── f
             └── 3
                 └── 1
                     └── 9
                         └── 2
                             └── 186f319242818f98380d6369593bfb47
                                 ├── contents
                                 └── paths
8 directories, 2 files
1
2
[root@sh-web1 1] # pwd
/var/lib/puppet/clientbucket/1


本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1971148