天天看点

Puppet File资源介绍(贰拾)

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=&gt;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 =&gt; present,</code>

<code>    </code><code>content=&gt; </code><code>"this is file."</code><code>,</code>

<code>    </code><code>backup =&gt; </code><code>".$backup_date.bak"</code><code>,</code>

<code>    </code><code>content=&gt; </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>=&gt; [</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=&gt; link,</code>

<code>    </code><code>target=&gt; </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 =&gt; </code><code>'puppet'</code><code>,</code>

<code>        </code><code>path   =&gt; </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 =&gt; present,</code>

<code>        </code><code>content=&gt; </code><code>"this is lisi."</code><code>,</code>

<code>        </code><code>backup =&gt; </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

继续阅读