天天看點

Puppet學習之模闆(6)

1.puppet的類 1.1Tips:

  • puppet 2.7之後,基類必須無參。
  • 子類和父類有相同的屬性,如果在子類中再次指派,将覆寫掉原有的屬性值。
  • 如果想取消某個屬性的值,可以使用undef覆寫原有的值。
  • 可以通過require對資源增加屬性。

  例子:   class :: foo inherits from nginx { service { 'nginx':  require +> [File['nginx.conf'], File['foo.conf']], } } 通過require+參數追加後,在子類nginx::foo中所定義的service資源需要依賴兩個檔案才能啟動,其他參數預設繼承父類。

1.2 參數化類 puppet中不存在重載,如果一個類被聲明多次,并且存在互相沖突的參數值,puppet會編譯失敗。 需要使用Hiera這個參數自動化查詢工具 參數化類,是指通過動态變量的查找将參數傳遞到類。可以在節點範圍内設定一些變量,進行類的聲明,并将變量配置設定給父範圍,這個類就會查找所需的資訊并進行應用。 參數化類缺點如下:所有變量将應用到全局命名空間。 (1)參數化類定義  class nginx ($package, $port) {.........} (2)參數化類的使用 局部變量$package和$port在類中的定義可以作為參數名,也可以在作用域内使用。 #作為參數名 class nginx ($package, $port) {    package {$package: ensure => present}

#在類作用域中引用 file {'nginx.conf': port => $port, ensure => tile,   } } (3)參數預設值 class nginx ($package, $port = '80') {.......}

(4)聲明參數化類 class {'nginx':} 或者 class {'nginx': $package => 'nginx', $port => '80'}

2.模闆 2.1 Puppet模闆主要是基于ERB。 (1)标簽 除打上标簽的内容外,ERB模闆中的内容都會原封不動的傳送回puppet <% document = "" %> (2)列印表達式 注意與标簽的差別 <% = sectionheader %> 或者 environment = <% = gitversion [0,5]%>

(3)注釋 <%# this is comment. %>

(4)禁止換行 <% document += thisline-%>

2.2ERB模闆文法 <%= ruby expression%>直接替換成表達式的值 <% ruby code %> Ruby代碼,包括條件,循環等 <%# comment%>注釋 <%% or %%> 等同于<% or %>,分别進行 <%-    等同于<%,閉合标簽,控制代碼前輸出大量空格 -%>    等同于%>,  閉合标簽,控制代碼後輸出大量空格 例子: <%= @ipaddress%> 也可以寫成 <%= ipaddress%>

2.3 變量的引用 目前範圍内的變量都可以作為ruby的變量,用@符号引用 puppet傳遞一個scop對象到模闆中,其中包含目前設定的變量,以及其他資料。可以使用scope對象的lookupvar方法找到任何變量 (1)超出本範圍的變量 <% = scope.lookipvar ('apache::user')%> (2)測試不明變量 <% if @myvar%> myvar has <%= @myvar%> value <% end %> (3)擷取當期作用域下的所有變量名 如果使用的作用域在一個to_hash下,可以得到一個在目前作用域下的所有哈希變量表。這個哈希清單使用多個變量(osfamily),而不是合格的名稱(::osfamily). 如下代碼将列印所有變量 <%scope.to_hash.keys.each do |k| -%> <%=k%> <% end -%>

2.4模闆結合 多個模闆,可以使用逗号結合 template (’mumodule/template1.erb‘,   ’mumodule/template2.erb‘)

2.5數組疊代 $values = [var1, var2, other] <% values.each do |val| -%> some stuff with <%= val %> <% end -%>

2.6文法檢查 erb -P -x -T '-' mytemplate.erb | ruby -c

以上參考《Puppet實踐》

繼續閱讀