上一篇主要介紹了puppet的基本工作原理和資源的相關初步使用;
這一篇主要介紹puppet中很重要的2個概念:子產品和類;
===================================================================
1 子產品
1.1 需求
1.2 定義
1.3 詳細說明
1.4 子產品的目錄組織結構
1.5 子產品管理
2 類
2.1 定義
2.2 詳細說明
2.3 類的分類
2.4 類的聲明
2.5 執行個體
1.1 需求
若要定義一個完整的服務(如nginx服務),依賴單一的manifest檔案(如nginx.pp)遠遠不夠,因為一般的服務都需要依賴于衆多外部資源,如類繼承、靜态檔案複制、模闆等,故一個完整的服務就需要利用子產品來實作了;
1.2 定義
為了實作某種完備功能而組織成一個獨立的、自我包含的目錄結構;
一句話就是:子產品就是一個目錄結構,目錄名就是子產品名;
1.3 詳細說明
一般需要把manifest檔案分解成易于了解的結構,例如将類檔案、配置檔案甚至包括後面将提到的子產品檔案等分類存放,并且通過某種機制在必要時将它們整合起來,這種機制即“子產品”;
隻要在某子產品中定義了一個類,就可以在任何manifest檔案中使用它,puppet會自動去查找并裝載包含了這個類的定義的manifest檔案;
是以,可以在puppet上提供多個子產品,并按需要在manifest檔案任意使用它們。于是,基于子產品機制的puppet的主manifest檔案就可以變得很小,也更易讀并能基于政策進行定制;
1.4 子產品的目錄組織結構
子產品的存放位置:
如建構一個nginx子產品,子產品目錄是/etc/puppet/modules/nginx
manifests/:清單存儲目錄
init.pp:包含一個與子產品名稱同名的類,同時聲明其它子類
*.pp:一個清單通常隻包含一個類,且建立的清單檔案名與類名相同,如子類nginx::web對應web.pp清單檔案
files/:檔案存儲目錄
通路路徑:puppet:///modules/Module_Name/File_Name
templates/:模闆存儲目錄
*.erb:使用模闆函數template()裝載并運作其中子產品語言,運作後會生成靜态檔案;
通路路徑:template(‘Module_Name/Template_Name’)
lib/:ruby插件存儲目錄,用于實作一些自定義的功能
tests/:目前子產品的使用說明和樣例;
spec/:為lib目錄中的插件提供使用說明和樣例;
在子產品根目錄下,通常還需包含如下文檔
LICENSE # 版本說明
Modulefile # 子產品說明
README # 其它說明
1.5 子產品管理
線上下載下傳子產品站點:https://forge.puppetlabs.com
顯示本地已安裝的子產品:puppet module list
搜尋子產品:puppet module search Module_Name
安裝子產品:puppet module install Module_Name
2.1 定義
為了實作通用目标或目的組織在一起的一個或多個資源,即命名的代碼塊;
2.2 詳細說明
類在某位置建立之後可在puppet全局使用;
puppet的類可以繼承,也可以包含子類;
類的名稱隻能以小寫字母開頭,可以包含小字字母、數字和下劃線;
每個類都會引入一個新的變量scope,這意味着在任何時候通路類中的變量時,都得使用其完全限定名稱,如${nginx::params::nx_temp_dir};
2.3 類的分類
不帶參數的類:可通過include或資源式的方式進行聲明使用;
帶參數的類:同一個類在不同的OS上可能會略有不同,是以需要通過擷取相應系統的fact來實作有差別對待;然而,萬一相應的OS沒有輸出類所期望的fact或者是類依賴于非fact因素時,此機制将無法滿足需求;此時就需要使用帶參數的類來完成此類功能,同時在聲明類時為其參數傳遞相應的值即可完成傳參功能;隻能使用資源式的聲明方式;
2.4 類的聲明
類定義後,隻有被調用才會執行,調用類的操作就叫做“聲明一個類”
聲明類的方式主要有4種:
include Class_Name # 使用include聲明類
class {Class_Name: } # 使用資源式的聲明方式,可以聲明帶參數的類
require # 與include類似
ENC
2.5 執行個體
本文出自 “” 部落格,請務必保留此出處