#節點管理; node 'c1','c2','c3' { include package::install include services::system include services::lamp include privileges include software::distribution include directory::distribution include user::add include user::delete #include group::add include group::delete include crontab include exec::shell } ######################################################## #軟件包管理; #以數組的方式來定義須要安裝的軟件包; class package::install { package { ["nmap","telnet","mlocate","vim-enhanced","wget","bison","httpd","mysql","mysql-server"]: ensure => latest, allow_virtual => false, } } ###################################################### #系統服務管理; #有些人iptalbes的running測試沒成功,stopped 測試OK,不知道爲何? #這是因爲您停掉iptables後,再使用iptables -nL命令查看iptables的狀態致使,不信您能夠測試一下,這是血的教訓哈; class services::system { service { ["iptables","auditd","sshd","crond","rsyslog"]: ensure => 'running', #ensure => 'stopped', hasstatus => true, hasrestart => true, path => "/etc/init.d", enable => "true", #設置開機自啓動; #start => "/etc/init.d/iptables start"; } } class services::lamp { service {"/etc/init.d/mysqld": name => "mysqld", ensure => 'running', hasstatus => true, hasrestart => true, path => "/etc/init.d", enable => "true", #設置開機自啓動; #start => "/etc/init.d/mysqld start"; } service { "httpd": ensure => "running", } } ####################################################### #文件及目錄管理; #文件權限(4種方式); class privileges { File { #統一設置文件默認屬性; ensure => present, owner => "apache", group => "apache", mode => "644", } file { "www": path => "/var/www/html/", recurse => true, } file { #ensure => present|absent|file|directory|link, ["/etc/passwd","/etc/shadow","/etc/resolv.conf"]: #數組方式自定義文件屬性; owner => "root", group => "root", mode => "644"; "/etc/ssh/sshd_config": #title=name方式自定義文件屬性; owner => "root", group => "root", mode => "600"; "hosts": #title!=name方式自定義文件屬; name => "/etc/hosts", owner => "root", g roup => "root", mode => "644"; } } #文件分發; #須要先配置文件服務,編輯/etc/puppet/fileserver.conf文件; #若是服務端的文件有更改,客戶端會從新同步;同理,若是客戶端的文件被改動,一樣會從新同步,以服務端的文件爲準; class software::distribution { file { ["/data","/data/backup","/data/share"]: ensure => "directory"; } file { "key.sql": name => "key.sql", path => "/data/share/key.sql", source => "puppet://puppet-master-180/files/key.sql", } file { "optimize.sh": path => "/data/share/cname.sh",#客戶端路徑及文件名能夠隨意指定,只要目錄存在便可; source => "puppet://puppet-master-180/files/optimize.sh", backup => ".bak_$uptime_seconds",#存在同名文件,MD5值不一樣,先備份再覆蓋; } file { "httpd.conf": path => "/etc/httpd/conf/httpd.conf", source => "puppet://puppet-master-180/conf/httpd.conf", backup => ".bak_$uptime_seconds", } exec { "service httpd restart": command => "service httpd restart", path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin", subscribe => File["httpd.conf"], refreshonly => "true";#當上面定義的httpd.conf文件有變化的時候,觸發重啓服務的指令; } } #目錄分發; #須要先配置目錄服務,編輯/etc/puppet/fileserver.conf文件; class directory::distribution { file { "soft": name => "soft", path => "/data/soft", source => "puppet://puppet-master-180/directory/soft", recurse => true, #在遠程和本地都進行遞歸調用; } } ######################################################### #用戶管理; #puppet默認不會在/home目錄下建立用戶的家目錄; #新增用戶不用指定gid,因爲gid不存在,會報錯,默認會自動建立跟uid同樣的gid; #Password的值用grub-md5-crypt生成,而且注意用單引號把它括起來; class user::add { user {"add user": name => "nd", uid => 2015, #gid => 2015, password => '$1$zHS7H$zF6NeOpE.ruAfwn5V8bEg/', home => "/home/nd", shell => "/bin/bash", allowdupe => false, #不容許相同的UID存在; } } class user::delete { user { ["lp","games","ftp"]: ensure => "absent", } } ###################################################### #用戶組管理; class group::add { group { "add group": ensure => "present", name => "csgroup", gid => "2010", allowdupe => false, } } class group::delete { group { ["lp","games","ftp"]: ensure => "absent", } } ##################################################### #計劃任務; #到客戶端使用命令:crontab -l 查詢結果; class crontab { cron { "sync ntpdate": command => "sh /tmp/shell.sh", user => "root", minute => "03", hour => "03", } } ####################################################### #執行外部命令及腳本管理; class exec::shell { exec { "ntpdate": cwd => "/tmp", command => "sh /tmp/shell.sh",#客戶端腳本必須存在,不然會報錯; user => "root", path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin", } exec { "exec-mkdir-test": #cwd => "/data/share",#命令執行的路徑,如指定的路徑不存在,命令執行將失敗,系統命令部分可不用指定; command => "mkdir -p /data/share/{test,test1,test2}", user => "root", path => "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin", } } #END