puppet file资源常用的参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code>file</code> <code>{</code>
<code> </code><code>path</code>
<code> </code><code>ensure</code>
<code> </code><code>backup</code>
<code> </code><code>checksum</code>
<code> </code><code>content</code>
<code> </code><code>force</code>
<code> </code><code>group</code>
<code> </code><code>links</code>
<code> </code><code>mode</code>
<code> </code><code>owner</code>
<code> </code><code>source</code>
<code> </code><code>selinux_ignore_default</code>
<code> </code><code>selrange</code>
<code> </code><code>selrole</code>
<code> </code><code>seltype</code>
<code> </code><code>seluser</code>
<code>}</code>
path:指定要管理的文件或目录,必须用引号引起来.
ensure:有5个值,分别是absent,present,file,directory,link.设置present值表示【匹配文件,它会检查path值中的路径文件是否存在,如果不存在就会创建;设置absent值,删除已经存在的文件;设置directory表示创建目录,但是要删除目录需增加参数force=>true,设置link时会根据path路径创建软连接文件.
示例:
删除目录
<code>[root@sh-web1 ~]</code><code># ls /tmp/</code>
<code>test</code>
<code>[root@sh-web1 ~]</code><code># puppet apply dire.pp </code>
<code>Notice: Compiled catalog </code><code>for</code> <code>sh-web1.localdomain </code><code>in</code> <code>environment production </code><code>in</code> <code>0.06 seconds</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/File</code><code>[</code><code>/tmp/test</code><code>]</code><code>/ensure</code><code>: removed</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.05 seconds</code>
<code>[root@sh-web1 ~]</code><code>#</code>
backup:文件的内容在修改前是否备份,目前puppet支持两种备份方式,一种是将文件备份在agent上被修改文件的目录中,另一种方式将资源文件通过filebucket备份在远程服务器上。备份在agent上的方式,buckup属性的值如果是以".bak"开头的字符串的话,puppet会将变更文件备份在agent资源文件的同一目录下,备份文件的扩展名就是"."值里面的字符串,另一种远程备份需要借助filebucket资源.
<code>file</code> <code>{</code><code>"/tmp/test"</code><code>:</code>
<code> </code><code>ensure => present,</code>
<code> </code><code>content=> </code><code>"this is file."</code><code>,</code>
<code> </code><code>backup => </code><code>".$backup_date.bak"</code><code>,</code>
<code> </code><code>content=> </code><code>"this is test."</code><code>,</code>
<code># puppet apply file2.pp </code>
<code>Notice: Compiled catalog </code><code>for</code> <code>sh-web1.localdomain </code><code>in</code> <code>environment production </code><code>in</code> <code>0.07 seconds</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/File</code><code>[</code><code>/tmp/test</code><code>]</code><code>/content</code><code>: content changed </code><code>'{md5}70b7ea41998bea7dc5be44528ae37ba3'</code> <code>to </code><code>'{md5}480fc0d368462326386da7bb8ed56ad7'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.03 seconds</code>
<code>test</code> <code>test</code><code>..bak</code>
<code>[root@sh-web1 ~]</code><code># cat /tmp/test..bak </code>
<code>this is </code><code>file</code><code>.</code>
注意: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数组中多个文件.
<code> </code><code>source</code> <code>=> [</code>
<code> </code><code>"puppet:///modules/nfs/conf.$host"</code><code>,</code>
<code> </code><code>"puppet:///modules/nfs/conf.$operatingsystem"</code><code>,</code>
<code> </code><code>"puppet:///modules/nfs/conf"</code><code>,</code>
<code> </code><code>]</code>
target:指定创建软连接的目标.
<code>[root@sh-web1 ~]</code><code># cat link.pp </code>
<code>file</code> <code>{</code><code>"/tmp/3.pp"</code><code>:</code>
<code> </code><code>ensure=> link,</code>
<code> </code><code>target=> </code><code>'/root/3.pp'</code><code>,</code>
<code>[root@sh-web1 ~]</code><code># puppet apply link.pp </code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/File</code><code>[</code><code>/tmp/3</code><code>.pp]</code><code>/ensure</code><code>: created</code>
<code>3.pp </code><code>test</code> <code>test</code><code>..bak</code>
selinux_ignore_default:selinux系列功能,实现自定义selinux.
selrange:selinux系列功能,定义范围.
selrole:selinux系列功能,定义角色.
seltype:selinux系列功能,定义类型.
seluser:selinux系列功能,定义用户.
filebucket资源示例:
filebucket资源主要用于文件的备份与恢复,通常与file资源配合使用.
<code>filebucket {</code><code>''</code><code>:</code>
<code> </code><code>name</code>
<code> </code><code>port</code>
<code> </code><code>server</code>
name:filebucket的名字.
path:服务器备份数据路径.
port:备份服务器的端口.
server:备份服务的域名.
19
20
21
22
23
24
<code>node base {</code>
<code> </code><code>include admin</code>
<code> </code><code>include </code><code>cron</code>
<code> </code><code>filebucket {</code><code>'main'</code><code>:</code>
<code> </code><code>server => </code><code>'puppet'</code><code>,</code>
<code> </code><code>path => </code><code>'/var/lib/puppet/clientbucket'</code><code>,</code>
<code> </code><code>}</code>
<code> </code><code>file</code> <code>{</code><code>"/tmp/test"</code><code>:</code>
<code> </code><code>ensure => present,</code>
<code> </code><code>content=> </code><code>"this is lisi."</code><code>,</code>
<code> </code><code>backup => </code><code>"main"</code><code>,</code>
<code> </code><code>}</code>
<code>node </code><code>/sh-</code><code>(proxy|web)\d+/ inherits base {</code>
<code> </code><code>case</code> <code>$::</code><code>hostname</code> <code>{</code>
<code> </code><code>/sh-proxy</code><code>\d+/: {</code>
<code> </code><code>tag (</code><code>"web::proxy"</code><code>)</code>
<code> </code><code>include php</code>
<code> </code><code>}</code>
<code> </code><code>"sh-web1"</code><code>: {</code>
<code> </code><code>include php</code>
<code> </code><code>} </code>
<code> </code><code>}</code>
<code># puppet agent -t</code>
<code>Notice: Ignoring --listen on onetime run</code>
<code>Info: Retrieving pluginfacts</code>
<code>Info: Retrieving plugin</code>
<code>Info: Loading facts</code>
<code>Info: Caching catalog </code><code>for</code> <code>sh-web1.localdomain</code>
<code>Info: Applying configuration version </code><code>'1507549594'</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Admin/Exec</code><code>[selinux]</code><code>/returns</code><code>: executed successfully</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[base]</code><code>/File</code><code>[</code><code>/tmp/test</code><code>]</code><code>/content</code><code>: </code>
<code>--- </code><code>/tmp/test2017-10-09</code> <code>19:02:15.527825330 +0800</code>
<code>+++ </code><code>/tmp/puppet-file20171009-5104-6zk5y1-02017-10-09</code> <code>19:46:34.951821641 +0800</code>
<code>@@ -1 +1 @@</code>
<code>-this is </code><code>test</code><code>.</code>
<code>\ No newline at end of </code><code>file</code>
<code>+this is lisi.</code>
<code>Info: Computing checksum on </code><code>file</code> <code>/tmp/test</code>
<code>Info: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[base]</code><code>/File</code><code>[</code><code>/tmp/test</code><code>]: Filebucketed </code><code>/tmp/test</code> <code>to main with </code><code>sum</code> <code>480fc0d368462326386da7bb8ed56ad7</code>
<code>Notice: </code><code>/Stage</code><code>[main]</code><code>/Main/Node</code><code>[base]</code><code>/File</code><code>[</code><code>/tmp/test</code><code>]</code><code>/content</code><code>: content changed </code><code>'{md5}480fc0d368462326386da7bb8ed56ad7'</code> <code>to </code><code>'{md5}b58ff837e1152bf6d13212d1860c1219'</code>
<code>Notice: Finished catalog run </code><code>in</code> <code>0.39 seconds</code>
注意:当资源改变时agent更新就会提示备份.
puppet 3.8的版本发现个问题:
master端并未备份到puppet 代码指定的位置:
<code>[root@puppet e]</code><code># tree </code>
<code>.</code>
<code>└── 8</code>
<code> </code><code>└── d</code>
<code> </code><code>└── 6</code>
<code> </code><code>└── 1</code>
<code> </code><code>└── 0</code>
<code> </code><code>└── f</code>
<code> </code><code>└── 1e8d610ffbe27bf880c7d734386dbde1</code>
<code> </code><code>├── contents</code>
<code> </code><code>└── paths</code>
<code>7 directories, 2 files</code>
<code>[root@puppet e]</code><code># pwd</code>
<code>/var/lib/puppet/bucket/1/e</code>
客户端备份到了path的路径:
<code>[root@sh-web1 1]</code><code># tree</code>
<code> </code><code>└── 6</code>
<code> </code><code>└── f</code>
<code> </code><code>└── 3</code>
<code> </code><code>└── 1</code>
<code> </code><code>└── 9</code>
<code> </code><code>└── 2</code>
<code> </code><code>└── 186f319242818f98380d6369593bfb47</code>
<code> </code><code>├── contents</code>
<code> </code><code>└── paths</code>
<code>8 directories, 2 files</code>
<code>[root@sh-web1 1]</code><code># pwd</code>
<code>/var/lib/puppet/clientbucket/1</code>
本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1971148