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