日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

puppet语法学习

發布時間:2025/3/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 }


用戶管理

user { "root":ensure => present,name => "root",password => "SomeAlreadyEncryptedPassword"; } user {"admin":name =>"admin",ensure => present,shell => "/bin/bash",home => "/home/admin",groups => "admin,wheel",uid => 500,gid => 500,password => '$1$Nnh0M0$t9s7Bbwx2fFer6IP/QGdA0',require => Group["admin"], } group {"admin":ensure =>present, }

(password也就是/etc/shadow中的已經加密的密碼,把它復制出來就好了,密碼中包含 $ 的話,一定要記得加單引號。)



puppet還可以獨立于master單獨運行,功能也足夠強大,幾乎所有能寫成puppet規則的語句,都可以直接在puppet命令行執行,例如:


1、安裝軟件包

puppet resource package httpd ensure=present

puppet 可以識別常見的linux發行版,自動調用yum或者apt去安裝軟件。


2、管理服務

puppet resource service httpd ensure=running enable=true

puppet會調用/etc/init.d/下的啟動腳本,這個比常見的監控腳本強太多了。(puppet 2.7以上)


3、將規則寫入本地文件來執行

puppet apply /opt/puppet/rules/init.pp


轉載于:https://blog.51cto.com/purplegrape/946362

總結

以上是生活随笔為你收集整理的puppet语法学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。