puppet安裝與使用--模塊結構(iptables與rsync模塊)
模塊結構
一個模塊就是一個/etc/puppet/modules目錄下面的一個目錄和它的子目錄,在puppet的主文件site.pp裏面用import modulename可以插入模塊。新版本的puppet可以自動插入/etc/puppet/modules目錄下的模塊。引入模塊,可以結構化代碼,便於分享和管理。
例如關於apache的所有配置都寫到apache模塊下面。一個模塊目錄下面通常包括三個目錄:files,manifests,templates。manifests 裏面必須要包括一個init.pp的文件,這是該模塊的初始(入口)文件,導入一個模塊的時候,會從init.pp開始執行。可以把所有的代碼都寫到init.pp裏面,也可以分成多個pp文件,init 再去包含其他文件。files目錄是該模塊的文件發佈目錄,puppet提供一個文件分發機制,類似rsync的模塊。templates 目錄包含erb模型文件,這個和file資源的template屬性有關。
網上有好多結構圖,還不錯
結構類似,自己也可以跟着創建相應目錄,如下圖,我的測試機器上目錄結構:
結構與上敘述完全相同,每個模塊下manifests下總會有一個init.pp文件,總規是一個套一個
iptalbes模塊例子使用
結構與上,在/etc/puppet/modules模塊下增加rsync模塊
事先要把給客戶端定製好的iptables.sh腳本放入files下,編寫init.pp
創建一個class 類,在模塊modules.pp中調用即可,主入口爲site.pp,所以在site.pp要調用modules.pp
上圖中難理解的就是source => "puppet://$fileserver/iptables/iptables.sh",這個是puppet代碼中就寫好的,每個模塊files下面的文件,都可以寫成 puppet://$fileserver/模塊名/files文件下的文件名" 來調用 notify指定了順序,在執行exec前執行file,因爲puppet程序裏面定義的資源是同時執行的,不分先後,所以控制先後順序必須的利用某個參數
模塊寫好後,看/etc/puppet下文件 內容,如下:
在modules.pp中 import "模塊名”,在site.pp裏面 import modules.pp
還有個節點pp,可義爲nodes.pp,在init.pp裏也有import,nodes.pp裏面可以這樣寫
node default {
include 'iptables'}
對默認節點使用iptables,要結某個節點使用iptables,可以node '節點名' {}
驗證測試
rsync模塊例子使用
Puppet結合rsync同步文件是參考網上一篇文章,模塊是由別人寫的,可以下載自由使用,但測試後,發現rsync客戶端同步還是有問題,所以自己在裏面填了部分client,可以實現文件同步
參考文章網址:http://www.mysqlops.com/2012/02/20/puppet-rsync.html#comment-1564
當然,同步文件也可以使用puppet文件服務器,要用到fileserver.conf文件 ,同步小文件可以,但考慮到要同步大文件還是考慮用rsyncx效率要高點
根據文章中,先下載兩個模塊到modules
cd /etc/puppet/modules/
git clone https://github.com/onyxpoint/pupmod-concat && mv pupmod-concat concat
git clone https://github.com/onyxpoint/pupmod-rsync && mv pupmod-rsync rsync
Git如果沒有裝的話,yum下,git好象類似svn(有待研究),git時可能會報個錯,如下解決即可
Cloning into cancan…
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while
。。。。。
解決辦法:
git config --global http.sslVerify false
下載後,就該配rsync服務了,我選擇puppet1(server)作爲rsync-server,在node.pp裏面如下配置
在puppet1運行 puppetd --test --server puppet1 ,即可生成rsyncd.conf文件,啓動rsync服務
(注意:防火牆中要過濾873服務端口)
rsyncd的配置文件 應該大家不默認,不多說了
服務端配置好後,需要配置客戶端了,但按上面那個鏈接來做,我沒有成功,可能跟版本有關,大家可以嘗試下他的做法,我現在共享下我的做法
cd /etc/puppet/modules/rsync/manifests/
進到下載的模塊後,有init.pp server server.pp 3個文件,觀察裏面內容,可自己編寫
client.pp client/rs.pp
回到note.pp 對節點puppet2做下面配置,
注:上面rsync在服務端配置兩模塊,default和test,對應路徑都爲puppet1下/usr/local/src
在note.pp對節點2中,我寫的是定義的模塊名,所以意思就是把puppet1/usr/local/src下的文件同步到puppet2下的/tmp/test /tmp/test1
驗證測試:
在puppet1上,有兩文件
在puppet2上
同步成功
Puppet 功能非常強大,自身包括了很多的資源,根據自己的愛好和自己工作實際所需,可以有選擇有研究,還有cron也是很好用的,並且配置也是比較簡單的,有興趣的可以一起研究