Puppet學習之文件管理

Puppet學習之文件管理

使用puppet可以方便的進行文件管理,可以對文件的內容、屬組、屬主、權限等進行管理。可管理的文件類型包括普通文件、目錄、鏈接文件。類型需要在ensure類型中明確指定。接下來從三個方面來介紹puppet文件管理的操作。

  • Puppet服務器端的配置

  • fileserver.conf文件的配置

vim fileserver.conf 添加如下內容,在puppet master上創建一個文件存放目錄

[files]

path /etc/puppet/files

allow 10.1.4.0/24

  1. 2.   site.pp文件的配置

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

  • Puppet文件管理重要參數介紹

  • backup參數

指定在文件內容替換之前進行備份操作,可以備份在本地,也可以集中備份。集中遠程備份的話可以使用filebucket(我們在後面的實戰部分會進行詳細介紹),這個備份的時候如果備份在本地可以指定備份的文件名。

  1. 2.   content參數

指定文件的內容(字符串),這個參數和sourcetarget參數衝突。

  1. 3.   ensure參數

這個參數指定是否創建、刪除文件或者目錄,有presentabsentfiledirectory等值。其中present會檢查文件是否存在,不存在就會創建一個空文件。absent會刪除文件或者目錄,如果是目錄需要指定recurse參數指定是否允許遞歸。如果指定的是其他的參數,則會創建連接文件,爲了方便管理,建議在創建的時候使用ensure => link,並通過target參數指定文件。注意不能在windows系統上鍊接文件,

  1. 4.   force參數

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

  • purge 子目錄

  • 用文件或者鏈接文件替換目錄

  • 使用ensure => absent參數刪除目錄

  • group參數

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

  1. 6.   ignore參數

這個參數指定在遞歸期間對符合指定的模式的文件操作將被忽略。

  1. 7.   links參數

這個參數指定處理文件期間如何處理鏈接文件,可以設置followmanage。在拷貝文件的時候,follow將會拷貝目標文件代替鏈接文件,manage將只會拷貝鏈接文件,ignore將會跳過。

  1. 8.   mode參數

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

  1. 9.   owner參數

指定文件的屬主,可以是用戶名或是用戶id,如果是windows的話屬組和屬主不能相同。

  1. 10.  path參數

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

  1. 11.  purge參數

這個參數會刪除在master上不存在的文件,這個參數只有在管理目錄的時候指定了recurse => true參數的時候纔有意義。

  1. 12.  recurse參數

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

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

  • remote ---只在遠程進行遞歸調用

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

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

  • source參數

該參數指定將會被拷貝到指定位置的資源文件,值可以是指定遠程文件的URIS或者本地的完整路徑。可以指定多個sorce,這個參數和contenttarget衝突。

  1. 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

 

  1. 2.   master上文件目錄下的一個文件,複製到agent的指定位置,如果文件存在就先對文件進行備份然後覆蓋。

配置代碼如下:

node 'node1.zhang.com'{

        file {"/etc/test1":

        source => "puppet://puppet.zhang.com/files/test1",

        backup => ".bak_$uptime_seconds",

}

}

  1. 3.   agent上的一個文件複製成另外一個文件,如果目的文件存在就先做備份再覆蓋,並制定文件屬master和權限。

配置代碼如下:

node 'node1.zhang.com'{

file {"/tmp/test2":

        source => "/etc/passwd",

        backup => ".bak_$uptime_seconds",

        group => nobody,

        owner => nobody,

        mode => 600;

}

}

  1. 4.   agent上創建/tmp/test3,並制定文件的內容爲test3

配置代碼如下:

node 'node1.zhang.com'{

file {"/tmp/test3":

    content => "test3"}

}

  1. 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";

        }

}

  1. 6.   如果agent/tmp/test6文件存在的話就刪除掉agent上的/tmp/test6文件。

node 'node1.zhang.com'{

file {"/tmp/test6":

        ensure => absent;

        }

}

  1. 7.   如果agent上不存在/tmp/test7文件就在agent上創建/tmp/test6文件。

node 'node1.zhang.com'{

file {"/tmp/test7":

        ensure => present;

        }

}

  1. 8.   agent上創建目錄。

node 'node1.zhang.com'{

file {

        "/tmp/test8":

        ensure => directory;

        }

}

  1. 9.   刪除agent上面的目錄。

node 'node1.zhang.com'{

file {  "/tmp/test9/":

        ensure => absent,

        force => true;

        }

}

  1. 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章