puppet語法與命令詳解

在學習Puppet語法之前需要掌握Puppet中資源、屬性、類、模塊、變量、參數、節點等相關概念。

資源:資源可以是文件、服務、軟件包、自定義腳本等。

屬性:資源需要定義相關的屬性值,否則毫無意義。

類:將多個資源組織起來進行重新定義。

模塊:多個類的合集。

變量:Puppet與其他語言類似,同樣支持變量。

參數:又稱參變量。

節點:Puppet每一個客戶端,即主機(Host)。



資源:

每個資源的定義都具有標題、類型,以及一系列的屬性。每個資源在Puppet中名稱必須唯一。

例如Puppet管理Nginx服務的主配置文件---nginx.conf,類型file,通常稱爲File資源。

file {'nginx.conf':
  ensure => file,
  mode   =>'06400',
  owner  => root,
  group  => root,
  }
 service {'nginx';
  hasrestart => true,
  hasstatus => true,
  subscribe =file ["nginx.conf"],
  }


屬性:

每個資源都有它相應的屬性,否則就失去意義。上面定義了4個屬性

分別爲:類型ensure、權限mode、用戶owner及用戶組

資源定義兩個其他屬性值----hasrestart與hasstatus,這兩屬性值都爲true.


類:

通常類以應用名或作用名命名,比如應用軟件Nginx、Apache等

class nginx {
file 
  {'nginx.conf':
  ensure => file,
  mode   =>'06400',
  owner  => root,
  group  => root,
  }
 service {'nginx';
  hasrestart => true,
  hasstatus => true,
  subscribe =file ["nginx.conf"],
  }
  }

模塊

當類比較多的時候,就需要把類規範起來,定義成模塊的方式進行管理。

[root@node1 tmp]# tree /etc/puppet/modules/httpd/
/etc/puppet/modules/httpd/
|-- files
|-- manifests
|   `-- init.pp
`-- templates

3 directories, 1 file

節點

節點就是一個客戶端,通常以主機名命名。

[root@node1 tmp]# more /etc/puppet/manifests/nodes/node2.jiabin.com.pp 
node 'node2.jiabin.com' {
include test
include httpd
}

[root@node1 tmp]# more /etc/puppet/manifests/site.pp 
import "nodes/node2.jiabin.com.pp"

通過以上代碼可以看到,node爲定義了主機名爲”node2.jiabin.com"的主機,並加載了httpd類,以及定義了主機變量$vhost.


二、Puppet語法風格

總體來說Puppet的語法規則是以括號"{}"分類,以冒號":"聲明,以逗號","屬性約束

例如:

package {'nginx': ensure => present, }


必須使用兩個空格表示縮進;

不得使用文字製表符;

尾部不能有空格;

寬度不能超過80字符;

使用=>符號進行對齊。


變量的引用

不包含變量的字符串應該使用單引號('')括起來。需要應用變量是應使用雙引號("")括起來。字符串中的多有變量應該使用花括號"{}"括起來。

如:

"/etc/${file}.conf"

對變量本身的引用

變量是變量本身,不需要引號。

mode => $my_mode


三、資源

  1. 資源名

資源名採用單引號('')引起來,採用冒號(:)結尾。也可以使用(“”)的寫法

package {'openssh': ensure  => present }

package {"openssh": ensure  => present }

2.對齊

3.屬性的順序

聲明資源時,應先定義ensure屬性。方便閱讀。

file { '/tmp/readme.txt':
  ensure => file,
  owner => root.
  .......
  }

四、Puppet命令詳解

Puppet提供大量的命令來幫助我們進行有效的管理。Puppet中所有的命令都可以使用Puppet help命令查看。

  agent                                         #客戶端進程,負責從Master獲取數據
  apply                                         #運行本地 manifests
  ca                                            #本地證書的管理
  catalog                                       #編譯、保存、查看Puppet代碼
  cert                                          #證書頒發,用於簽署證書
  certificate                                   #提供訪問CA證書的管理
  certificate_request                           #管理證書請求
  certificate_revocation_list                   #管理撤銷證書的列表
  config                                        #配置選項
  describe                                      #管理遠程網絡設備
  device                                        #管理遠程網絡設備
  doc                                           #生成Puppet文檔
  facts                                         #系統信息檢查
  file                                          #在filebuckete中檢索和存儲文件
  filebucket                                    #在filebucket中檢索和存儲文件
  help                                          #查看幫助
  inspect                                       #發送report報告
  instrumentation_data                          #管理監聽的數據
  instrumentation_listener                      #管理監聽狀態
  instrumentation_probe                         #管理監聽探測
  key                                           #創建、保存、刪除證書密鑰
  kick                                          #遠程控制Agent,遠程觸發puppet agent命令
  man                                           #查看手冊
  master                                        #服務端進程
  module                                        #從Puppet Forge創建、安裝、查詢模塊
  node                                          #管理節點
  parser                                        #解析器管理
  plugin                                        #插件管理
  queue                                         #隊列進程
  report                                        #創建、查看報告
  resource                                      #查看資源幫助
  resource_type                                 #查看類、默認資源類型與節點信息
  secret_agent                                  #模擬Agent
  status                                        #查看Puppet狀態

