天天看點

Puppet學習之檔案管理

Puppet學習之檔案管理

使用puppet可以友善的進行檔案管理,可以對檔案的内容、屬組、屬主、權限等進行管理。可管理的檔案類型包括普通檔案、目錄、連結檔案。類型需要在ensure類型中明确指定。接下來從三個方面來介紹puppet檔案管理的操作。

一、   

Puppet伺服器端的配置

1.  

fileserver.conf檔案的配置

vim fileserver.conf

添加如下内容,在puppet master上建立一個檔案存放目錄

[files]

path

/etc/puppet/files

allow 10.1.4.0/24

2.  

site.pp檔案的配置

最好是更改其他的檔案,然後用這個檔案import進來,我這裡為了測試簡便就直接更改這個檔案了,具體的如何操作見後面的實戰部分。

二、   

Puppet檔案管理重要參數介紹

backup參數

指定在檔案内容替換之前進行備份操作,可以備份在本地,也可以集中備份。集中遠端備份的話可以使用

filebucket

(我們在後面的實戰部分會進行詳細介紹),這個備份的時候如果備份在本地可以指定備份的檔案名。

content參數

指定檔案的内容(字元串),這個參數和source、target參數沖突。

3.  

ensure參數

這個參數指定是否建立、删除檔案或者目錄,有present、absent、file、directory等值。其中present會檢查檔案是否存在,不存在就會建立一個空檔案。absent會删除檔案或者目錄,如果是目錄需要指定recurse參數指定是否允許遞歸。如果指定的是其他的參數,則會建立連接配接檔案,為了友善管理,建議在建立的時候使用

ensure => link,

并通過target參數指定檔案。

注意不能在windows系統上連結檔案,

4.  

force參數

該參數強制執行檔案操作,進行如下操作的時候必須指定force參數

Ø  purge 子目錄

Ø  用檔案或者連結檔案替換目錄

Ø  使用ensure => absent參數删除目錄

5.  

group參數

指定檔案或者目錄的屬組,可以是組名或者組id,如果是windows的話屬組和屬主不能相同。

6.  

ignore參數

這個參數指定在遞歸期間對符合指定的模式的檔案操作将被忽略。

7.  

links參數

這個參數指定處理檔案期間如何處理連結檔案,可以設定follow和manage。在拷貝檔案的時候,follow将會拷貝目标檔案代替連結檔案,manage将隻會拷貝連結檔案,ignore将會跳過。

8.  

mode參數

這個參數用來指定檔案或者目錄的權限,puppet使用傳統的unix權限方案,如果系統采用的權限方案不同的,puppet為這些系統将權限翻譯成等價的權限,比如windows。這些權限可以是數字(r=4,w=2,x=1)也可以是字元(rwxst)。

9.  

owner參數

指定檔案的屬主,可以是使用者名或是使用者id,如果是windows的話屬組和屬主不能相同。

10. 

path參數

指定檔案管理的路徑。Windows路徑也使用/而不是\。

11. 

purge參數

這個參數會删除在master上不存在的檔案,這個參數隻有在管理目錄的時候指定了recurse => true參數的時候才有意義。

12. 

recurse參數

這個參數指定是否進行遞歸調用以及遞歸調用的深度,選項如下

Ø  inf,true  ---在遠端和本地都進行遞歸調用

Ø  remote ---隻在遠端進行遞歸調用

Ø  false ---不進行遞歸調用

Ø  [0-9]+ ---和true參數一樣,但是限制遞歸調用目錄的深度

13. 

source參數

該參數指定将會被拷貝到指定位置的資源檔案,值可以是指定遠端檔案的URIS或者本地的完整路徑。可以指定多個sorce,這個參數和content、target沖突。

14. 

target參數

這個參數指定建立連結檔案的目标檔案或者目錄。

        上面隻是列了一些常用的選項,更多選項請參考:

        http://docs.puppetlabs.com/references/latest/type.html#file

三、   

Puppet檔案管理實戰

1.  

使用

filebucket

進行遠端備份。

Ø 

Filebucket

的配置

vim site.pp

#

添加filebucket的配置

filebucket

{ 'main':

  server => "puppet.zhang.com",

  path  

=> false,

}

#讓節點node1.zhang.com進行遠端備份

node

'node1.zhang.com'{

file

{ "/etc/test2":

    source =>

"puppet://puppet.zhang.com/files/test2",

    backup => main

  }

如果沒有設定bucketdir路徑,那麼預設檔案儲存在master的$vardir/bucket路徑。存儲是以檔案的md5值為目錄,目錄下面存儲了檔案的路徑和内容,是以擷取備份檔案的内容和恢複都需要使用到檔案的md5值。

Ø 

在agent通過filebucket用戶端擷取檔案的内容

puppet filebucket get 4894b816078bcca4b63a6feaaf38aff8

Ø 

在agent通過filebucket用戶端還原檔案的内容

puppet filebucket restore /etc/test2

4894b816078bcca4b63a6feaaf38aff8

将master上檔案目錄下的一個檔案,複制到agent的指定位置,如果檔案存在就先對檔案進行備份然後覆寫。

配置代碼如下:

        file {"/etc/test1":

        source =>

"puppet://puppet.zhang.com/files/test1",

        backup =>

".bak_$uptime_seconds",

将agent上的一個檔案複制成另外一個檔案,如果目的檔案存在就先做備份再覆寫,并制定檔案屬master和權限。

file {"/tmp/test2":

source => "/etc/passwd",

backup => ".bak_$uptime_seconds",

group => nobody,

owner => nobody,

mode => 600;

在agent上建立/tmp/test3,并制定檔案的内容為test3。

file {"/tmp/test3":

    content => "test3"}

對agent上的某個檔案或者檔案夾建立軟連接配接。

file {"/tmp/test4":

ensure => link,

target => "/var/log/messages";

"/tmp/test5":

target => "/var/log";

        }

也可以簡寫成如下代碼:

ensure => "/var/log/messages";

ensure => "/var/log";

如果agent上/tmp/test6檔案存在的話就删除掉agent上的/tmp/test6檔案。

file {"/tmp/test6":

ensure => absent;

如果agent上不存在/tmp/test7檔案就在agent上建立/tmp/test6檔案。

file {"/tmp/test7":

ensure => present;

在agent上建立目錄。

file {

"/tmp/test8":

ensure => directory;

删除agent上面的目錄。

{  "/tmp/test9/":

        ensure => absent,

        force => true;

10.  類似rsync,将master上面的檔案目錄同步到agent上,不同步含有log的檔案和目錄,如果含有子目錄,遞歸到子目錄,删除master上沒有agent上有的檔案或者目錄。

file {"/tmp/test10":

ensure  => directory,

source  =>

"puppet://puppet.zhang.com/files/",

ignore  => '*log*',

recurse => true,

purge   => true,

force   => true,

四、   

參考文檔

http://docs.puppetlabs.com/references/stable/configuration.html
下一篇: 紅黑樹

繼續閱讀