這一節學習puppet的資源屬性以及使用方法。 node
咱們通常在node.pp文件中爲每一臺主機設置節點定義,若是有許多節點,node.pp不會變得很大,由於puppet有方法來處理這些問題。若是定義了節點,可是沒有配置任何內容,puppet agent鏈接master時會識別出這個節點但並不進行任何操做。你能夠定義個叫作default的默認節點,若是沒有其餘節點定義存在,這個節點的內容就會被應用到主機上。 shell
puppet有一個節點繼承結構,可讓一個節點內容繼承於另外一個節點,在同一個時刻,每一個節點只能繼承於一個節點。可是隨着節點數量的增長,當只有部分節點須要調整時,這種結構可能會出現問題,因此最好使用平面的樹形節點分類結構而不是節點繼承。在puppet中能夠設置變量,在同一個做用域中給同一個變量賦值會致使錯誤,而每個類、定義、節點都會引入一個新的做用域,在不一樣的做用域中能夠對一個變量進行從新賦值。 apache
模塊是包含了資源、類、文件以及配置文件模板的獨立容器,咱們能夠用模塊來定義每臺主機配置的不一樣部分,模塊是puppet清單的結構化集合,puppet會搜索模塊路徑來尋找模塊並加載它們,默認的模塊路經是/etc/puppet/modules和/var/lib/puppet/modules,這個路徑能夠由modulepath選項設置,而每一個模塊目錄又有特定的目錄結構,假如咱們的模塊放在/etc/puppet/modules目錄下,咱們在modules目錄下創建一個apache模塊目錄,目錄結構以下: ssh
apache/ apache/manifests apache/manifests/init.pp apache/templates apache/files
咱們能夠在init.pp文件中建立一個和模塊同名的類,而後用include函數把這個模塊應用到一個節點上面,include函數能夠將包含在一個類或者模塊中的資源添加到節點。就如上一節的ssh和tree模塊同樣。函數只能運行在master上。 函數
在init.pp文件中建立一些類和初始資源,模塊能夠由多個類組成,這樣一來init.pp文件中就有愈來愈多的類和資源,管理起來不是很方便,puppet可讓設置的每個類都放在相關模塊的manifests目錄下的一個獨立文件中,而不是隻能放在init.pp文件中,當puppet載入模塊時會自動搜索以.pp做爲後綴名的文件而後自動導入它們。 學習
咱們已經瞭解了建立模塊的目錄結構,接下來要建立類和資源,咱們知道資源由類型、標題和一系列屬性構成,每一個資源的屬性當中有一個被做爲資源的「名字變量」,用這個屬性的值來做爲資源的名字,package和service使用name屬性做爲它們的名字變量file資源使用path屬性做爲它的名字變量,大多數的時候咱們不須要設置名字變量,由於它們於標題相同,可是有時候若是標題過長,引用麻煩,咱們但願有一個簡單的名字,就能夠設置各個資源的名字變量。 spa
前面說過puppet能夠識別不一樣的平臺,那是由於在每一個節點上都安裝有facter,每次puppet運行時,facter都會收集agent的數據發送給master,master就根據這些收集來的數據分析agent使用的是那種平臺。咱們能夠在類中根據facter收集的數據使用case語句進行分析,而後選擇合適的平臺軟件包。 code
官方建議咱們在建立模塊時,使用::命名空間語法做爲在模塊中建立結構和組織的一種方法。前綴告訴puppet該類屬於哪一個模塊後綴則是類名。 繼承
以上是puppet的基礎知識,接下來會在實際應用過程當中對用到的知識進行學習。 資源