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