Puppet常用命令

1、puppet master

參數詳解如下:

*--daemonize:                                   #-D發送到後臺守護進程,默認選項
*--no-daemonize:                                #不發送到後臺守護進程
*--debug:                                       #-d啓用完整的調試模式
*--help:                                        #-h查看幫助
*--logdest:                                     #-l日誌送發方式,默認採用syslog配置
*--verbose:                                     #-v顯示詳細信息
*--version:                                     #-V打印Puppet版本
*--compile:                                     #以JSON的方式輸出編譯的catalog

--genconfig輸出默認的配置文件,代碼如下:

[root@node2 ~]# puppet master --genconfig>puppet.conf

最常用的是不啓用守護進程的方式運行,用於調試Puppet代碼

2、puppet agent

puppet agent在每個節點以守護進程方式運行,通常每30分鐘向master請求一次,以確認信息並詢問是否有變更,然後複製運行編譯好的Catalog代碼。

命令的參數詳解如下:

*--certname:                                    #指定客戶端certname(唯一ID)
*--daemonize:                                   #-D發送到後臺守護進程,默認選項
*--no-daemonize:                                #不發送到後臺守護進程
*--debug:                                       #-d啓用完整的調試模式
*--detailed-exitcodes:                          #提供詳細的退出代碼
*--digest:                                      #指定證書指紋算法,默認爲MD5算法
*--disable:                                     #禁用,禁止puppet agent在此節點執行
*--enable:                                      #啓用,重新允許執行puppent agent
*--fingerpring:                                 #顯示當前證書的指紋
*--logdest:                                     #-l 日誌發送方式,默認採用syslog配置
*--no-client:                                   #不要創建客戶端配置文件,當listen=true
*--noop:                                        #使用'noop’模式,Puppet運行Catalog
*--onetime:                                     #-o 運行一次,配合--no-daemonize使用
*--server:                                      #啓動另一類型的服務
*--test:                                        #-t 測試,常用選擇
*--verbose:                                     #-v 顯示詳細信息
*--version:                                     #-V 打印Puppet版本
*--waitforcert:                                 #-w 當Master未簽署此節點證書時,puppet ag                                                ent將等待簽署,並默認沒2分鐘重新連接Maste                                                r以確認是否完成簽署

主要命令apply

puppet apply 命令參數詳解

*--debug:                                       #啓用完整的調試模式
*--detailed-exitcodes:                          #提供詳細的退出代碼
*--help:                                        #幫助
*--loadclasses:                                 #加載任何已保存類
*--logdest:                                     #日誌送發方式,默認採用syslog配置
*--noop:                                        #使用'noop’模式
*--execute:                                     #執行命令中指定的Puppet代碼
*--verbose:                                     #顯示詳細信息
*--catalog:                                     #運行puppet master採用--compile輸出JSON

實例一、將輸出信息輸出到日誌文件

[root@node1 manifests]# puppet apply -l /tmp/init.log init.pp 

** (process:18930): WARNING **: nm_client_get_devices: error getting devices: The name org.freedesktop.NetworkManager was not provided by any .service files

[root@node1 manifests]# cd /tmp/
[root@node1 tmp]# cat init.log 
Wed Dec 31 11:55:36 +0800 2014 Puppet (notice): Compiled catalog for node1.jiabin.com in environment production in 0.04 seconds
Wed Dec 31 11:55:36 +0800 2014 Puppet (notice): Finished catalog run in 0.01 seconds

實例二、在客戶端運行命令

[root@node2 ~]# mkdir -p /etc/puppet/modules/test/manifests
[root@node2 ~]# vim /etc/puppet/modules/test/manifests/init.pp
[root@node2 ~]# puppet apply -e "include test" --noop
Notice: Compiled catalog for node2.jiabin.com in environment production in 0.10 seconds
Notice: Finished catalog run in 0.02 seconds

去除 --noop後可以查看/tmp下生成的node2.txt文件
[root@node2 ~]# puppet apply -e "include test" 
Notice: Compiled catalog for node2.jiabin.com in environment production in 0.07 seconds
Notice: Finished catalog run in 0.03 seconds
[root@node2 ~]# cd /tmp/
[root@node2 tmp]# ls
helloworld.txt  node2.txt
[root@node2 tmp]# cat node2.txt 
Hello World![root@node2 tmp]#

實例三、使用apply運行master編譯好的JSON文件。需要在服務端使用compile參數生成JSON文件再傳遞至客戶端執行。

1)先修改test類的內容,將"Hello World!" 修改爲“Testing JSON!":

[root@node1 tmp]# vim /etc/puppet/modules/test/manifests/init.pp 

class test {
    file { "/tmp/$hostname.txt": content => "Testing JSON!";}
}

2)使用compile參數生成JSON文件,代碼如下:

# puppet apply --catalog node2.jiabin.com.json

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章