puppet安裝與使用--配置文件及常用資源
安裝完puppet後,然後需要了解下puppet 配置文件和一些常用資源的使用
1、默認情況下,配置文件位於/etc/puppet目錄下
moudules和namsapceauth.conf在yum安裝後沒有,可自行創建
1).auth.conf和namespaceauth.conf應該是一些認證,裏面配置有先生順序
2).modules目錄,裏面存放一些自定義的模塊,在manifests中調用,在modules某模塊結構如下:
manifests #存放代碼,另外init.pp必須存在
files #存放用於同步到客戶端的文件
templates #存放模板
3).manifests目錄,裏面存放site.pp 程序主入口
4).fileserver.conf,文件服務配置文件,格式如下:
[tools]
path /etc/puppet/modules/
allow
5). puppet.conf,服務啓動主配置文件
配置文件命名空間
main 通用配置選項
puppetd 客戶端配置選項
puppetmasterd 服務端配置選項
main命名空間選項
confdir 配置文件目錄,默認在/etc/puppet
vardir 動態數據目錄,默認在/var/puppet
logdir 日誌目錄,默認在$vardir/log
rundir puppet PID目錄,默認在$vardir/run
statedir state目錄,默認在$vardir/state
statefile state文件,默認在$statedir/state.yaml
ssldir SSL證書目錄,默認在$confdir/ssl
trace 發生錯誤時顯示跟蹤信息,默認false
filetimeout 檢測配置文件狀態改變的時間週期,單位秒,默認15秒
syslogfacility 指定syslog功能爲user級,默認爲daemon級
puppetmasterd命名空間選項
user 後臺進程執行的用戶
group 後臺進程執行的組
mainfestdir mainfests文件存儲目錄,默認爲$confdir/mainfests
mainfest mainfest站點文件的名字,默認爲site.pp
bindaddress 後臺進程綁定的網卡地址接口
masterport 後臺進程執行的端口,默認爲8140
puppet命名空間選項
server puppet puppet服務器,默認爲puppet
runinterval seconds puppet應用配置的時間間隔,默認1800秒(0.5小時)
puppetport port 後臺進程執行的端口,默認8139
6).autosign.conf,自動答名,格式如下:
* 表示所有
puppet* puppet開頭的所有
192.168.140.0/24 網段
事先要在puppet.conf中[puppetmaster]下填加
autosign=true
autosing=/etc/puppet/autosign.conf 這兩行
2、Puppet能管理的資源有很多,常見的也是常用的,有file,exec,package,service,cron等(各個資源參數可以用法使用下面命令可以查到,簡單說下常用的參數)
Puppet describe --list 查詢所支持的資源
Puppet describe file 查看該資源的用法
1).puppet file資源管理
【puppet file 參數介紹】
backup
決定文件的內容在被修改前是否進行備份. 利用filebucket對文件進行備份,按文件的md5sum進行歸類,便於恢復文件的時候找到文件.可以把文件備份到 puppet 客戶端,也可以通過設置backpup => bucket_name 把文件備份到網絡上的其他機器. 如果backup的值是一個點號”.”開頭的字符串,puppet會把文件備份在同一目錄下,備份文件的擴展名就是 bakcup裏面的那個字符串.如果設置 backup => false , 該文件不做備份.
checksum
怎樣檢查文件是否被修改,這個狀態用來在複製文件的時候使用, 這裏有幾種檢測方式,包括md5 ,mtime,time,timestamp等.
默認的檢測是用md5
content
把文件的內容設置爲content 參數後面的字符串, 新行,tab,空格可用 escaped syntax 表示
ensure
如果文件本來不存在是否要新建文件,可以設置的值是 absent和present,file和directory. 如果指定 present,就會檢查該文件是否存在,如果不存在就新建該文件,如果指定是 absent, 就會刪除該文件(如果recurse => true ,就會刪除目錄).
force
force 當前的唯一作用是用在把一個目錄變成一個鏈接,可用的值是ture和false
group
指定那個該文件的用戶組,值可以是gid或者組名
ignore
當用recursion 方法複製一個目錄的時候,可以用ignore來設定過濾條件,符合過濾條件的文件不被複制. 使用ruby自帶的匹配法則.因此shell級別的過濾表達式完全支持,例如[a-g]*
links
定義操作符合鏈接文件. 可以設置的值是follow和manage; 文件拷貝的時候,設置follow,會拷貝文件的內容,而不是隻拷貝符合鏈接本身,如果設置成manage ,會拷貝符合鏈接本身.
Mode
mode用於設置文件的權限
owner
設置文件的屬主
path
指定要管理文件的路徑,必須用引號引起來, 這也是一個資源的 namevar ,通常path 等於資源的title
recurse
設置是否以及如何進行遞歸操作, 可以設置的值是 false,true ,inf ,remote
source
拷貝一個文件覆蓋當前文件,用checksum來判斷是否有必要進行復制,可以設置的值是一個引用的完整的文件路徑,或者是URI,當前支持的URI只有puppet和file ; 這是一個對文件常用的操作,可以讓puppet修改系統的配置文件.
target
是爲創建鏈接的。可以設置的值爲notlink.
type
檢查文件是否只讀
2).puppet exec資源管理
【puppet exec 參數介紹】
command:將會被執行的命令,必須爲被執行命令的絕對路徑,或者得提供該命令的搜索路徑。如果命令被成功執行,所有的輸出會被記錄在實例的正常(normal)日誌裏,但是如果命令執行失敗(既返回值與我們所指定的不同),那麼所有的輸出會在錯誤(err)日誌中被記錄。
這個是exec資源類型的名變量(namevar)。
creates:
指定命令所生成的文件。如果提供了這個參數,那麼命令只會在所指定的文件不存在的情況的被執行:
cwd:
指定命令執行的目錄。如果目錄不存在,則命令執行失敗。
Group
定義運行命令的用戶組。在不同的平臺下的運行的結果無法確定,由於不同用戶運行命令的時候,變量是不變的,所以這是平臺的問題,而不是Ruby或Puppet的問題。
logoutput
是否記錄輸出。默認會根據exec資源的日誌等級(loglevel) 來記錄輸出。若定義爲on_failure,則僅在命令返回錯誤的時候記錄輸出。可取的值爲:true,false和其他合法的日誌等級。
Onlyif
如果這個參數被設定了,則exec只會在onlyif設定的命令返回0時才執行。例如:
exec { "logrotate": path => "/usr/bin:/usr/sbin:/bin", onlyif => "test `du /var/log/messages | cut -f1` -gt 100000" }
只有在test返回true的時候logrotate纔會被運行。
需要注意的是onlyif定義的命令跟主命令遵循同樣的規則,也就是說如果path沒有被設置的話,需要使用絕對路徑。
除此之外,onlyif還可以接受數組做爲其值,例如:
onlyif => ["test -f /tmp/file1", "test -f /tmp/file2"]
上面的代碼限定了只有在所有數組中的條件返回true時exec纔會被執行。“
path
命令執行的搜索路徑。如果path沒有被定義,命令需要使用絕對路徑。路徑可以以數 組或以冒號分隔的形式來定義。
refresh
定義如何更新命令。當exec收到一個來自其他資源的事件時,默認只會重新執行一次 命令。不過這個參數允許你定義更新時執行不同的命令。
refreshonly
該屬性可以使命令變成僅刷新觸發的,也就是說只有在一個依賴的對象被改變時,命令纔會被執行。僅當命令與其他對象有依賴關係時,這個參數纔有意義。當你要觸發某個行爲時,會顯得很有用:
# Pull down the main aliases file file { "/etc/aliases": source => "puppet://server/module/aliases" } # Rebuild the database, but only when the file changes exec { newaliases: path => ["/usr/bin", "/usr/sbin"], subscribe => File["/etc/aliases"], refreshonly => true }
要注意的是隻有subscribe和notify可以促發行爲,而不是require,所以在使用refreshonly時,只有同時使用subscribe或notify纔有意義。有效的值爲true, false。
unless
如果這個變量被指定了,那麼exec會執行,除非unless所設定的命令返回0。?
user
定義運行命令的用戶。 注意如果你使用了這個參數,那麼任何的錯誤輸出不會在當下被捕捉,這是Ruby的一個bug。
3).puppet package資源管理
【puppet package 參數介紹】
adminfile
軟件包管理器,通常是爲了安裝軟件包。這個參數只適用於Solarias
allowcdrom
告訴 apt 允許使用cdrom作爲軟件源, 可以設置成false或者 true
category
軟件包設置的一個只讀的屬性
configfiles
是否保留或者替換軟件的配置文件,大多數軟件不支持這個參數,可設置的值是false,true
description
描述軟件包,軟件包設置的一個只讀屬性
ensure
設置該軟件包應該在什麼狀態. installed 表示要安裝該軟件,也可以寫成present; absent 表示反安裝該軟件,pureged 表示乾淨的移除該軟件,latest 表示安裝軟件包的最新版本.
namevar
該資源的namevar ; 軟件包的名字
4).puppet service資源管理
【puppet service 參數介紹】
binary :可執行文件。這個只用在不支持init腳本的情況下。
control :用來管理服務的,通常是用在hp-unix系統上。
enable :服務是否隨開機而啓動,可設置的值爲true,false.
ensure: 服務是否運行,可設置的值爲running,stopped,也可以用true,false.
hasrestart: 服務的init腳本是否支持restart參數,可設置的值爲true,false.
hasstatus :服務的init腳本是否支持status參數,可設置的值爲ture,false.
manifest :Specify a command to config a service,or a path to a manifest to do so.配置服務的命令,或者指定路徑。
name: 要運行的服務名字。
path: 指定查找init 腳本的路徑。
pattern :搜索進程表匹配字符串,用於不支持init的腳本。
provider :The specific backend for provider to use,可設置的值有base, daemontools,init等
restart :重啓服務。
Start: 開啓服務
status :服務運行狀態
stop: 停止服務
5).puppet cron資源管理
【puppet cron 參數】
command:
crontab要執行的命令, 環境變量按照系統本地規則進行管理,推薦使用絕對路徑.
ensure:指定該資源是否啓用,可設置成true或false
environment:在crontab環境裏面指定環境變量,例如 PATH=/bin:/usr/bin:/usr/sbin.
hour: 運行crontab的小時,可設置成0-23
minute:運行crontab的分鐘,可設置成0-59
month: 設置crontab運行的月份,1-12
monthday:一個月份中的日子,1-31
name:
該crontab的名字,這個名字用於管理員區分不同的crontab,以及puppet管理各種資源關係.
user:
把該crontab加到那個用戶的crontab列表,默認是運行puppet的用戶
weekday:
運行crontab的星期數,0-7,週日是爲0.
3、簡單使用例子
puppet程序的主要入口在/etc/puppet/manifests/note.pp中,修改note.pp,如下配置
node default {
file {"/tmp/test":
ensure => "directory";
"/tmp/test/test.sh":
ensure => "present",
mode => 744,
owner => root,
content => "#/bin/bash\necho test | mail -s test [email protected]\n"}
cron {"crontab":
command => "/tmp/test/test.sh",
user => root,
minute => 59,
hour => 7}
exec {"test":
command => "echo test>/tmp/test/test",
user => "root",
path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"}
service {["smb","nfs"]:
ensure => "stopped"}
package {"screen":
ensure => "installed"}
}
上面簡單例子解釋:對於默認節點,在/tmp/下創建test目錄,在test目錄下再建立文件test.sh,內容爲#/bin/bash echo test | mail -s test [email protected],屬主爲root,屬性744,並在每天7點59分執行此腳本,測試exec資源,在/tmp/test下用命令建立test文件,內容爲test,使smb,nfs服務處於停止狀態,安裝screen包
驗證:在服務端puppet1上執行puppetrn puppet3後,到客戶端puppet3上查看