puppet语法学习
先講講shell 與puppet的不同。
shell 腳本是過程式的,里面描述的是命令執行的過程,shell 通常很短,可以很快寫出來,但是很快又會被拋棄,它常常依賴于特定操作系統環境。
puppet 語言是結果式的,使用者將自己想要達到的目的通過puppet語法描述給puppet,puppet去完成它,使用者不需要關心過程,整個過程完全被抽象化了。譬如安裝一個軟件包,只需要ensure => present ,不需要關心操作系統是debian還是redhat 。
個人總結看來,puppet語言形式上的特點就是“花括號分類,冒號聲明,逗號結束”。
接下來講puppet的語法,主要是舉例(持續完善中,,,)
1、軟件包管理
安裝
package {"vim": ensure => present, }多個軟件包也可以一起寫,用中括號和逗號
package {["httpd","mysql-server","php","php-mysql"]: ensure => present, }卸載
package {"vim": ensure => absent, }2、權限管理
file { "/etc/sudoers":owner => root,group => root,mode => 400, }
權限遞歸
file { '/some/dir':mode => 644,recurse => true,}目錄里的所有文件會變成644,目錄就會755
3、服務
service {"sshd":hastatus => true,harestart => true,ensure => running,enable => true, }4、文件管理
文件托管
file {"/etc/my.cnf":ensure => present,source => "puppet:///modules/mysql/my.cnf"owner => mysql,group => mysql, }這里有個地方比較蛋疼,文件路徑是/etc/puppet/modules/mysql/files/my.conf,寫成puppet規則時files會被省略,寫成puppet:///modules/mysql/my.cnf
鏈接
file { "/etc/inetd.conf":ensure => link,target => "/etc/inet/inetd.conf",}5、監視和審計
file { "/etc/passwd":audit => [ owner, mode ], }(當文件的權限屬性發生變化時發出消息,而不修正權限)
6、執行命令
exec { "reload nginx":command => "/usr/sbin/nginx reload",require => Package["nginx"],refreshonly => true, } file { "/etc/nginx/nginx.conf":source => "puppet:///modules/nginx/nginx.conf",notify => Exec["reload nginx"], }(notify表示配置文件發生更改,就觸發nginx平滑重啟)
7、定時任務crontab
cron { ntpdate:command => "/usr/sbin/ntpdate 192.168.1.3",user => root,hour => '*/4',minute => '1',ensure => present, }(這樣會導致流量瞬間擁擠,puppet很周到,提供一個偽隨機的辦法)
cron { ntpdate:command => "/usr/sbin/ntpdate 192.168.1.3",user => root,hour => '*/4',minute => fqdn_rand( 60 ),ensure => present, }(盡管是每四個小時運行一次,但是不同的機器還是會在不同的時刻去執行命令【分鐘數為0-60隨機】,將流量分散開來。)
8、刪除
tidy { clean_temp:path => "/tmp/temp",type => "ctime",recurse => true,rmdirs => true,age => "1d",backup => false, }(recurse表示遞歸)
高級用法之class
單獨的class
class ssh { package {"openssh-server":ensure => present, } file {"/etc/ssh/sshd_config":ensure => present,owner => root,group => root,source => "puppet:///files/sshd_config",notify => Service ["sshd"], } service {"sshd":ensure => running,hasstatus => true,hasrestart => true,enable => true, } }合并的class(class可以被引用,成為另一個class的子集,用逗號分隔,結尾沒有逗號)
class basic {include ssh, httpd }節點的語法和引用class一樣
node "apache01.test.org" {include httpd,mysql,php }用戶管理
(password也就是/etc/shadow中的已經加密的密碼,把它復制出來就好了,密碼中包含 $ 的話,一定要記得加單引號。)
puppet還可以獨立于master單獨運行,功能也足夠強大,幾乎所有能寫成puppet規則的語句,都可以直接在puppet命令行執行,例如:
1、安裝軟件包
puppet resource package httpd ensure=presentpuppet 可以識別常見的linux發行版,自動調用yum或者apt去安裝軟件。
2、管理服務
puppet resource service httpd ensure=running enable=truepuppet會調用/etc/init.d/下的啟動腳本,這個比常見的監控腳本強太多了。(puppet 2.7以上)
3、將規則寫入本地文件來執行
puppet apply /opt/puppet/rules/init.pp轉載于:https://blog.51cto.com/purplegrape/946362
總結
以上是生活随笔為你收集整理的puppet语法学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Using JSON for data
- 下一篇: 几种php 删除数组元素方法