天天看點

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

繼續閱讀