Puppet學習之文件管理html
使用puppet能夠方便的進行文件管理,能夠對文件的內容、屬組、屬主、權限等進行管理。可管理的文件類型包括普通文件、目錄、連接文件。類型須要在ensure類型中明確指定。接下來從三個方面來介紹puppet文件管理的操做。node
Puppet服務器端的配置vim
fileserver.conf文件的配置windows
vim fileserver.conf 添加以下內容,在puppet master上建立一個文件存放目錄服務器
[files]ide
path /etc/puppet/files學習
allow 10.1.4.0/24測試
2. site.pp文件的配置spa
最好是更改其餘的文件,而後用這個文件import進來,我這裏爲了測試簡便就直接更改這個文件了,具體的如何操做見後面的實戰部分。翻譯
Puppet文件管理重要參數介紹
backup參數
指定在文件內容替換以前進行備份操做,能夠備份在本地,也能夠集中備份。集中遠程備份的話可使用filebucket
(咱們在後面的實戰部分會進行詳細介紹),這個備份的時候若是備份在本地能夠指定備份的文件名。
2. content參數
指定文件的內容(字符串),這個參數和source、target參數衝突。
3. ensure參數
這個參數指定是否建立、刪除文件或者目錄,有present、absent、file、directory等值。其中present會檢查文件是否存在,不存在就會建立一個空文件。absent會刪除文件或者目錄,若是是目錄須要指定recurse參數指定是否容許遞歸。若是指定的是其餘的參數,則會建立鏈接文件,爲了方便管理,建議在建立的時候使用ensure => link,
並經過target參數指定文件。
注意不能在windows系統上連接文件,
4. force參數
該參數強制執行文件操做,進行以下操做的時候必須指定force參數
purge 子目錄
用文件或者連接文件替換目錄
使用ensure => absent參數刪除目錄
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參數同樣,可是限制遞歸調用目錄的深度
source參數
該參數指定將會被拷貝到指定位置的資源文件,值能夠是指定遠程文件的URIS或者本地的完整路徑。能夠指定多個sorce,這個參數和content、target衝突。
14. target參數
這個參數指定建立連接文件的目標文件或者目錄。
上面只是列了一些經常使用的選項,更多選項請參考:
http://docs.puppetlabs.com/references/latest/type.html#file
Puppet文件管理實戰
使用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
2. 將master上文件目錄下的一個文件,複製到agent的指定位置,若是文件存在就先對文件進行備份而後覆蓋。
配置代碼以下:
node 'node1.zhang.com'{
file {"/etc/test1":
source => "puppet://puppet.zhang.com/files/test1",
backup => ".bak_$uptime_seconds",
}
}
3. 將agent上的一個文件複製成另一個文件,若是目的文件存在就先作備份再覆蓋,並制定文件屬master和權限。
配置代碼以下:
node 'node1.zhang.com'{
file {"/tmp/test2":
source => "/etc/passwd",
backup => ".bak_$uptime_seconds",
group => nobody,
owner => nobody,
mode => 600;
}
}
4. 在agent上建立/tmp/test3,並制定文件的內容爲test3。
配置代碼以下:
node 'node1.zhang.com'{
file {"/tmp/test3":
content => "test3"}
}
5. 對agent上的某個文件或者文件夾創建軟鏈接。
node 'node1.zhang.com'{
file {"/tmp/test4":
ensure => link,
target => "/var/log/messages";
"/tmp/test5":
ensure => link,
target => "/var/log";
}
}
也能夠簡寫成以下代碼:
node 'node1.zhang.com'{
file {"/tmp/test4":
ensure => "/var/log/messages";
"/tmp/test5":
ensure => "/var/log";
}
}
6. 若是agent上/tmp/test6文件存在的話就刪除掉agent上的/tmp/test6文件。
node 'node1.zhang.com'{
file {"/tmp/test6":
ensure => absent;
}
}
7. 若是agent上不存在/tmp/test7文件就在agent上建立/tmp/test6文件。
node 'node1.zhang.com'{
file {"/tmp/test7":
ensure => present;
}
}
8. 在agent上建立目錄。
node 'node1.zhang.com'{
file {
"/tmp/test8":
ensure => directory;
}
}
9. 刪除agent上面的目錄。
node 'node1.zhang.com'{
file { "/tmp/test9/":
ensure => absent,
force => true;
}
}
10. 相似rsync,將master上面的文件目錄同步到agent上,不一樣步含有log的文件和目錄,若是含有子目錄,遞歸到子目錄,刪除master上沒有agent上有的文件或者目錄。
node 'node1.zhang.com'{
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
http://docs.puppetlabs.com/references/stable/configuration.html